---恢复内容开始---
1.下载
首先需要从github上以下两个包:
clone(开源的karto包,实现底层的kartoslam)
git clone (ros层,也就是应用层的kartoslam接口)
还需要一个sparse_bundle_adjustment包,才能顺利编译通过
2.编译之.
3.运行launch文件
<launch>
<param name="use_sim_time" value="true"/> <node pkg="slam_karto" type="slam_karto" name="slam_karto" output="screen"> <rosparam command="load" file="$(find slam_karto)/config/mapper_params.yaml" /> </node><node pkg="rosbag" type="play" name="play" args="$(find slam_karto)/demo/59.bag --clock"/> <node pkg="tf" type="static_transform_publisher" name="laser_static_tf_publisher" args="-0.013 0.0 0 0 0 0 1 base_link laser 200"/></launch>.bag文件
轮子编码器提供的,就称它为码盘数据.
ros下的message filter用来同步激光和码盘数据.
map->base_link的变换,就是码盘数据与校正的位姿之间的误差,在刚开始的时候二者是重合的,在后面会有偏差.
odom->base_link是码盘提供的原始数据,激光帧间匹配计算得到的是map到base_link,然后map到base_link的变换乘以(odom到base_link的变换的逆变换)就是map到odom的变换了.
激光的ros package包去驱动对应型号的激光,那么它会发布一个/scan话题出来,供程序订阅.
同理,码盘数据即由轮子编码器发布的nav_msgs/Odometry信息,需要有一个ros package包去驱动对应的轮子编码器,它会发布信息nav_msgs/Odometry或者发布odom->base_link的tf变换,每个轮子编码器不一样.
---恢复内容结束---