ros中kobuki(turtlebot)+rplidar 跑gmapping

本文介绍如何使用rplidar雷达与gmapping包进行SLAM集成,包括框架搭建、tf树维护、解决常见问题及配置参数等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://rosclub.cn/post-531.html

发布时间:2016年11月23日 13:32:20    浏览数:828次   来自:kint_zhao

由于手头目前没有kobuki了,就以自己的sdp来说明吧。

旧篇:http://blog.youkuaiyun.com/zyh821351004/article/details/44103757#reply 时间有点老,当时知识描述只能这个程度,也就不改动那篇了,重新写一篇。

由于手头目前没有kobuki了,就以自己的sdp来说明吧。

1. 框架搭建说明:

设备: 底盘 : 采集码盘数据 与执行控制指令来运动 : 你要提供 /odom 与 /cmd_vel 这样的数据接口

rplidar: 采集激光测距数据 你要提供 /scan 数据接口

利用现有package搭建工程你首先需要维护好两个东西: TF tree 和 topic 数据.


2. 搭建其实很简单:

  维护好你的tf tree. 因为每个topic数据都是相对一个frame ID 的,而数据之间的关联就需要 tf树的变换关系确定。 如果你启动移动机器人时使用的不是模型(URDF文件中已经描述关系)自带的传感器,

  例如 turtlebot 中就没有rplidar 雷达, 你就需要指定雷达的frame id (/laser) 相对基座tf树中的变换关系。

  也就是你要建立一个静态的tf变换发布出去。当然你也可以像旧篇一样修改turtlebot的urdf模型文件等等(这也就是为什么kinect模拟2D laser时为什么不需要添加static_transform_publisher的原因)。
// 其中的参数请自行查看wiki了解详细具体的说明

  topic数据接口的问题,你需要依据gmapping的实际需要, 刚好他需要的就是/odom /scan 。与原package的node输出相一致。如果不一致,你就需要采取remap的形式修改对应接口(不建议直接在源码里修改)

  topic的 映射类似于: ;相当于源码中的”scan“ 变成了$(arg scan_topic) 你之前的定义。

  TF与topic相一致了,算法基本能跑起来。但是跑起来的实际效果你得留意3中注意要点和自己对参数的理解和不断尝试。

3. 利用rplidar搭建gmapping 你需要注意点:

3.1 laser 在base 上面的安装你注意了吗:

  A2参考: http://blog.youkuaiyun.com/zyh821351004/article/details/51169334

  A1常见 rplidar_ros 里面的图

3.2 端口权限问题:

  rplidar_ros 里面有相应的script文件,你可以了解udev相关说明作相应配置。

  多USB窜扰(ttyUSB0会依据你接入先后执行分配),其实你可以依据端口号绑定重映射.

       参见: http://blog.youkuaiyun.com/zyh821351004/article/details/50596171

3.3 雷达启动不转,health state 异常:

  多半是你这usb供电问题,用主机后背USB口试试。

3.4 很多问题可以关注gitbub中issue , 里面的wiki也是有相应的一些说明的。

  issue: https://github.com/robopeak/rplidar_ros/issues?q=is%3Aopen+is%3Aissue (可以留意closed中问题)

  wiki: https://github.com/robopeak/rplidar_ros/wiki

3.5 gmapping中记得修改激光数据有效的最大值配置

<param name="maxUrange" value="6.0"/>

3.6 理解每个参数的意义

3.7 跑navigation时。如果local_costmap值全零,

  参看下 costmap_common_params.yaml 文件

  依据你前面tf设置修改相应的高度值。

min_obstacle_height: 0.0 #0.25
max_obstacle_height: 2.0 #0.35

3.8 出错性问题请求别人帮忙注意事项

  一定要将你的这些信息暴露给技术支持:

  1)你运行相关的所有launch文件(除非你都理解,个别无关不附上)

  2)你的TF tree : rosrun tf view_frames

  3) 你的topic 信息: rqt_graph ; rostopic list

  4) package你是否保证原封不动,无法确认记得查看你的git log ,附上对应package的commit ID

  3.9 你怀疑ubuntu下不正常,请自行到windows下去测试官方的。

4. 贴上我的launch文件(移动底盘请结合你自己的自行改动):

  仅作参考比对。

启动移动底盘

<launch>  
    <!-- set the parameters for the maximal and minimal velocity of the motor-->  
    <param name="max_vel_motor" value=".16"/>  
    <param name="min_vel_motor" value=".01"/>  
    <param name="in_place_rotation_factor" value="1.0"/>  
    <!-- set the parameters for the width between the wheels-->  
    <param name="width" value=".233"/>  
    <!-- set the parameters for whether use the odometry model or not (velocity model) -->  
    <param name="flag_use_odom" value="true"/>  
  
    <node name="base_controller" pkg="control_base" type="control_base_node"/>  
    <node name="footprint2base" pkg="tf" type="static_transform_publisher" args="0 0 0.05 0 0 0 1 /base_footprint /base_link 50"/>  
    <node name="base2laser" pkg="tf" type="static_transform_publisher" args="-0.15 0 0 0 0 0 1 /base_link /laser 50"/>  
    <node name="motor_actuator" pkg="actuate_motors" type="actuate_motors_node" args="-p /dev/slamtec_base_ status" />  
</launch>  

启动rplidar

<launch>  
  <node name="rplidarNode"          pkg="rplidar_ros"  type="rplidarNode" output="screen">  
  <param name="serial_port"         type="string" value="/dev/ttyUSB0"/>    
  <param name="serial_baudrate"     type="int"    value="115200"/>  
  <param name="frame_id"            type="string" value="laser"/>  
  <param name="inverted"            type="bool"   value="false"/>  
  <param name="angle_compensate"    type="bool"   value="true"/>  
  </node>  
</launch> 

启动gmapping

<launch>  
    <param name="use_sim_time" value="false"/>  
    <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">  
      <!--remap from="scan" to="base_scan"/-->  
      <param name="map_update_interval" value="5.0"/>  
      <param name="maxUrange" value="6.0"/>  
      <param name="sigma" value="0.05"/>  
      <param name="kernelSize" value="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="minimumScore" value="50"/>  
      <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="linearUpdate" value="1.0"/>  
      <param name="angularUpdate" value="0.5"/>  
      <param name="temporalUpdate" value="3.0"/>  
      <param name="resampleThreshold" value="0.5"/>  
      <param name="particles" value="30"/>  
      <param name="xmin" value="-5.0"/>  
      <param name="ymin" value="-5.0"/>  
      <param name="xmax" value="5.0"/>  
      <param name="ymax" value="5.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"/>  
    </node>  
    <node name="visualizer" pkg="rviz" type="rviz" args="-d $(find sdp_navigation)/rviz/navigation.rviz"/>   
</launch>  






标签: gmapping
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值