當前位置:網站首頁>二維激光SLAM( 使用Laser Scan Matcher )
二維激光SLAM( 使用Laser Scan Matcher )
2022-06-23 11:59:03【無水先生】
一、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/pose2D
x: 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.launch
rviz裏默認顯示了所有的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仿真完成!祝賀您又完成了一個仿真!
版權聲明
本文為[無水先生]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/174/202206231152018610.html
邊欄推薦
猜你喜歡
隨機推薦
- shell(34) : 時間
- 立體渲染
- RedisTemplate使用遇到\x00的問題
- 【GO】Go Modules入門
- Typecho仿盧松松博客主題模板/科技資訊博客主題模板
- 數據庫中數據的儲存結構和方式是什麼?
- cadence SPB17.4 - allegro - 優化指定單條電氣線折線連接角度 - 折線轉圓弧
- 層次選擇器
- LINQ 查詢
- 直接插入排序
- 靜態查找錶和靜態查找錶
- 【二叉樹進階】AVLTree - 平衡二叉搜索樹
- ICer技能02makefile脚本自跑vcs仿真
- MVC三層架構
- 大環境不好難找工作?三面阿裏,幸好做足了准備,已拿offer
- JVM原理之完整的一次GC流程
- STC 32比特8051單片機開發實例教程 一 開發環境搭建
- fastjson中的@JSONField注解
- C primer plus學習筆記 —— 2、常量與格式化IO(輸入/輸出)
- Day_13 傳智健康項目-第13章
- Day_04 傳智健康項目-預約管理-套餐管理
- 百度URL參數之LINK?URL參數加密解密研究(代碼實例)
- haas506 2.0開發教程-高級組件庫-modem.sms(僅支持2.2以上版本)
- 【畢業季·進擊的技術er】自己的選擇,跪著也要走
- MySQL重做日志 redo log
- 快速排序 + 冒泡排序 + 插入排序 + 選擇排序
- Acwing第 56 場周賽【完結】
- vtk.js鼠標左鍵滑動改變窗比特和窗寬
- aquatone工具 中的2個bug修複
- Vulnhub | DC: 4 |【實戰】
- 6月《中國數據庫行業分析報告》發布!智能風起,列存更生
- node request模塊cookie使用
- ionic5錶單輸入框和單選按鈕
- [極客大挑戰 2019]HardSQL
- 高性能算力中心 — NVMe/NVMe-oF — NVMe-oF Overview
- 基於STM32設計的寵物投喂器
- 圖片存儲--引用
- Tensorrt筆記(四)推理分割模型
- DevEco Device Tool 助力OpenHarmony設備開發
- 華為雲如何實現實時音視頻全球低時延網絡架構