欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 基于ROS2/Gazebo的室内送餐机器人系统开发实战教程

基于ROS2/Gazebo的室内送餐机器人系统开发实战教程

2025/5/24 16:23:27 来源:https://blog.csdn.net/m0_72958694/article/details/148100747  浏览:    关键词:基于ROS2/Gazebo的室内送餐机器人系统开发实战教程

1. 系统架构设计

1.1 功能需求分析

用户下单
语音交互模块
订单处理
路径规划
运动控制
避障检测
目标送达
状态反馈

1.2 技术栈选型

组件技术选型
机器人框架ROS2 Humble
仿真环境Gazebo 11
导航系统Nav2(Navigation2)
建图算法SLAM Toolbox
语音交互SpeechRecognition + PyAudio
建模工具URDF + SolidWorks插件

2. 开发环境搭建

2.1 系统依赖安装

# Ubuntu 22.04环境准备
sudo apt install -y \ros-humble-desktop \ros-humble-gazebo-* \ros-humble-navigation2 \ros-humble-nav2-bringup \python3-pyaudio

2.2 工作空间初始化

mkdir -p ~/delivery_robot_ws/src
cd ~/delivery_robot_ws/
rosdep install -i --from-path src --rosdistro humble -y
colcon build --symlink-install

3. 机器人URDF建模

3.1 基础结构定义(base.urdf.xacro)

<?xml version="1.0"?>
<robot name="delivery_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"><!-- 底座链接 --><link name="base_link"><visual><geometry><cylinder radius="0.25" length="0.15"/></geometry><material name="blue"><color rgba="0 0 1 1"/></material></visual></link><!-- 驱动轮宏 --><xacro:macro name="wheel" params="prefix reflect"><link name="${prefix}_wheel_link"><visual><geometry><cylinder radius="0.05" length="0.03"/></geometry></visual></link><joint name="${prefix}_wheel_joint" type="continuous"><origin xyz="0 ${reflect*0.15} -0.05" rpy="1.5708 0 0"/><parent link="base_link"/><child link="${prefix}_wheel_link"/><axis xyz="0 0 1"/></joint></xacro:macro><!-- 实例化左右轮 --><xacro:wheel prefix="left" reflect="1"/><xacro:wheel prefix="right" reflect="-1"/>
</robot>

3.2 传感器集成

<!-- 激光雷达 -->
<link name="lidar_link"><visual><geometry><cylinder radius="0.05" length="0.1"/></geometry></visual>
</link><joint name="lidar_joint" type="fixed"><origin xyz="0 0 0.2" rpy="0 0 0"/><parent link="base_link"/><child link="lidar_link"/>
</joint><!-- 深度相机 -->
<gazebo reference="camera_link"><sensor type="depth" name="camera"><update_rate>30</update_rate><camera><horizontal_fov>1.047</horizontal_fov><image><width>640</width><height>480</height></image></camera></sensor>
</gazebo>

4. SLAM建图与定位

4.1 SLAM Toolbox配置

# slam_params.yaml
slam_toolbox:ros__parameters:base_frame: "base_link"odom_frame: "odom"map_frame: "map"mode: "mapping"  # 或 "localization"# 激光雷达配置scan_topic: "/scan"# 地图参数map_resolution: 0.05map_size: 204.8

4.2 建图流程

# 启动Gazebo仿真
ros2 launch delivery_robot_gazebo simulation.launch.py# 启动SLAM节点
ros2 launch delivery_robot_slam slam.launch.py# 启动键盘控制
ros2 run teleop_twist_keyboard teleop_twist_keyboard# 保存地图
ros2 run nav2_map_server map_saver_cli -f ~/maps/office_map

5. Nav2导航系统配置

5.1 导航参数配置

# nav2_params.yaml
nav2_costmap_2d:global_costmap:global_frame: "map"robot_base_frame: "base_link"resolution: 0.05plugins:- {name: static_layer,    type: "nav2_costmap_2d::StaticLayer"}- {name: obstacle_layer,  type: "nav2_costmap_2d::ObstacleLayer"}- {name: inflation_layer, type: "nav2_costmap_2d::InflationLayer"}local_costmap:global_frame: "odom"rolling_window: true

5.2 路径规划算法

# 导航目标发布节点
import rclpy
from geometry_msgs.msg import PoseStampedclass NavGoalPublisher(rclpy.node.Node):def __init__(self):super().__init__('nav_goal_publisher')self.publisher_ = self.create_publisher(PoseStamped, '/goal_pose', 10)timer_period = 5.0  # 5秒发送一次新目标self.timer = self.create_timer(timer_period, self.timer_callback)self.count = 0def timer_callback(self):msg = PoseStamped()msg.header.stamp = self.get_clock().now().to_msg()msg.header.frame_id = 'map'# 示例目标点(需根据实际地图坐标调整)msg.pose.position.x = 2.0msg.pose.position.y = 1.0self.publisher_.publish(msg)self.get_logger().info(f'Publishing: {msg}')

6. 语音交互模块集成

6.1 语音识别实现

# voice_control.py
import speech_recognition as sr
import rclpy
from std_msgs.msg import Stringclass VoiceController(rclpy.node.Node):def __init__(self):super().__init__('voice_controller')self.publisher_ = self.create_publisher(String, '/voice_command', 10)self.recognizer = sr.Recognizer()self.mic = sr.Microphone()def listen(self):with self.mic as source:self.recognizer.adjust_for_ambient_noise(source)audio = self.recognizer.listen(source)try:command = self.recognizer.recognize_google(audio).lower()self.publisher_.publish(String(data=command))return commandexcept sr.UnknownValueError:return ""except sr.RequestError as e:self.get_logger().error(f'Recognition error: {e}')return ""

6.2 命令解析逻辑

# 命令处理回调
def command_callback(self, msg):cmd = msg.dataif '送餐' in cmd:# 解析目标位置target = self.parse_target(cmd)self.send_navigation_goal(target)elif '停止' in cmd:self.cancel_navigation()def parse_target(self, cmd):# 简单位置解析(实际项目需NLP处理)locations = {'前台': (2.0, 1.0),'会议室': (5.0, -3.0),'休息区': (-1.0, 4.0)}for loc, coord in locations.items():if loc in cmd:return coordreturn None

7. 系统集成与测试

7.1 完整启动流程

# 终端1:启动仿真环境
ros2 launch delivery_robot_gazebo full_system.launch.py# 终端2:启动导航系统
ros2 launch delivery_robot_nav2 nav2.launch.py# 终端3:启动语音控制
ros2 run delivery_robot_voice voice_control_node# 终端4:启动RViz可视化
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix delivery_robot_bringup)/share/delivery_robot_bringup/rviz/nav2.rviz

7.2 测试用例设计

测试场景预期结果验证方法
空旷环境导航规划平滑路径,准时到达RViz路径显示 + 到达提示
动态障碍物避让实时调整路径,保持安全距离Gazebo添加移动障碍物
语音指令识别正确解析位置指令并执行导航口语化指令测试(带噪音环境)
低电量预警自主返回充电桩模拟电量下降阈值

8. 完整代码库说明

8.1 代码结构

delivery_robot_ws/
├── src/
│   ├── delivery_robot_description/  # URDF模型
│   ├── delivery_robot_gazebo/       # 仿真环境
│   ├── delivery_robot_slam/         # SLAM配置
│   ├── delivery_robot_nav2/         # 导航系统
│   ├── delivery_robot_voice/        # 语音交互
│   └── delivery_robot_bringup/     # 系统集成

8.2 关键文件说明

  1. urdf/delivery_robot.urdf.xacro:机器人模型描述文件;
  2. config/nav2_params.yaml:导航参数配置;
  3. scripts/voice_control.py:语音交互主程序;
  4. launch/full_system.launch.py:完整系统启动文件。

8.3 运行要求

  • 硬件:建议配置i5-8代CPU + 16GB内存 + 独立显卡;
  • 软件:Ubuntu 22.04 + ROS2 Humble完全安装;
  • 依赖:需安装Gazebo经典模型库(sudo apt install ros-humble-gazebo-ros-pkgs)。

9. 扩展功能实现建议

  1. 多机器人协同:通过ROS2的DDS实现机器人间通信;
  2. 电梯交互:添加数字IO接口控制电梯按钮;
  3. 任务调度系统:基于RCL动作接口实现任务队列管理;
  4. 云端监控:集成WebSocket实现远程状态查看。

注:实际部署时需根据具体场景调整传感器参数和导航配置,建议使用物理机器人前在仿真环境中完成90%以上的功能验证。可通过修改URDF中的传感器插件参数适配不同硬件平台。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词