基于ROS2的差速驱动机器人仿真与控制系统,支持Gazebo物理仿真、键盘遥控及基于势场法(APF)的自动避障导航。
- 操作系统: Ubuntu 22.04 LTS (推荐)
- ROS2版本: Humble Hawksbill
- 依赖:
- ros-humble-desktop
- ros-humble-ros2-control
- ros-humble-ros2-controllers
- ros-humble-gazebo-ros-pkgs
- ros-humble-gazebo-ros2-control
- ros-humble-xacro
source scripts/env_setup.sh./scripts/build_all.shros2 launch diff_robot_control gazebo.launch.pyros2 run diff_robot_teleop teleop_twist_keyboardros2 launch diff_robot_navigation navigation.launch.py# 安装ROS2 Humble (如未安装)
sudo apt install ros-humble-desktop
# 安装额外依赖
sudo apt install \
ros-humble-ros2-control \
ros-humble-ros2-controllers \
ros-humble-gazebo-ros-pkgs \
ros-humble-gazebo-ros2-control \
ros-humble-xacro \
ros-humble-joint-state-publisher-gui# 进入工作空间
cd diff_robot
# 安装依赖
rosdep install --from-paths src --ignore-src -r -y
# 编译
colcon build --symlink-install
# 加载环境
source install/setup.bashros2 launch diff_robot_control gazebo.launch.pyros2 run diff_robot_teleop teleop_twist_keyboardros2 launch diff_robot_description view_robot.launch.pyros2 launch diff_robot_navigation navigation.launch.py# 构建并启动
docker compose -f docker/docker-compose.yaml build
docker compose -f docker/docker-compose.yaml up -d
docker compose -f docker/docker-compose.yaml exec diff-robot bash
# 容器内运行
ros2 launch diff_robot_control gazebo.launch.py| 话题名称 | 类型 | 说明 |
|---|---|---|
/diff_drive_controller/cmd_vel_unstamped |
geometry_msgs/Twist | 速度控制指令(差速驱动控制器) |
/odom |
nav_msgs/Odometry | 里程计数据 |
/joint_states |
sensor_msgs/JointState | 关节状态 |
/scan |
sensor_msgs/LaserScan | 激光雷达扫描数据(避障输入) |
| 按键 | 功能 |
|---|---|
w |
前进 |
x |
后退 |
a |
左转 |
d |
右转 |
s |
停止 |
q/z |
增加/减少线速度 (10%) |
e/c |
增加/减少角速度 (10%) |
遥控节点可配置参数(通过 --ros-args -p 或 YAML 配置):
| 参数 | 默认值 | 说明 |
|---|---|---|
linear_speed |
0.5 | 初始线速度 (m/s) |
angular_speed |
1.0 | 初始角速度 (rad/s) |
max_linear_speed |
2.0 | 最大线速度 (m/s) |
max_angular_speed |
4.0 | 最大角速度 (rad/s) |
cmd_vel_topic |
/diff_drive_controller/cmd_vel_unstamped |
发布的速度话题 |
避障节点使用人工势场法(APF),参数可通过 obstacle_avoidance.yaml 配置:
| 参数 | 默认值 | 说明 |
|---|---|---|
linear_speed |
0.3 | 最大线速度 (m/s) |
angular_speed |
0.8 | 最大角速度 (rad/s) |
safety_distance |
0.3 | 安全距离(小于此距离紧急停止)(m) |
influence_distance |
1.5 | 障碍物影响距离 (m) |
attractive_gain |
1.0 | 吸引力增益 |
repulsive_gain |
100.0 | 排斥力增益 |
angular_gain |
2.0 | 角度到角速度的增益 |
# 发布前进指令
ros2 topic pub /diff_drive_controller/cmd_vel_unstamped geometry_msgs/Twist "{linear: {x: 0.5}, angular: {z: 0.0}}"机器人描述文件包,包含:
- URDF/xacro 机器人模型(底盘、差速轮、万向轮、2D激光雷达)
- RViz 配置文件
仿真与控制包,包含:
- Gazebo Classic 仿真启动文件
- ros2_control 控制器配置
- 差速驱动控制器(DiffDriveController)+ 关节状态广播器
遥控节点包,包含:
- 键盘遥控节点(支持速度动态调节)
- 可配置的速度上下限与话题名称
导航与避障功能包,包含:
- 基于人工势场法(APF)的自动避障节点
- 激光雷达数据实时处理(URDF 内置 360 度 2D LiDAR)
- 激光雷达数据看门狗(无数据时自动停车并报警)
- 可配置的安全距离、影响力范围及增益参数
Apache License 2.0