http://rosclub.cn/post-531.html
发布时间:2016年11月23日 13:32:20 浏览数:828次 来自:kint_zhao
旧篇: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