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

2023-05-16

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 sys

def make_tf_msg(x, y, theta, t,base,base0):
    trans = TransformStamped()
    trans.header.stamp = t
    trans.header.frame_id = base
    trans.child_frame_id = base0
    trans.transform.translation.x = x
    trans.transform.translation.y = y
    q = 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 = 1
            for line in dataset.readlines():
                line = line.strip()
                tokens = line.split(' ')
                if len(tokens) <= 2:
                    continue
                if 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")
                        continue

                    msg.header.frame_id = 'base_laser_link'
                    t = rospy.Time(float(tokens[(num_scans + 8)]))
                    msg.header.stamp = t
                    msg.header.seq = i
                    i += 1
                    msg.angle_min = -90.0 / 180.0 * pi
                    msg.angle_max = 90.0 / 180.0 * pi
                    msg.angle_increment = pi / num_scans
                    msg.time_increment = 0.2 / 360.0
                    msg.scan_time = 0.2
                    msg.range_min = 0.001
                    msg.range_max = 50.0
                    msg.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!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • Ubuntu20.04编译安装opencv3.2和opencv_contrib-3.2

    图像特征提取中需要用到SIFT等算法 因此不得不安装从源码编译安装opencv contrib 网上有很多教程 但是在不同的环境下多少会出现一些错误 针对Ubuntu20 04 gcc 7环境下对opencv opencv contrib编
  • 从0.3开始搭建LeGO-LOAM+VLP雷达+小车实时建图(保姆级教程,小白踩坑日记)

    背景 SLAM小白 因为项目需要花了两天时间编译代码 连接雷达实现了交互 踩了很多坑 简单记录一下 让后面感兴趣的朋友少走点弯路 肯定有很多不专业的 错误的地方 还请大家不吝赐教 噗通 也可以见知乎 https zhuanlan zhihu
  • 《视觉SLAM十四讲》第一版源码slambook编译调试

    slambook master ch2 编译正常 log如下 slambook master ch2 mkdir build cd build cmake make j8 The C compiler identification is G
  • 使用EKF融合odometry及imu数据

    整理资料发现早前学习robot pose ekf的笔记 大抵是一些原理基础的东西加一些自己的理解 可能有不太正确的地方 当时做工程遇到的情况为机器人在一些如光滑的地面上打滑的情形 期望使用EKF利用imu对odom数据进行校正 就结果来看
  • SLAM评估工具evo的使用

    evo官方指南 参考博客 lt 官方手册 这篇参考博客 完全可以掌握evo的基本操作 gt Then 实践出真知 1 安装evo sudo apt install python pip pip install evo upgrade no
  • 视觉SLAM实践入门——(20)视觉里程计之直接法

    多层直接法的过程 1 读图 随机取点并计算深度 2 创建图像金字塔 相机内参也需要缩放 并计算对应点的像素坐标 3 应用单层直接法 使用G N L M等方法 或者使用g2o ceres库 进行优化 源码中有一些地方会引起段错误 修改方法见下
  • LeGO-LOAM论文翻译(内容精简)

    LeGO LOAM是一种在LOAM之上进行改进的激光雷达建图方法 建图效果比LOAM要好 但是建图较为稀疏 计算量也更小了 本文原地址 wykxwyc的博客 github注释后LeGO LOAM源码 LeGO LOAM NOTED 关于代码
  • 【SLAM】libQGLViewer:VS 2019 + Qt 5.14.2 + Win 10 配置

    libQGLViewer 2 7 2 VS 2019 Qt 5 14 2 Win 10 配置 注意 这次配置没有完全成功 编译25个成功 一个失败 失败的是 qglviewerplugin qglviewerplugin 是一个可选控件 不
  • vscode配置eigen3

    目录 1 头文件包含 2 c cpp properties json 3 CMakeList txt 4 完整代码 1 头文件包含 Eigen 核心部分 include
  • 图像匹配算法

    图像匹配算法分为3类 基于灰度的匹配算法 基于特征的匹配算法 基于关系的匹配算法 1 基于灰度的模板匹配算法 模板匹配 Blocking Matching 是根据已知模板图像到另一幅图像中寻找与模板图像相似的子图像 基于灰度的匹配算法也称作
  • 动态场景下基于实例分割的SLAM(毕业设计开题及语义分割部分)

    动态场景下基于实例分割的SLAM 毕业论文设计思路及流水 前言 今年选了个比较难的毕设题目 这里记录一下自己思路和流程 为之后的学弟学妹 划掉 铺个方向 会按日期不定期的更新 一 开题 2019 12 24 考研前选择课题是 利用深度学习对
  • LeGO-LOAM代码详细注释版

    学习LeGO LOAM时 写的代码注释github代码链接 一部分注释来自github用户wykxwyc 一部分来自网上查阅 还有一部分是自己的理解 持续更新中
  • docker dbus-x11

    本来想用terminator启动nvidia docker 显示出图形界面的 结果发现启动的时候出问题了 terminator 1 dbind WARNING 07 31 53 725 Couldn t connect to accessi
  • 用Eigen库练习代数运算方式以便后续对刚体旋转和移动做基础

    include
  • 二.全局定位--开源定位框架livox-relocalization实录数据集测试

    相关博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 基于固态雷达的全局
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    ORB SLAM2 基于可识别特征的自主导航与地图构建 ORB SLAM Tracking and Mapping Recognizable Features 转自 http blog csdn net cicibabe article d
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • Todesk突然高速通道使用已结束

    今天使用Todesk直接报出如下错误 好像对于海外用户需要付费购买海外会员 大家有没有什么可以替换的远程控制软件的吗 能分享一下吗
  • 高翔博士Faster-LIO论文和算法解析

    说明 题目 Faster LIO 快速激光IMU里程计 参考链接 Faster LIO 快速激光IMU里程计 iVox Faster Lio 智行者高博团队开源的增量式稀疏体素结构 Faster Lio是高翔博士在Fast系列的新作 对标基

随机推荐