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
节点。 map
argument: 确保您在启动时传入的地图文件是您通过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中设置导航目标,观察机器人是否能够安全、平稳地到达。根据导航行为反复调试参数。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果