基于 Rcl.NET 框架接入 ROS2 生态

[复制链接]
发表于 2026-4-13 07:54:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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 天生消息类
  1. # 第一步骤:使用 NuGet 包管理器安装:ros2cs
  2. dotnet tool install -g ros2cs
  3. # 第二步骤:创建 ros2cs.spec 文件指令
  4. echo "include std_msgs" > ros2cs.spec
  5. # 第三步骤:确保 ROS2 环境完全生效
  6. source /opt/ros/jazzy/setup.bash
  7. # 验证环境变量,必须包含 /opt/ros/jazzy
  8. echo $AMENT_PREFIX_PATH
  9. # 验证 std_msgs 存在
  10. ros2 pkg list | grep std_msgs
  11. #第四步骤:执行正确的 ros2cs 生成命令
  12. # 加 --from-ament-index 从 ROS2 环境读取包,-o 指定输出目录
  13. ros2cs --from-ament-index -o Std_Messages  ros2cs.spec
复制代码

第三部分:Rcl.NET 示例代码
  1. static async Task Main(string[] args)
  2. {
  3.             
  4.     // 创建并初始化 ROS2 上下文(负责节点生命周期、参数解析)
  5.     await using var ctx = new RclContext(args);
  6.             
  7.     // 创建 ROS2 节点,节点名称:rclnet_publisher
  8.     using var node = ctx.CreateNode("rclnet_publisher");
  9.             
  10.     Console.WriteLine("RclContext 初始化 ROS2 上下文成功...");
  11.     // 创建发布者,发布std_msgs/String类型的消息到指定话题
  12.     using var pub = node.CreatePublisher<Rosidl.Messages.Std.String>("/chatter");
  13.             
  14.     Console.WriteLine("创建发布话题:/chatter 成功...");
  15.     int count = 0;
  16.     while (true)
  17.     {
  18.           // 构造消息
  19.           var msg = new Rosidl.Messages.Std.String($"Hello ROS2 from C# rclnet! Count: {count}");
  20.           // 发布消息
  21.           pub.Publish(msg);
  22.           Console.WriteLine($"已发布 /chatter: {msg}");
  23.           count++;
  24.           await Task.Delay(1000);
  25.     }
  26. }
复制代码
第四部分:运行 Rcl.NET 验证
  1. # 运行项目
  2. dotnet run
  3. # 监听话题
  4. ros2 topic echo /chatter
复制代码

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表