如何利用Rcl.NET框架轻松接入ROS2生态系统?
摘要:Rcl.NET 是专为 .NET 平台(C#VB.NET 等)开发的 ROS2 官方标准客户端库,它基于 ROS2 核心底层的 RCL(ROS Client Library)C 语言层 进行原生封装,是 .NET 开发者接入 ROS2 生
Rcl.NET 是专为 .NET 平台(C#/VB.NET 等)开发的 ROS2 官方标准客户端库,它基于 ROS2 核心底层的 RCL(ROS Client Library)C 语言层 进行原生封装,是 .NET 开发者接入 ROS2 生态的核心开发工具
安装 ROS 2 环境(基于Linux系统)
1、docker 容器内安装 https://www.cnblogs.com/dosswy/p/19856550
2、Microsoft Store 安装 Ubuntu(WSL2 环境)
基于 ros2cs 生成消息类
# 第一步骤:使用 NuGet 包管理器安装:ros2cs
dotnet tool install -g ros2cs
# 第二步骤:创建 ros2cs.spec 文件指令
echo "include std_msgs" > ros2cs.spec
# 第三步骤:确保 ROS2 环境完全生效
source /opt/ros/jazzy/setup.bash
# 验证环境变量,必须包含 /opt/ros/jazzy
echo $AMENT_PREFIX_PATH
# 验证 std_msgs 存在
ros2 pkg list | grep std_msgs
#第四步骤:执行正确的 ros2cs 生成命令
# 加 --from-ament-index 从 ROS2 环境读取包,-o 指定输出目录
ros2cs --from-ament-index -o Std_Messages ros2cs.spec
Rcl.NET 示例代码
static async Task Main(string[] args)
{
// 创建并初始化 ROS2 上下文(负责节点生命周期、参数解析)
await using var ctx = new RclContext(args);
// 创建 ROS2 节点,节点名称:rclnet_publisher
using var node = ctx.CreateNode("rclnet_publisher");
Console.WriteLine("RclContext 初始化 ROS2 上下文成功...");
// 创建发布者,发布std_msgs/String类型的消息到指定话题
using var pub = node.CreatePublisher<Rosidl.Messages.Std.String>("/chatter");
Console.WriteLine("创建发布话题:/chatter 成功...");
int count = 0;
while (true)
{
// 构造消息
var msg = new Rosidl.Messages.Std.String($"Hello ROS2 from C# rclnet! Count: {count}");
// 发布消息
pub.Publish(msg);
Console.WriteLine($"已发布 /chatter: {msg}");
count++;
await Task.Delay(1000);
}
}
运行 Rcl.NET 验证
# 运行项目
dotnet run
# 监听话题
ros2 topic echo /chatter
