ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenRR 支持 ROS 2 指南:用 r2r 驱动 Navigation2 与 ros2_control 的完整教程(实验性)

OpenRR 支持 ROS 2 指南:用 r2r 驱动 Navigation2 与 ros2_control 的完整教程(实验性) OpenRR 支持 ROS 2 指南用 r2r 驱动 Navigation2 与 ros2_control 的完整教程实验性【免费下载链接】openrrOpen Rust Robotics项目地址: https://gitcode.com/gh_mirrors/op/openrrOpenRR 是一个用 Rust 编写的机器人学开源框架Open Rust Robotics其中arci-ros2模块通过r2r桥接库让你无需编写任何 C 代码就能在 Rust 中直接调用ROS 2的Navigation2导航栈与ros2_control关节轨迹控制器。本指南将手把手带你完成环境安装、构建编译并快速跑通导航目标发送与机械臂轨迹控制两个经典场景——请注意该功能目前仍处于实验性阶段。 什么是 OpenRR 的 ROS 2 支持OpenRR 采用接口与实现分离的架构核心层定义统一的机器人抽象接口如导航、移动底盘、激光扫描而具体实现则封装在独立的客户端 crate 中。ROS 2 的实现就位于arci-ros2/目录下主要包含以下能力模块功能对应源码Navigation通过 NavigateToPose 动作调用 Navigation2arci-ros2/src/navigation.rsMoveBase发布 /cmd_vel 并读取里程计arci-ros2/src/cmd_vel_move_base.rsros2_control通过 FollowJointTrajectory 动作控制关节arci-ros2/src/ros2_control.rsLaserScan订阅激光扫描话题arci-ros2/src/ros2_laser_scan.rsLocalization获取机器人位姿arci-ros2/src/ros2_localization_client.rsTransformResolver查询 TF 坐标变换arci-ros2/src/ros2_transform_resolver.rs其核心原理是r2r 是一个 Rust 与 ROS 2rclcpp之间的零拷贝桥接库OpenRR 在其之上创建了可克隆的Node封装见arci-ros2/src/node.rs并自动启动后台 spin 线程处理消息回调让 Rust 的异步代码风格得以自然延续。 环境准备ROS 2 Humble 一键安装步骤OpenRR 的 ROS 2 支持基于ROS 2 Humble版本请按顺序执行以下命令# 1. 安装 ROS 2 Humble参见 ROS 官方安装文档 # 2. 安装 OpenRR 所需的消息包与编译依赖 sudo apt install ros-humble-nav2-msgs ros-humble-geometry-msgs # 导航 sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers # ros2_control sudo apt install ros-humble-tf2-msgs # TF2 sudo apt install libclang-dev # r2r 编译依赖 小技巧libclang-dev容易被遗忘而 r2r 依赖它生成绑定代码缺失时编译会直接失败。 快速构建启用 ros2 feature 编译 OpenRRarci-ros2依赖 r2r被声明为可选 feature定义在arci-ros2/Cargo.toml中因此必须显式开启ros2featuresource /opt/ros/humble/setup.bash cargo build --features ros2构建完成后目标目录中会生成插件动态库libarci_ros2它将被后续的 openrr-apps 配置以插件形式加载。️ 实战一用 OpenRR 驱动 Navigation2 导航这是最经典的移动机器人场景——让 TurtleBot3 在 Gazebo 仿真环境中按目标点自动导航。第 1 步安装并启动 Navigation2 仿真按 Navigation2 官方文档安装 nav2 与 turtlebot3 仿真包后启动仿真ros2 launch nav2_bringup tb3_simulation_launch.py第 2 步发送导航目标位姿别忘了先在 RViz 中用2D Pose Estimate按钮设置机器人初始位姿然后执行./target/debug/openrr_apps_robot_command \ --config-path ./openrr-apps/config/turtlebot3_robot_client_config_ros2.toml \ send_navigation_goal -- -0.5 0.2 -1.5这条命令背后发生的事是OpenRR 加载 TOML 配置通过插件机制创建Ros2Navigation客户端arci-ros2/src/navigation.rs以nav2_msgs/NavigateToPose动作客户端向/navigate_to_pose发送带 map 坐标系的 PoseStamped 目标并等待导航完成或超时。第 3 步可选用 GUI 手动发送速度指令如果只想做简单的遥控移动还可以启动图形化速度发送器./target/debug/openrr_apps_velocity_sender \ --config-path ./openrr-apps/config/turtlebot3_robot_client_config_ros2.toml对应的 ROS 2 消息转换细节可查看arci-ros2/examples/ros2_cmd_vel.rs编程方式调用导航的完整示例在arci-ros2/examples/navigation.rs——整个示例不到 20 行 Rust 代码就创建节点、启动 spin 线程、发送目标并等待完成。 实战二用 ros2_control 控制两连杆机械臂OpenRR 将Ros2ControlClient实现为标准的JointTrajectoryClient接口arci-ros2/src/ros2_control.rs通过control_msgs/FollowJointTrajectory动作与 ros2_control 的关节轨迹控制器通信。第 1 步安装 ros2_control_demos克隆ros2_control_demos仓库切换到与 Humble 匹配的分支并编译然后 source 其install/setup.bash。第 2 步启动 rrbot 示例并切换控制器ros2 launch ros2_control_demo_example_1 rrbot.launch.py默认激活的是forward_position_controller我们需要切换为轨迹控制器ros2 control set_controller_state forward_position_controller inactive ros2 control load_controller joint_trajectory_position_controller --set-state active可用ros2 control list_controllers确认状态joint_state_broadcaster与joint_trajectory_position_controller为 activeforward_position_controller为 inactive。第 3 步运行 OpenRR 的 ros2_control 示例cargo run --package arci-ros2 --example ros2_control --features ros2这个示例会依次完成读取joint_namesrrbot 为[joint1, joint2]→ 查询当前关节位置 → 将两关节在 5 秒内移动到 1.0 弧度 → 再移动回 0.5 弧度每一步都打印实际位置供你核对。源码见arci-ros2/examples/ros2_control.rs。⚙️ 配置驱动插件式接入 openrr-appsOpenRR 的一大特色是一切客户端皆可配置。ROS 2 各客户端以插件形式导出arci-ros2/src/plugin.rs实现了JointTrajectoryClient、MoveBase、Navigation、Localization、LaserScan2D五类工厂你只需用 TOML 声明即可。以openrr-apps/config/turtlebot3_robot_client_config_ros2.toml为例move_base arci_ros2 navigation arci_ros2 [plugins.arci_ros2] path ../../target/debug/libarci_ros2 [[plugins.arci_ros2.instances]] name arci_ros2 type MoveBase args topic /cmd_vel [[plugins.arci_ros2.instances]] name arci_ros2 type Navigation args action_name /navigate_to_pose 改话题名、改动作名、换机器人都只需修改这份配置无需改代码、重新编译应用。⚠️ 实验性功能注意事项与常见问题为什么标注实验性源码中有多处 TODO 提示例如目标被取消canceled时暂未按错误处理、导航动作的 goal 状态尚未细化校验。生产环境使用前请自行评估。常见坑点清单❌忘记--features ros2默认构建不包含 r2rarci-ros2 为空实现编译通过但无功能。❌未 source ROS 环境每次开新终端都要source /opt/ros/humble/setup.bash否则找不到 ROS 库。❌导航前未设置初始位姿不点 RViz 的2D Pose Estimate目标会以未知位姿为基准导致行为异常。❌控制器未激活ros2_control 示例前必须确保joint_trajectory_position_controller处于 active 状态。❌编译报错找不到 clang补装libclang-dev即可。 延伸阅读ROS 2 客户端总览与接口文档arci-ros2/README.md导航客户端实现arci-ros2/src/navigation.rsros2_control 客户端实现arci-ros2/src/ros2_control.rs节点封装与 spin 线程arci-ros2/src/node.rs命令行工具与插件配置openrr-apps/config/turtlebot3_robot_client_config_ros2.toml从本指南可以看出OpenRR 让 Rust 机器人开发者第一次能够零 C地接入 ROS 2 生态——Navigation2 导航、ros2_control 轨迹控制、激光扫描、定位与 TF 查询全部统一在一套异步接口之下。虽然功能仍属实验性但其接口抽象 插件配置的设计已经展现出与 ROS 2 深度协作的潜力值得机器人 Rust 爱好者第一时间尝试。【免费下载链接】openrrOpen Rust Robotics项目地址: https://gitcode.com/gh_mirrors/op/openrr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表