当前位置:网站首页>二维激光SLAM( 使用Laser Scan Matcher )
二维激光SLAM( 使用Laser Scan Matcher )
2022-06-23 11:53:00 【无水先生】
一、Laser Scan Matcher安装配置
ROS自带的laser_scan_matcher库,使用的是CSM(Canonical Scan Matcher),是一个纯C语言实现的PLICP算法。此外,laser_scan_matcher还集成好了gmapping,使得我们可以不需要里程计,就可以用gmapping进行建图。
如果您使用Kinetic版的ROS,可以直接apt下载
首先,您需要确定是否已安装laser_scan_matcher
apt search laser-scan-matcher如果显示已安装,则可以直接使用;若未按照,则用apt install安装
sudo apt install ros-noetic-laser-scan-matcher配置launch文件和rviz文件,注意对应好自己的ros版本
sudo cp ~/XTDrone/sensing/slam/laser_slam/laser_scan_matcher/launch/* /opt/ros/kinetic/share/laser_scan_matcher/demo/
sudo cp ~/XTDrone/sensing/slam/laser_slam/laser_scan_matcher/rviz/* /opt/ros/kinetic/share/laser_scan_matcher/demo/如果您使用的Melodic版的ROS,需要从源码编译,请参考
Can't build laser_scan_matcher for melodic · Issue #63 · CCNYRoboticsLab/scan_tools · GitHub
然后把~/XTDrone/sensing/slam/laser_slam/laser_scan_matcher/中的launch文件和rviz文件对应复制到catkin_ws/src/scan_tools/laser_scan_matcher/demo/中。
另外,还需要安装map_server功能包
sudo apt install ros-kinetic-map-server #melodic对应修改即可二、二维激光定位
indoor3.world由墙体组成,适合二维激光SLAM。首先需要修改launch文件,一是加入激光雷达坐标系和机体坐标系的变换关系,而是要选用带有激光雷达的机型。下面给了一种方案(注意第3、4、18行)
gedit ~/PX4_Firmware/launch/indoor3.launch<?xml version="1.0"?>
<launch>
<node pkg="tf" type="static_transform_publisher" name="iris_0_base_link_to_laser"
args="0.0 0.0 0.06 0.0 0.0 0.0 /base_link /iris_0/laser_2d 40" />
<!-- MAVROS posix SITL environment launch script -->
<!-- launches MAVROS, PX4 SITL, Gazebo environment, and spawns vehicle -->
<!-- vehicle pose -->
<arg name="x" default="0"/>
<arg name="y" default="0"/>
<arg name="z" default="0"/>
<arg name="R" default="0"/>
<arg name="P" default="0"/>
<arg name="Y" default="0"/>
<!-- vehicle model and world -->
<arg name="est" default="ekf2"/>
<arg name="vehicle" default="iris"/>
<arg name="world" default="$(find mavlink_sitl_gazebo)/worlds/indoor3.world"/>
<arg name="sdf" default="$(find mavlink_sitl_gazebo)/models/iris_2d_lidar/iris_2d_lidar.sdf"/>启动PX4仿真,
cd ~/PX4_Firmware
roslaunch px4 indoor3.launch 在另一个终端启动PLICP
roslaunch laser_scan_matcher matcher.launch 下图的激光和gitee主页上的动画有差异,因为激光扫描的角度和距离变了,这些可以根据您的要求修改,详见2d激光雷达模型。

这时激光SLAM将发布二维定位话题
rostopic echo /iris_0/pose2Dx: 0.0
y: 2.22044604925e-16
theta: 0.0
---
x: 0.0
y: 6.66133814775e-16
theta: 1.11022302463e-16
---
x: -1.66533453694e-16
y: -2.22044604925e-16
theta: 1.66533453694e-16
---然后建立通信
cd ~/XTDrone/communication
python multirotor_communication.py iris 0
由于二维激光SLAM只能获取无人机水平的位置信息,因此,无人机实现定位还需要高度信息,在这里高度信息使用的是Gazebo发的高度真值。由于该坐标系与无人机的坐标系不同,因此需要对应的坐标变换并转为对应的mavros话题。
cd ~/XTDrone/sensing/slam/laser_slam/script/
python laser_transfer_old.py iris 0 2d
这样定位信息就通过mavros发到了PX4,可以在PX4仿真终端看到
INFO [ecl/EKF] 19804000: reset position to ev position
INFO [ecl/EKF] 19804000: commencing external vision position fusion
INFO [ecl/EKF] 19804000: commencing external vision yaw fusion控制无人机起飞
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel
到了这一步,您已经实现了利用PLICP实现定位,下一步将建立二维占据栅格地图(Occupancy Grid Map),为二维运动规划做准备。
二维激光建图
先装一下gmapping。
sudo apt-get install ros-kinetic-slam-gmapping类似上述流程,但是同时启动PLICP+gmapping,并用键盘控制飞机的运动,走过整个地图,实现完整地图的建立。注意飞机飞行速度不要太快,否则地图的一致性会不好。
roslaunch laser_scan_matcher matcher_gmapping.launchrviz里默认显示了所有的frame,这样看着比较乱,咱们其实只需要观察base_link和map就好,您可以在rviz里把别的frame关闭。rviz中的坐标系,x轴对应红色(red),y轴对应绿色(green),z轴对应蓝色(blue),xyz正好对应rgb,比较容易记住。

当地图都建好了,通过map_server可以保存地图,得到indoor3.pgm和indoor3.yaml,为下一个示例二维运动规划提供地图。
rosrun map_server map_saver -f ~/XTDrone/motion_planning/2d/map/indoor3
在这个示例里,涉及了一些坐标系变换和话题命名问题,XTDrone已经事先把这些问题都解决了,但如果开发者想要给其他机型加上激光雷达,进行激光SLAM,则有必要深入研究一下。下面展示了这个示例的TF Tree 和 Node Graph,供开发者参考。


到此,二维激光SLAM仿真完成!祝贺您又完成了一个仿真!
边栏推荐
- Use xtradiagram Diagramcontrol for drawing and controlling process graphics
- MySQL matches multiple values in one field
- halcon原理:一维函数function_1d类型【1】
- EasyGBS如何解决对讲功能使用异常?
- 六维图剖析:中国建筑集团有限公司企业成长性分析
- Easy to understand soft route brushing tutorial
- ROS知识:librviz库的调用实践
- 4K-HDMI光端机1路[email protected] HDMI2.0光端机 HDMI高清视频光端机
- php 手写一个完美的守护进程
- 2022年全国最新消防设施操作员(初级消防设施操作员)模拟题及答案
猜你喜欢

Redis 入门-第一篇-数据结构与对象-简单动态字符串(SDS)

Learning notes sweep crawler framework
![[cloud native & microservice viii] source code analysis of weightedresponsetimerule of ribbon load balancing strategy (response time weighting)](/img/cc/afad5b5d327416c809be3b661bcc13.png)
[cloud native & microservice viii] source code analysis of weightedresponsetimerule of ribbon load balancing strategy (response time weighting)

得物多活架构设计之路由服务设计

HMS Core 视频编辑服务开放模板能力,助力用户一键Get同款酷炫视频

ROS2知识(2):网络设施

汉源高科1路千兆光口转4路千兆以太网电口千兆1光4电光纤收发器

“梦想童行” 2022年广汽本田儿童道路安全公益行走进东北

Introduction to redis - Chapter 1 - data structures and objects - simple dynamic string (SDS)

2022年全国最新消防设施操作员(初级消防设施操作员)模拟题及答案
随机推荐
"Dream of children's travel" in 2022, GAC Honda children's road safety charity travel entered the Northeast
32路电话+2路千兆以太网32路PCM电话光端机支持FXO口FXS语音电话转光纤
ESP32-C3入门教程 问题篇⑦—— fatal error: esp_bt.h: No such file or directory 找不到esp_bt.h
halcon知识:dyn_threshold的用法(划痕检测)
Vous comprenez vraiment la capacité de sortie de LDO!?
Learning notes sweep crawler framework
Oversampling Series II: Fourier transform and signal-to-noise ratio
Does the inductance have polarity?
The computer broke down. I changed the computer. There was a problem installing the node environment. The URL is not defined
【云驻共创】华为云HCIA-IoT V2.5培训系列内容之物联网概览
09 -- 回文对
Invalid Navicat scheduled task
在工作中学习的三个方法
并购增资或将有望启动东软越通新动能?
Proof and application of Chebyshev inequality
惊!AMD 350亿美元收购赛灵思!
Halcon知识:binocular_disparity 知识
十大劵商如何开户?在线开户安全么?
某问答社区App x-zse-96签名分析
『忘了再学』Shell流程控制 — 39、特殊流程控制语句