ROS---进行建图或者move_base路径规划时出现打滑现象(雷达匹配不上地图)的解决方法 附gmapping建图配置参数

ROS—进行建图或者move_base路径规划时出现打滑现象(雷达匹配不上地图)的解决方法—本人多次实验的出的结论

之前我的车会经常出现打滑现象,图也建不了,就算勉强建好了图,在进行路径规划的时候也是匹配不上,然后不停的进行行为恢复,很是苦恼。但后来我用我学长的车的时候发现他的匹配程度可以说是99%,基本不动,这就给建图和导航提供了很大的帮助,后来在抠他源码和不断实验之后发现他在运行算法之前通过调节线速度和角速度,使线速度和角速度达到标准,然后再运行算法精度非常高,这会我去测试自己线速度和imu精度的时候发现根本就是一坨屎,误差达到60%,这才缓过来,各种pid调,然后就是各种imu滤波,才达到了90%以上的精度,随后雷达的匹配程度也同样上来了,现在建图和导航基本无压力。很开心,在这里我也简单分析一下原因吧:

经过测试得知,打滑现象的产生都是因为里程计数据和陀螺仪数据的误差所造成的。
里程计的误差是因为cmd_vel数据或者键盘操作给出时如果机器人的线速度达不到给定的线速度就会产生里程计误差。
比如给liner线速度为0.3m/s,但实际却跑了0.1m,那么这0.1m/s的线速度通过你底盘算出来之后就会往ROS发,
但实际地图更新是根据你下发给32的线速度为准,而雷达坐标系和底盘坐标系却是和上层给的线速度为准,
所以在地图上一秒会更新0.3m,而车上雷达却只走了0.1m,
所以上下就产生了0.2m的误差在图上,所以就会出现坐标往前走了0.3m,而图却只走了0.1m,但雷达会尽力去匹配,
但误差太过大的话就匹配不回来。
解决方法就是pid调好,在32模拟给定线速度为0.3,然后要走到0.3误差才最小,而且要走直线。

角速度的话就是imu的问题,只要角度正确,发送角速度下去可以转指定角度就好。

再分享一份我自己的gmapping建图配置参数:

<launch>
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
      <param name="base_frame" value="base_link"/> <!--机器人底盘坐标系基框架,附带在移动底盘的框架,原点-->
      <param name="odom_frame" value="odom"/> <!--里程计坐标系里程计框架,附带在里程计的框架-->
      <param name="map_frame" value="map"/> <!--地图坐标系地图框架,附带在地图上的框架-->
      <param name="map_update_interval" value="0.01"/><!--地图更新速度,秒0.01-->
      <param name="maxUrange" value="10.0"/><!--jiguang zuida keyongjuli,  danwei:mi ,dayu jiu buyong-->
      <param name="maxRange" value="12.0"/><!--zuida juli-->	
      <param name="sigma" value="0.05"/>
      <param name="kernelSize" value="3"/><!--moren:1-->
      <param name="lstep" value="0.05"/>
      <param name="astep" value="0.05"/>
      <param name="iterations" value="5"/>
      <param name="lsigma" value="0.075"/>
      <param name="ogain" value="3.0"/>
      <param name="lskip" value="0"/>
      <param name="srr" value="0.1"/>
      <param name="srt" value="0.2"/>
      <param name="str" value="0.1"/>
      <param name="stt" value="0.2"/>
      <param name="minimumScore" value="0"/>
      <param name="linearUpdate" value="0.05"/><!--线速度角速度在地图的更新-->
      <param name="angularUpdate" value="0.0436"/>
      <param name="temporalUpdate" value="-1"/><!--moren:-1-->
      <param name="resampleThreshold" value="0.5"/>
      <param name="particles" value="8"/><!--moren:30 gaicheng:8-->
      <param name="xmin" value="-50.0"/>
      <param name="ymin" value="-50.0"/>
      <param name="xmax" value="50.0"/>
      <param name="ymax" value="50.0"/>
      <param name="delta" value="0.05"/>
      <param name="llsamplerange" value="0.01"/> 
      <param name="llsamplestep" value="0.01"/>
      <param name="lasamplerange" value="0.005"/>
      <param name="lasamplestep" value="0.005"/>
      <!--param name="transform_publish_period" value="0.01"/-->

    </node>
</launch>

希望可以帮到跟我遇到同样问题的同学。

<think>好的,用户想了解ROS中进行激光雷达的教程或相关信息。首先,我需要回忆之前提供的引用内容,看看有哪些相关资源。引用1和2提到了ROS与激光雷达的入门教程,可能包含基础知识和设备集成。引用3和5讨论了具体的算法,比如hector_slam和karto_slam,这些是实际应用中的关键步骤。引用4则提到了保存地方法,这也是流程的一部分。 用户可能需要一个完整的流程,从环境配置实现。我应该分步骤说明,确保结构清晰。首先介绍常用的SLAM算法,如hector_slam和gmapping,因为引用3和5提到这些。然后提供具体的操作步骤,比如安装驱动包、修改frame_id(引用3中的问题)、启动节点,最后保存地(引用4的方法)。 还需要注意用户可能遇到的问题,比如frame_id一致,这在引用3中提到过,需要指导如何修改代码。此外,地保存命令也需要详细说明。最后,生成相关问题可以帮助用户深入学习和解决问题,比如性能优化、参数调整等。确保所有命令和步骤正确无误,符合ROS的常见实践。</think>以下是ROS进行激光雷达的完整实现流程和技术要点,结合主流的SLAM算法和实际项目经验整理: ### 一、核心步骤 1. **硬件准备** - 连接激光雷达设备(如RPLIDAR A1/A2、RoboSense等) - 确认设备供电正常且通讯接口可用(通常通过USB或以太网) 2. **环境配置** ```bash # 安装激光雷达驱动(以Robosense为例) cd ~/catkin_ws/src git clone https://github.com/RoboSense-LiDAR/ros_rslidar rosdep install --from-paths . --ignore-src -y catkin_make ``` 3. **坐标系统一** 需确保激光雷达的$frame\_id$与算法订阅的$frame\_id$一致[^3],修改示例: ```cpp // 修改rsdriver.cpp中的发布参数 param_.frame_id = "laser"; // 原为"rslidar" ``` 4. **启动算法** ```bash # hector_slam启动示例 roslaunch hector_slam_launch tutorial.launch # gmapping启动示例 roslaunch gmapping slam_gmapping_pr2.launch ``` ### 二、主流SLAM算法对比 算法类型 | 特点 | 适用场景 | 数学原理 ---|---|---|--- **hector_slam** | 无需里程计,依赖高精度雷达 | 静态环境 | 高斯牛顿法优化扫描匹配 **gmapping** | 需要里程计,支持动态环境 | 移动机器人 | Rao-Blackwellized粒子滤波 **cartographer** | 多传感器融合,支持3D | 复杂大场景 | 优化框架+子地管理 ### 三、关键参数优化 ```yaml # gmapping参数示例(slam_gmapping.launch) <param name="delta" value="0.05"/> # 地分辨率 <param name="maxUrange" value="5.0"/> # 最大有效测距 <param name="particles" value="80"/> # 粒子数量 ``` ### 四、地保存与复用 ```bash # 保存地文件(生成.pgm和.yaml) rosrun map_server map_saver -f ~/catkin_ws/map/test_map ``` 保存后的地可通过map_server包加载用于导航: ```xml <node name="map_server" pkg="map_server" type="map_server" args="$(find your_pkg)/map/test_map.yaml"/> ``` ### 五、常见问题解决 1. **TF树异常**:检查各节点坐标系转换关系 ```bash rosrun tf view_frames ``` 2. **点云缺失**:确认雷达驱动是否正确加载 3. **漂移**:调整粒子滤波参数或改用闭环检测算法
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值