用激光实现Gmapping

实现需要:

有提供里程计odom的小车一辆,一个激光,一台电脑(我是用EAI小车和R2000倍加福激光)
如果用的是r2000 链接在右边----> R2000激光雷达驱动安装
在用gampping前确保激光有数据

开始用gammping实现建图

gmapping开源的代码,只要改里面的参数就行非常的方便,话不多说上代码

<!--这是小车的驱动程序,这里会提供odom到base_link的坐标转换
可以用rosrun rqt_tf_tree rqt_tf_tree 查看tf树中的坐标转换关系
		如果你的小车没有提供odom——>base_link的
	 如果没有odom——>base_link的tf转换需要自己写一个tf转换
-->
<launch>
   <node name="arduino" pkg="dashgo_bringup" type="dashgo_driver.py" output="screen">
      <rosparam file="$(find dashgo_bringup)/config/my_dashgo_params.yaml" command="load" />
   </node>

<!-- 激光加载 
		注意这个frame_id 我这里的缺省值是scan,可以自行修改,这个id在gmapping_demo.launch有用到-->
    <arg name="frame_id" default="scan"/>
  <arg name="scanner_ip" default="192.168.31.158"/>
  <arg name="scan_frequency" default="35"/>
  <arg name="samples_per_scan" default="3600"/>

  <!-- R2000 Driver -->
  <node pkg="pepperl_fuchs_r2000" type="r2000_node" name="r2000_node" respawn="true" output="screen">
    <param name="frame_id" value="$(arg frame_id)"/>
    <param name="scanner_ip" value="$(arg scanner_ip)"/>
    <param name="scan_frequency" value="$(arg scan_frequency)"/>
    <param name="samples_per_scan" value="$(arg samples_per_scan)"/>
  </node>

<!-- 这是base_link——>激光laser的tf坐标转换
/base_footprint /scan 40 注意base_footprint要和gammping.launch文件中base_frame的值对应
而这个scan要和激光的rame_id对应
-->
<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser4" args="0.0 0.0 0.44 0.0 0.0  0.0 /base_footprint /scan 40" />


<!-- 小车的描述文件-->
	<include file="$(find dashgo_description)/launch/dashgo_description.launch"/>
	<!--  启动gammping-->
  <include file="$(find dashgo_nav)/launch/gmapping.launch"/>
</launch>

gammping.launch需要修改的部分

<!--base_frame的指要和gammping_demo里的/base_footprint /scan 40对应 -->
<arg name="base_frame"  default="base_footprint"/>
  <arg name="odom_frame"  default="odom"/>
  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
  <!-- 这句话  to="/r2000_node/scan"/ 要看自己的激光的节点名字
  如果不知道,可以单独运行激光,然后输入rostopic list查看激光信息
-->
  <remap from="scan" to="/r2000_node/scan"/>
  <param name="pub_map_odom_transform" value="true"/>
    <param name="base_frame" value="$(arg base_frame)"/>
    <param name="odom_frame" value="$(arg odom_frame)"/>

单独运行激光后得到的激光信息
remap from=“scan” to="/r2000_node/scan" 这个就是从这里来的
查看激光节点信息

tf树可能和你们的不一样其实只要有右边一列通就可以建图了
在这里插入图片描述
各个节点的关系图
在这里插入图片描述
在这里插入图片描述
最后的建图效果

在这里插入图片描述

附上全部的gmapping.launch

<launch>
  
  <arg name="base_frame"  default="base_footprint"/>
  <arg name="odom_frame"  default="odom"/>

  <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
  <param name="pub_map_odom_transform" value="true"/>
    <param name="base_frame" value="$(arg base_frame)"/>
    <param name="odom_frame" value="$(arg odom_frame)"/>
    <param name="map_update_interval" value="0.01"/>
    <param name="maxUrange" value="4.0"/>
    <param name="maxRange" value="5.0"/>
    <param name="sigma" value="0.05"/>
    <param name="kernelSize" value="3"/>
    <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="30"/>
    <param name="srr" value="0.01"/>
    <param name="srt" value="0.02"/>
    <param name="str" value="0.01"/>
    <param name="stt" value="0.02在这里插入代码片
"/>
    <param name="linearUpdate" value="0.05"/>
    <param name="angularUpdate" value="0.0436"/>
    <param name="temporalUpdate" value="-1.0"/>
    <param name="resampleThreshold" value="0.5"/>
    <param name="particles" value="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"/>
  make the starting size small for the benefit of the Android client's memory...
  -->
    <param name="xmin" value="-1.0"/>
    <param name="ymin" value="-1.0"/>
    <param name="xmax" value="1.0"/>
    <param name="ymax" value="1.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"/>
    <remap from="scan" to="/r2000_node/scan"/>
  </node>
</launch>```



  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值