使用Velodyne 16线激光雷达跑SLAM- cartographer算法

本文档详细介绍了如何配置和运行Cartographer ROS包,以实现基于Velodyne16线激光雷达的SLAM。首先,通过安装必要的工具和依赖项创建ROS工作空间,接着将cartographer_ros源码添加到工作空间并编译。在编译过程中可能遇到的问题,如absl错误,可以通过特定脚本解决。最后,下载并运行Cartographer的DEMO来验证设置,但需注意可能的文件路径错误。

使用Velodyne 16线激光雷达跑SLAM- cartographer算法(包含常见的报错)

2016年10月5日,谷歌宣布开放一个名为cartographer的即时定位与地图建模库,开发人员可以使用该库实现机器人在二维或三维条件下的定位及建图功能。cartograhper的设计目的是在计算资源有限的情况下,实时获取相对较高精度的2D地图。考虑到基于模拟策略的粒子滤波方法在较大环境下对内存和计算资源的需求较高,cartographer采用基于图网络的优化方法。目前cartographer主要基于激光雷达来实现SLAM,谷歌希望通过后续的开发及社区的贡献支持更多的传感器和机器人平台,同时不断增加新的功能。 cartographer功能包 cartographer功能包已经与ROS集成,现在已经提供二进制安装包,本次采用源码编译的方式进行安装。为了不与已有功能包冲突,最好为cartographer专门创建一个工作空间,这里我们新创建了一个工作空间catkin_google_ws,然后使用如下步骤下载源码并完成编译。

1.安装相应的工具

sudo apt-get update sudo apt-get install -y python-wstool
python-rosdep ninja-build

2.初始化工作空间

cd catkin_google_ws
wstool init src

3.加入cartographer_ros.rosinstall并更新依赖

wstool merge -t src http://raw.githubusercontent.com/googlecartographer/cartographer_
ros/master/cartographer_ros.rosinstall

wstool update -t src

4.安装依赖并下载cartographer相关功能包 命令如下:

rosdep update
rosdep install ——from-paths src ——ignore-src ——rosdistro=${ROS_DISTRO} -y

(这里执行上面的代码可能会报类似ROS路径[]这样的错误,如果是的话,试着执行下面的命令)

rosdep install --from-paths src --ignore-src -r -y
catkin_make_isolated --cmake-args -DROBOTRACONTEUR_ROS=1

5.编译并安装

catkin_make_isolated ——install ——use-ninja source
install_isolated/setup.bash

编译过程可能报absl的错误,可以用如下的方法解决:

sudo apt-get install stow sudo chmod +x
~/catkin_google_ws/src/cartographer/scripts/install_abseil.sh
cd ~/catkin_google_ws/src/cartographer/scripts
./install_abseil.sh

注意这里我的工作空间文件名是catkin_google_ws,要替换成你们创建的工作空间名。

6.下载Google提供的demo并运行感受一下(大概400多m)

wget -P ~/Downloads
https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag

roslaunch cartographer_ros demo_backpack_2d.launch
bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag

安装完cartographer后运行上面的demo,如果出现下面的错误,可能是包的地址不对,建议检查一下自己包的地址

[FATAL] [1590630448.926035157]: Error opening file: /home/sundong/sundong/Exploring/cartographer/bag/cartographer_paper_deutsches_musm.bag
[ INFO] [1590630448.998609889]: I0528 09:47:28.000000 12045 submaps.cc:176] Added submap 1
[playbag-5] process has died [pid 12055, exit code 1, cmd /opt/ros/kinetic/lib/rosbag/play --clock /home/sundong/sundong/Exploring/cartographer/bag/cartographer_paper_deutsches_musm.bag __name:=playbag __log:=/home/sundong/.ros/log/2fcbad18-a085-11ea-83d1-90cdb648c685/playbag-5.log].
log file: /home/sundong/.ros/log/2fcbad18-a085-11ea-83d1-90cdb648c685/playbag-5*.log
### 激光雷达SLAM建图算法实现原理 激光雷达同步定位与地图构建(SLAM)是一种利用激光测距仪获取环境数据并创建二维或三维地图的技术。此过程不仅涉及建立周围环境的地图,还涉及到估计设备自身的位姿变化。 #### 数据采集与预处理 激光雷达通过发射激光束并测量反射时间来确定物体的距离。这些距离信息形成一系列离散点云数据。对于二维激光雷达而言,其扫描平面内的障碍物位置;而三维激光雷达则提供更丰富的空间结构描述[^1]。 #### 特征提取与匹配 从原始点云中提取特征点或者边缘等几何特性,并将其用于后续的姿态估计。常用的方法有基于ICP(Iterative Closest Point迭代最近点法)的配准方法,在已知上一时刻的位置基础上寻找当前帧的最佳变换矩阵使得两帧之间的差异最小化[^2]。 #### 地图更新与优化 随着车辆移动不断积累新的观测值加入到全局坐标系下构成增量式的栅格地图或是拓扑关系网状模型。为了提高精度还需定期执行回环检测(Closed Loop Detection),即当再次回到曾经访问过的地方时识别出来并通过非线性优化调整历史轨迹中的累积误差[^3]。 ```python import numpy as np from laser_slam import LaserSlam def process_scan_data(scan_points, slam_system=LaserSlam()): """ 处理单次扫描的数据 参数: scan_points (list of tuples): [(x,y), ...], 单次扫描得到的一系列(x,y)坐标点 返回: updated_map (numpy.ndarray): 更新后的地图表示 """ # 将新获得的scan points传递给slam system进行处理 updated_pose = slam_system.update_with_new_scans(scan_points) # 获取最新的map状态 updated_map = slam_system.get_current_map() return updated_map ``` ### 应用场景 - **室内导航**:机器人能够在未知环境中自主探索房间布局,绘制出精确的地图供路径规划使用- **无人驾驶汽车**:辅助自动驾驶系统理解复杂的城市道路状况,确保安全行驶的同时也为高精地图制作提供了可能。 - **无人机巡检**:携带小型化的LiDAR装置可以快速高效地完成大面积区域测绘任务,适用于电力线路巡查等领域。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值