Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

差速驱动机器人项目 (Diff Robot)

基于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

快速开始

1. 环境配置

source scripts/env_setup.sh

2. 一键编译

./scripts/build_all.sh

3. 启动仿真

ros2 launch diff_robot_control gazebo.launch.py

4. 键盘遥控

ros2 run diff_robot_teleop teleop_twist_keyboard

5. 自动避障导航

ros2 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.bash

启动

1. 启动Gazebo仿真

ros2 launch diff_robot_control gazebo.launch.py

2. 启动键盘遥控

ros2 run diff_robot_teleop teleop_twist_keyboard

3. 查看机器人模型

ros2 launch diff_robot_description view_robot.launch.py

4. 启动自动避障

ros2 launch diff_robot_navigation navigation.launch.py

5. Docker 运行

# 构建并启动
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}}"

功能包说明

diff_robot_description

机器人描述文件包,包含:

  • URDF/xacro 机器人模型(底盘、差速轮、万向轮、2D激光雷达)
  • RViz 配置文件

diff_robot_control

仿真与控制包,包含:

  • Gazebo Classic 仿真启动文件
  • ros2_control 控制器配置
  • 差速驱动控制器(DiffDriveController)+ 关节状态广播器

diff_robot_teleop

遥控节点包,包含:

  • 键盘遥控节点(支持速度动态调节)
  • 可配置的速度上下限与话题名称

diff_robot_navigation

导航与避障功能包,包含:

  • 基于人工势场法(APF)的自动避障节点
  • 激光雷达数据实时处理(URDF 内置 360 度 2D LiDAR)
  • 激光雷达数据看门狗(无数据时自动停车并报警)
  • 可配置的安全距离、影响力范围及增益参数

diff_robot_mode_manager

模式管理器功能包,是夹在多个速度源与差速控制器之间的集中式 cmd_vel 仲裁层,包含:

  • 多模式仲裁:任意时刻仅当前模式的速度指令被转发到控制器,其余丢弃
  • 模式切换:通过 /mode/set 服务在 MANUAL / AUTO / IDLE 间显式切换
  • 紧急停止:/mode/emergency 触发急停终态,立即发零速;急停期间拒绝一切模式切换,须显式释放才回 IDLE
  • 输入看门狗:当前模式对应源静默超过 input_timeout(默认 0.3s)即切回 IDLE 并发零,作为控制器 2s 超时之上的快速层
  • 单线程执行:消除急停切换路径的并发竞态
  • 配置驱动:YAML 定义模式、话题、看门狗超时

模式列表

模式 输入话题 说明
EMERGENCY_STOP - 紧急停止终态,仅经 /mode/emergency 进入/释放
MANUAL /cmd_vel_teleop 手动遥控模式
AUTO /cmd_vel_avoidance 自动避障模式
IDLE - 空闲停止(默认起始模式、看门狗超时回退目标)

服务接口

服务 类型 说明
/mode/set diff_robot_mode_manager/srv/SetMode 切换模式(target_mode: MANUAL/AUTO/IDLE,不可为 EMERGENCY_STOP)
/mode/emergency std_srvs/SetBool 急停(data=true 激活、data=false 释放)

话题接口

话题 类型 说明
/cmd_vel_teleop geometry_msgs/Twist 遥控输入
/cmd_vel_avoidance geometry_msgs/Twist 避障输入
/mode/status std_msgs/String 模式状态(JSON:current_mode/available_modes/active_modes
/diff_drive_controller/cmd_vel_unstamped geometry_msgs/Twist 最终输出

配置

mode_manager.yaml 关键项:

参数 默认值 说明
input_timeout 0.3 当前模式输入源静默超时(秒),超时切 IDLE
status.rate 10 状态发布频率(Hz)

启动模式管理器

ros2 launch diff_robot_mode_manager mode_manager.launch.py

许可证

Apache License 2.0

About

基于ROS2的差速驱动机器人仿真与控制系统

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages