0.当前配置

  • Ubuntu 16.04
  • ROS Kinetic
  • Opencv 3.4.1
  • Ceres-solver
  • gcc version 5.4.0 20160609 (g++)
  • *Eigen3
  • *G2O

1.前言

本人当下在学习slam_karto,在网上搜寻相关的博客,发现大家使用karto的并不多,大多都是在介绍hector_slam和gmapping_slam.当然还有Google的cartographer.参考他人的博客,gmapping与karto效果比较相似,但似乎gmapping的计算更加复杂,已经集成到ros中,使用的也比较多,cartographer效果很好,缺点是cpu占用率和内存开销较大(之前在实体机器人上跑cartographer,内存确实爆了,但是cartographer主打的低资源消耗的“码设”,我也不清楚当初发生了什么,/捂脸),代码也非常高深(目前我感觉不太容易看懂,毕竟c++有点陌生还…).所以准备学习下karto,顺便可能的话,也分享下自己的经验.

2.安装Karto

因为slam_karto是依赖于open_karto的,所以要先安装open_karto.有两种方式安装karto_slam,我本人比较推荐使用第二种方式,虽然略微复杂一点,但是后续学习修改源代码会方便一点.

第一种:

sudo apt-get install ros-kinetic-open-karto
sudo apt-get install ros-kinetic-slam-karto

注意kinetic为你ros对应的版本.
第二种:

cd catkin_ws/src
git clone https://github.com/ros-perception/open_karto.git
git clone https://github.com/ros-perception/slam_karto.git
cd ..
catkin_make

catkin_make没有报错的话,基本上就安装成功了.你可以尝试运行,但在运行之前别忘记执行下source devel/setup.bash也可以一劳永逸,在home下的.bashrc末尾追加

source /home/yourusername/catkin_ws/devel/setup.bash

分两个Terminal运行:

roscore
rosrun slam_karto slam_karto

现在没有数据,肯定没有输出了,如果报错的话可能电脑坏来吧,要报错也是你catkin_make报错把.(由于我修改来launch文件,本来可以roslaunch slam_karto karto_slam.launch启动的…再这么写怕和我有区别).

3.下载数据集

之前大家的教程也是,光写文字或者运行,就是不给数据集,搞得我光找数据集就找了半天,功夫不负有心人还真让我给找到了,还不少呢.
戳这里:
SKrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
我不确定这个需不需要翻墙,因为我们学校的网没有墙似乎…
下载说明:

  1. 进去网站后点你想下载的对应的"download log file"
  2. 然后你可能会看到变成页面一堆数据
  3. ctrl+a
  4. ctrl+c(你懂的,全部复制,这就是你要的数据集)
  5. 新建一个文档如data.clf,存之.注意是.clf.

4.处理数据集

这个.clf不是我们用的,我们需要把它转化为特定格式的.bag文件,然后rosbag play来使用数据集,
下面给出转化用的python代码.
先说使用方法:

  1. 在你slam_karto下创建一个script文件夹,与launch文件夹同级目录.
  2. 把下面代码创建成一个.py文件如convert.py,然后放到script中.
  3. 因为他要用到ros库所以必须保存到某个parkagescript中.
  4. cd这个script下,然后python convert.py path/data.clf path/data.bag 转化成功.

这个代码是python2.7,python3.5+的自己修改下不兼容的语法即可.代码参考这位博主.还有一位,暂时找不到来,往后补上.

#!/usr/bin/env python
#coding=utf8'''This is a converter for the Intel Research Lab SLAM dataset( http://kaspar.informatik.uni-freiburg.de/~slamEvaluation/datasets/intel.clf )to rosbag'''import rospy
import rosbag
from sensor_msgs.msg import LaserScan
from nav_msgs.msg import Odometry
from math import pi
from tf2_msgs.msg import TFMessage
from geometry_msgs.msg import TransformStamped
import tf
import sysdef make_tf_msg(x, y, theta, t,base,base0):trans = TransformStamped()trans.header.stamp = ttrans.header.frame_id = basetrans.child_frame_id = base0trans.transform.translation.x = xtrans.transform.translation.y = yq = tf.transformations.quaternion_from_euler(0, 0, theta)trans.transform.rotation.x = q[0]trans.transform.rotation.y = q[1]trans.transform.rotation.z = q[2]trans.transform.rotation.w = q[3]msg = TFMessage()msg.transforms.append(trans)return msg
if __name__ == "__main__":if len(sys.argv) < 3:print "请输入dataset文件名。" exit()print "正在处理" + sys.argv[1] + "..."with open(sys.argv[1]) as dataset:with rosbag.Bag(sys.argv[2], 'w') as bag:i = 1for line in dataset.readlines():line = line.strip()tokens = line.split(' ')if len(tokens) <= 2:continueif tokens[0] == 'FLASER':msg = LaserScan()num_scans = int(tokens[1])if num_scans != 180 or len(tokens) < num_scans + 9:rospy.logwarn("unsupported scan format")continuemsg.header.frame_id = 'base_laser_link't = rospy.Time(float(tokens[(num_scans + 8)]))msg.header.stamp = tmsg.header.seq = ii += 1msg.angle_min = -90.0 / 180.0 * pimsg.angle_max = 90.0 / 180.0 * pimsg.angle_increment = pi / num_scansmsg.time_increment = 0.2 / 360.0msg.scan_time = 0.2msg.range_min = 0.001msg.range_max = 50.0msg.ranges = [float(r) for r in tokens[2:(num_scans + 2)]]msg.ranges.append(float(0))  #我修改了这bag.write('scan', msg, t)odom_x, odom_y, odom_theta = [float(r) for r in tokens[(num_scans + 2):(num_scans + 5)]]tf_msg = make_tf_msg(odom_x, odom_y, odom_theta, t,'odom','base_link')bag.write('tf', tf_msg, t)elif tokens[0] == 'ODOM':odom_x, odom_y, odom_theta = [float(t) for t in tokens[1:4]]t = rospy.Time(float(tokens[7]))tf_msg = make_tf_msg(0, 0, 0, t,'base_link','base_laser_link')bag.write('tf', tf_msg, t)

5.尽情跑吧

roscore
rosrun slam_karto slam_karto
rosbag play data.bag

如果你装来Rviz的话,可以在Rviz中看出效果了,没装这里也不介绍怎么装了,哈哈.

rosrun rviz rviz

效果图:

6.可能出错的地方

应该没有了吧,catkin_make可能容易出错,因为那是我根据印象写下的步骤.其次就是python2.7的.
注意那个python代码我改了一点,是因为slam_karto默认的雷达数据应该是180度,以及181条激光束,而下载的数据集是180个激光束,所以我最后增加了一条深度为0的激光束.
有问题留言讨论吧,看到会及时回你.

溜溜球.skr!

Karto_slam跑激光雷达(北阳ust-10lx下一篇介绍使用)相关推荐

  1. 北阳Hokuyo UST-10LX 虚拟机Ubuntu 环境下运行配置

    一直想学习ros,自己也是一个小白,之前一直是在模型场景下学习,今天有机会拿到一个北阳Hokuyo UST-10LX 2d激光想在虚拟机环境下ubuntu 16.04 下用起来.csdn上资料挺多的, ...

  2. YDLIDAR G4雷达的unity使用相关+北阳雷达

    业务需求用到了G4激光雷达,需要对接雷达的sdk,最方便的是直接找unitypackage包来用,网上要么收费要么没用.所以还是自己对接吧 准备 先找相关文档,官网,sdk样例等.官网里各种文档和sd ...

  3. 小步快跑是这样玩的(下)

    系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候"Good noon! ".傍晚问候"Good evening! ". ...

  4. 计算机网络基础北邮,北邮 大三下 计算机网络技术实践 实验五_图文

    北邮 大三下 计算机网络技术实践 实验五_图文 更新时间:2017/1/22 21:54:00  浏览量:691  手机版 实验报告 课程名称: 计算机网络技术基础 实验名称: 实验五 以太网数据传输 ...

  5. 从零开始搭建ROS下无人机激光雷达SLAM——hector_slam建图入门——综述篇

    首先我们看下最终无人机SLAM定位的计算图,然后根据计算图追根溯源分析实现算法在ROS中实现的流程 从图中可以看出总共包含的ros节点有5个,分别所属三个包,其中包1.2是ROS官方现成直接可以使用的 ...

  6. raid5硬盘插到计算机读取,【哭着写下这篇文章】win2008软raid5变成2个磁盘组的数据恢复...

    [哭着写下这篇文章]win2008软raid5变成2个磁盘组的数据恢复 2019-05-15 15:02:45 5点赞 9收藏 0评论 创作立场声明:作为略知皮毛,非专业数据维护人员,如果哪里介绍有问 ...

  7. 【Benewake(北醒) 】短距 TFmini Plus 12m介绍以及资料整理

    目录 1 前言 2 产品介绍 3 产品快速测试 3.1 产品规格书及使用说明书 3.2 通用上位机测试说明 3.3 通用指令串口助手使用说明 3.4 产品快速测试说明 3.5 操作视频 4 基于开源硬 ...

  8. 【Benewake(北醒) 】长距 TF350 350m介绍以及资料整理

    目录 1 前言 2 产品介绍 3 产品快速测试 3.1 产品规格书及使用说明书 3.2 通用上位机测试说明 3.3 通用指令串口助手使用说明 3.4 产品快速测试说明 4 基于开源硬件的运用整理 4. ...

  9. 【Benewake(北醒) 】中距 TF02-Pro 40m介绍以及资料整理

    目录 1 前言 2 产品介绍 3 产品快速测试 3.1 产品规格书及使用说明书 3.2 通用上位机测试说明 3.3 通用指令串口助手使用说明 3.4 产品快速测试说明 3.5 操作视频 4 基于开源硬 ...

最新文章

  1. Java Pinyin4j(汉字转拼音)
  2. Cpp 对象模型探索 / placement new 实现原理
  3. 你真的懂 timeout 吗?
  4. mariadb中文手册_MariaDB性能调优工具mytop的使用详解
  5. python带参数的装饰器_Python-----带参数的装饰器以及补充
  6. 【职场生活】跳槽离职要注意的那些坑?
  7. 源码安装apache后将其设置为开机启动
  8. 机器学习实战(SVM)
  9. python的索引与切片
  10. 2012年8月27日|第二章:编程语言概述|总结
  11. 用VBA检查Word文档中是否存在位于行首的脚注引用,如存在则通过调整字符间距使其移动到非行首的位置
  12. 树莓派 PHP白屏,树莓派系统安装及3.5寸显示屏白屏解决办法
  13. redis链接不上,报保护模式
  14. java 抓取搜狗微信_搜狗微信公众号文章抓取
  15. pve安装黑群晖直通硬盘_Promox VE(PVE)安装虚拟黑群晖实现硬盘休眠避坑指南
  16. 台式计算机的内存容量,内存容量
  17. 拼多多在海外暂时不会上线砍一刀功能;微软落户中国三十周年;JDK 19 GA发布|极客头条
  18. 旋转平移变换矩阵是先旋转还是先平移?
  19. 用户主要通过计算机软件与计算机进行交流,大学计算机基础(2015版)蔡绍稷,吉根林习题三-答案讲述.doc...
  20. JavaSE -IO流

热门文章

  1. C++ 12 翁恺> const
  2. 从14次“一轮游”到问鼎大满贯 “灰姑娘”张帅这样逆袭
  3. 什么是塑胶模具?简要了解
  4. 离散余弦变换(含源码)
  5. 为什么说使用HTTP代理上网更安全?
  6. springboot整合mybatis实现增删改查
  7. 提高网速软件_直播软件这样开发,确实独树一帜
  8. 工程总承包和施工总承包的区别
  9. 日常-工作上的那点事儿
  10. python系统学习日记 L32 循环和列表