gazebo仿真尝试

gazebo仿真尝试
YusialoneROS 2接口与配置迁移指南 (从仿真到实车)
本文档旨在作为将 gazebo_robot_sim_py 仿真项目移植到真实硬件平台的操作手册。核心思想是:用真实的传感器驱动替换Gazebo插件,并调整配置文件以匹配真实机器人的物理特性。
第一部分:SLAM (Cartographer) 接口与配置
在 slam_launch.py 启动的SLAM流程中,您的实车需要替换Gazebo提供的传感器数据,并可能需要调整Cartographer的配置。
1. 必需的输入话题 (Your Vehicle MUST Provide These)
| 接口 (话题) | 消息类型 | 发布者 (仿真中) | 订阅者 (仿真中) | 实车操作指南 |
|---|---|---|---|---|
/scan |
sensor_msgs/LaserScan |
Gazebo激光雷达插件 | cartographer_node |
【核心任务】 您的激光雷达驱动程序必须发布此话题。确保消息的 frame_id 与您机器人TF树中的激光雷达坐标系名称一致(例如 laser_link)。 |
/odom |
nav_msgs/Odometry |
Gazebo差分驱动插件 | cartographer_node |
【核心任务】 您的底层运动控制器或轮式里程计驱动程序必须发布此话题。这提供了机器人的速度和位姿初步估计。frame_id 应为 odom,child_frame_id 应为 base_link。 |
/tf |
tf2_msgs/TFMessage |
Gazebo差分驱动插件,robot_state_publisher, static_transform_publisher |
cartographer_node |
【核心任务】 您的机器人TF树必须完整且正确。具体包括: 1. odom -> base_link:通常由里程计发布者提供。 2. base_link -> laser_link:这是激光雷达相对于机器人中心的物理安装位置。 |
2. 关键的输出话题 (Cartographer Provides These for You)
| 接口 (话题) | 消息类型 | 发布者 (仿真中) | 订阅者 (仿真中) | 实车调试要点 |
|---|---|---|---|---|
/map |
nav_msgs/OccupancyGrid |
cartographer_occupancy_grid_node |
rviz2 |
这是最终生成的2D栅格地图。您可以在RViz中订阅此话题来查看建图效果。 |
/tf |
tf2_msgs/TFMessage |
cartographer_node |
rviz2 等 |
Cartographer会发布**map -> odom** 的TF变换。这是SLAM的核心输出,它修正了里程计的累积误差,将机器人定位在全局地图中。 |
3. 需要重点关注的配置文件
urdf/robot.urdf:- 物理尺寸: 修改
base_link,left_wheel,right_wheel等连杆的<visual>和<collision>标签中的尺寸,以匹配您的真实机器人。 - 惯性参数: 粗略估计或测量各部件的
<inertial>参数(质量和惯性张量)。 - 移除Gazebo插件: 【关键】 删除或注释掉所有
<gazebo>标签。这包括差分驱动插件和激光雷达传感器插件。
- 物理尺寸: 修改
config/cartographer_config.lua:tracking_frame: 确保这是您机器人URDF中的基座坐标系名称,通常是base_link。odom_frame: 确保这是您的里程计发布的坐标系名称,通常是odom。num_laser_scans: 如果您有多个激光雷达,需要修改此值。- 性能调优:
min_range,max_range,voxel_filter_size等参数可能需要根据您的激光雷达型号和环境进行调优。
launch/slam_launch.py:static_tf_base_to_laser: 【关键】 修改此Node的arguments,以反映激光雷达在您真实车辆上的精确安装位置。- 移除Gazebo: 您可以删除
gazebo和spawn_entity节点。 teleop_twist_keyboard: 您可以使用任何方式发布/cmd_vel指令来控制机器人。
第二部分:Navigation (Nav2) 接口与配置
在 navigation_launch.py 启动的导航流程中,除了SLAM部分已提到的接口外,还需要关注Nav2自身的配置。
1. 必需的输入接口 (Your System MUST Provide These)
除了SLAM部分的 /scan, /odom, /tf 之外,Nav2还需要:
| 接口 (话题/服务/动作) | 类型 | 发布者/客户端 (仿真中) | 订阅者/服务器 (仿真中) | 实车操作指南 |
|---|---|---|---|---|
/initialpose |
PoseWithCovarianceStamped |
initial_pose_publisher 或 RViz |
amcl |
【关键】 在开始导航前,必须为AMCL提供一个初始位姿估计。 |
/goal_pose |
PoseStamped |
RViz或您自己的应用 | nav2_bt_navigator |
【关键】 这是导航的目标点。 |
/cmd_vel |
Twist |
(Nav2提供) nav2_controller |
您的机器人底层驱动 | 【核心任务】 您需要编写一个底层驱动节点,该节点订阅 /cmd_vel 话题,并将收到的速度指令转换为对您机器人电机/舵机的实际控制信号。 |
2. 关键的输出接口 (Nav2 Provides These for You)
| 接口 (话题/服务/动作) | 类型 | 发布者/服务器 | 实车调试要点 |
|---|---|---|---|
/plan |
Path |
nav2_planner |
显示全局规划路径。 |
/local_plan |
Path |
nav2_controller (DWB) |
显示本地规划路径。 |
/amcl_pose |
PoseWithCovarianceStamped |
amcl |
AMCL发布的机器人当前位姿和不确定性。 |
/global_costmap/costmap |
OccupancyGrid |
nav2_costmap_2d |
全局代价地图。 |
/local_costmap/costmap |
OccupancyGrid |
nav2_costmap_2d |
本地代价地图。 |
3. 需要重点关注的配置文件
urdf/robot.urdf:- 同SLAM部分,但这里的重点是确保物理尺寸和碰撞模型准确,因为Nav2严重依赖这些信息来避免碰撞。
config/nav2_params.yaml:amcl: 确保base_frame_id,odom_frame_id,global_frame_id与您的TF树一致。controller_server(DWB):max_vel_x,max_vel_theta,acc_lim_x,acc_lim_theta: 【关键】 这些参数必须根据您真实机器人的最大速度和加速度能力进行修改。
local_costmap&global_costmap:robot_radius或footprint: 【关键】 如果您的机器人是圆形的,请设置准确的robot_radius。如果不是,请使用footprint参数定义其精确的多边形轮廓。inflation_radius: 膨胀半径,需要根据机器人尺寸和期望的行驶行为进行调整。scan(inobservation_sources): 确保话题名称、传感器量程等与您的真实激光雷达匹配。
planner_server(NavFn):tolerance: 到达目标的容忍距离,可以根据精度要求调整。
launch/navigation_launch.py:- 移除Gazebo: 同SLAM部分,移除
gazebo和spawn_entity节点。 mapargument: 确保您在启动时传入的地图文件是您通过SLAM构建并保存的真实环境地图。initial_pose_publisher: 修改此节点的参数以匹配您希望机器人在地图上的默认启动位置。
- 移除Gazebo: 同SLAM部分,移除
迁移工作流总结
- 硬件驱动: 编写或配置您的激光雷达驱动和电机控制器,使其分别发布
/scan话题和订阅/cmd_vel话题,并发布/odom和odom->base_link的TF。 - URDF修改: 更新
robot.urdf以反映真实机器人的尺寸、碰撞模型和关节。移除所有Gazebo插件。 - TF树验证: 测量并更新launch文件中的
static_tf_base_to_laser。运行tf2_echo来验证树是否正确连接。 - SLAM测试: 运行修改后的
slam_launch.py。遥控机器人在环境中移动,观察RViz中的建图效果。根据效果调整配置。建图完成后使用map_saver_cli保存地图。 - 导航配置: 将保存的地图文件放入
maps文件夹。仔细修改nav2_params.yaml中的机器人物理参数(速度、加速度、尺寸)。 - 导航测试: 运行修改后的
navigation_launch.py。在RViz中设置初始位姿,观察AMCL粒子是否收敛。在RViz中设置导航目标,观察机器人是否能够安全、平稳地到达。根据导航行为反复调试参数。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果










