smrutisouravsahoo006/differential_robot

GitHub: smrutisouravsahoo006/differential_robot

基于 ROS2 Jazzy 和 Gazebo Harmonic 的差速驱动机器人仿真项目,提供完整的控制器配置、传感器仿真和键盘遥控功能。

Stars: 1 | Forks: 0

# differential_robot # ros2_diff_drive_robot 适用于 **ROS2 Jazzy + Gazebo Harmonic** 的差速驱动机器人仿真, 使用了 `gz_ros2_control`、`diff_drive_controller`、lidar 和摄像头。 ## 之前存在的问题(及修复方法) 1. **`config/ros2_controllers.yaml`** 包含 `use_stamped_vel: false`,这是一个 在 Jazzy 版本的 `diff_drive_controller` 中已不存在的参数。 在 Jazzy 中,控制器**始终**订阅 `/diff_drive_controller/cmd_vel`,类型为 `geometry_msgs/msg/TwistStamped` (不是 `Twist`,也不是旧的 `.../cmd_vel_unstamped` 名称)。设置 无法识别的参数会静默失效,这就是为什么普通的 `teleop_twist_keyboard` / 手动发布 `Twist` 无法移动 机器人的原因。 2. **`config/gazebo_bridge.yaml`** 通过 `ros_gz_bridge` 桥接了 `/joint_states`、 `/diff_drive_controller/odom`、`/diff_drive_controller/cmd_vel_unstamped` 和 `/tf`。这些都不是 Gazebo 传输(Gazebo-transport)的话题——它们是由 `gz_ros2_control` 插件内置的 controller_manager 节点直接发布的原生 ROS2 话题。桥接 `/tf` 特别会创建第二个冲突的 TF 发布者。 Gazebo 端的 `/joint_states` 桥接也指向了 `/world/empty_world/...`,而实际的世界名为 `office_world`(参见 `worlds/office_world.sdf`),因此它静默地 解析为空。 3. **`launch/teleop.launch.py`**(新增)启动 `teleop_twist_keyboard` 时使用了 `stamped:=true`,并将其输出直接重映射到 `/diff_drive_controller/cmd_vel` —— 这才是 teleop 的真正修复方法。 4. **`package.xml`** 缺少 `teleop_twist_keyboard` 依赖项。 ## 构建 ``` cd ~/project1_ros2_ws colcon build --symlink-install source install/setup.bash ``` ## 运行仿真 ``` ros2 launch ros2_diff_drive_robot gazebo.launch.py ``` 这将启动 Gazebo Harmonic,生成机器人,桥接传感器,并在 6 秒后通过 `control.launch.py` 自动加载并**激活** `joint_state_broadcaster` 和 `diff_drive_controller`。如果使用 此 launch 文件,你**不**需要手动运行 `ros2 control load_controller`;这已经处理好了。 检查控制器是否已成功启动并激活: ``` ros2 control list_controllers # joint_state_broadcaster[joint_state_broadcaster/JointStateBroadcaster] 活跃 # diff_drive_controller[diff_drive_controller/DiffDriveController] 活跃 ``` 如果你确实需要手动加载/激活(例如控制器已被 卸载),在 Jazzy 上有效的语法是: ``` ros2 control load_controller --set-state active joint_state_broadcaster ros2 control load_controller --set-state active diff_drive_controller ``` ## 使用键盘驱动 ``` ros2 run teleop_twist_keyboard teleop_twist_keyboard \ --ros-args -p stamped:=true -r cmd_vel:=/diff_drive_controller/cmd_vel ``` (或 `ros2 launch ros2_diff_drive_robot teleop.launch.py`) 你原先的命令 — `--ros-args -r cmd_vel:=/cmd_vel` — 将 `/cmd_vel` 重映射到了它自身(无实际效果),并且仍然发布未加盖时间戳(unstamped)的 `Twist`,而控制器 已不再监听该类型。 ## 仅 URDF 预览(无 Gazebo) ``` ros2 launch ros2_diff_drive_robot display.launch.py ```
标签:Gazebo仿真, ROS2, SOC Prime, 差速驱动, 开发工具, 控制系统, 机器人, 逆向工具