ROS AMCL定位个人问题汇总

AMCL定位是现在在ROS中比较常用的定位方式之一,其具体的原理详见《概率机器人》第8章内容,这里只简单记录一下做AMCL过程中遇到的问题。
1.安装
安装不细讲,这里只提示一点,在安装amcl功能包的时候尽量把全部navigation 里面的安装包都装上,以免后期重复劳动,在运行AMCL功能包的时候尽量使用对应的launch文件,例如我的底盘是差速底盘,所以运行的时候可以运行example中amcl_diff.launch文件。如果不是利用git clone命令下载的功能包,而是利用apt-get install直接安装的软件,可以直接从根目录里面寻找launch文件,或者直接建立一个功能包,在功能包里编写launch文件。为后期能够顺利利用自己的雷达,要在launch中加入

<remap from="scan" to="scan"/>
<param name="use_map_topic" value="true"/>

第一句时监听自己的雷达话题信息,第二句是为了使用自己之前已建好的地图。(提示一下,在使用功能包前,先看一看wiki上对该功能包的说明,包括需要监听那些信息、发布哪些信息、哪些参数可以改变,功能是什么,就可以随意改动launch)

2.运行准备
如果想要将AMCL功能包运行起来,前期需要做一定准备。从一个小白的角度出发,AMCL功能包的运行,至少需要这么几件东西,已经建好的地图(二维的,三维大神就别看了),里程计,二维雷达。 如果是小白,或者不会利用编码器和陀螺仪做车的里程计怎么办? 那车上有个雷达就可以,我这里简单用三维雷达做个讲解,我用的时RSLIDAR16。

首先需要将三维雷达数据转换为二维雷达数据,为节省时间我建议根据博客Robosense 激光雷达slam建图(2):使用pointcloud_to_laserscan包实现三维转二维
的方法实现,经过转换后,会发布一个话题为“scan”的二维雷达扫描信息,他的frame_id为“rslidar”。

第二,利用二维雷达信息生成里程计信息。使用的功能包是laser_scan_matcher。安装方法是

sudo apt-get install ros-%ROS_DISTRO%-scan-tools

%ROS_DISTRO%是你ROS的版本。安装好后,编写一个launch文件启动这个软件(我猜有人会需要开内容)
我的启动launch文件内容是

<launch>

  #### set up data playback from bag #############################
  <param name="/use_sim_time" value="false"/>

  #### publish an example base_link -> laser transform ###########

  <node pkg="tf" type="static_transform_publisher" name="base_link_to_laser" 
    args="0.0 0.0 0.0 0.0 0.0 0.0 /base_link /rslidar 10" />

  #### start the laser scan_matcher ##############################
  <node pkg="laser_scan_matcher" type="laser_scan_matcher_node" 
    name="laser_scan_matcher_node" output="screen">
    <param name="use_imu" value="false"/>
    <param name="use_odom" value="false"/>
    <param name="use_cloud_input" value="false"/>
    <param name="fixed_frame" value = "odom"/>
    <param name="max_iterations" value="10"/>
  </node>
</launch>

注意,如果是跑bag文件的话/use_sim_time要设置为true。此时观察topic管理器,会发现没有关于odom的话题发布,不过这个不用担心,在该功能包的Wiki上有写道

Required tf Transforms
base_link → laser
the pose of the laser in the base frame.
Provided tf Transforms
world → base_link
the pose of the robot base in the world frame. Only provided when publish_tf is enabled.

因此从odom->base_link的tftree是被提供的。而publish_tf默认为true。

第三,发布地图信息。该部分用到的功能包是map_server,在之前安装navigation的时候已经被安装过了。启动的命令是

rosrun map_server map_server mymap.yaml

mymap.yaml是编写的地图载入的参数文件,前面可以加入地址,如

rosrun map_server map_server /home/tete/movebase/test1.yaml

我的yaml文件内容是:

image: 123.png
resolution: 0.03
origin: [0.0, 0.0, 0.0]
occupied_thresh: 0.65
free_thresh: 0.196
negate: 0

细节都去Wiki上看吧,讲的很明白,地图要与yaml存在同一个路径下。

第四,启动AMCL文件。启动文件时最好将起始点与实际位置近似配齐,方法不讲了。最终实现AMCL定位的tftree如图:
ROS AMCL定位个人问题汇总_第1张图片
利用RVIZ查看的效果是:
ROS AMCL定位个人问题汇总_第2张图片
红色的箭头就是AMCL生成的随机粒子

你可能感兴趣的:(SLAM)