引言
畢業(yè)設(shè)計(jì)打算做三維激光SLAM,記錄一些學(xué)習(xí)歷程,也給后面人一點(diǎn)幫助。本教程不涉及SLAM基本概念(如果沒(méi)有自行補(bǔ)充),主要包含以下幾部分內(nèi)容。
- 搭建激光SLAM的運(yùn)行環(huán)境并運(yùn)行數(shù)據(jù)集
- 在Gazebo中構(gòu)建仿真地圖并添加動(dòng)態(tài)障礙物,使用仿真小車采集激光數(shù)據(jù)。
- A-LOAM詳解,算法+代碼
- Lego-LOAM詳解,算法+代碼
完整代碼鏈接在第一講中
第二節(jié):搭建仿真環(huán)境
下載velodyne激光模擬功能包
在完成上一節(jié)的內(nèi)容后,直接clone這個(gè)包,然后編譯
git clone https://github.com/lmark1/velodyne_simulator.git
需要根據(jù)你自己的ros版本安裝對(duì)應(yīng)包
sudo apt-get install ros-kinetic-velodyne-*
然后運(yùn)行即可,運(yùn)行如果gazebo一直卡住,參考解決方案
roslaunch velodyne_description example.launch
然后你就會(huì)看到機(jī)器人在場(chǎng)景中,以及rviz顯示的點(diǎn)云圖,它提供了16線和32線的模擬。
安裝turtlebot3模擬器
turtlebot是使用最多的機(jī)器人模擬器,如果沒(méi)安裝的話請(qǐng)先安裝
sudo apt-get install ros-noetic-turtlebot3-*
安裝三維激光雷達(dá)到turtlebot3上
我是默認(rèn)你對(duì)urdf有一點(diǎn)了解的,當(dāng)然其實(shí)也很簡(jiǎn)單,本質(zhì)上還是個(gè)xml文件,每個(gè)標(biāo)簽代表了機(jī)器人的一部分。我們先在/opt/ros/xxx/share目錄下找到turtlebot3的description功能包,為了不修改,我們把urdf文件托到自己功能包下修改,并增加VLP模塊。VLP模塊也要拖到自己功能包下,仿照velodyne_description中給的例子修改(需要注釋掉inertial標(biāo)簽,因?yàn)榧す獾闹亓繒?huì)造成機(jī)器人的翻倒)。
PS:gpu這個(gè)變量非常重要,只有設(shè)置為gpu的時(shí)候,才可以檢測(cè)到動(dòng)態(tài)障礙物,但是對(duì)性能要求更高
<xacro:include filename="$(find 3d_slam_simulation)/urdf/VLP-16.urdf.xacro"/>
<xacro:VLP-16 parent="base_link" name="velodyne" topic="/velodyne_points" hz="10" samples="440" gpu="false">
<origin xyz="0 0 0.2" rpy="0 0 0" />
</xacro:VLP-16>
具體內(nèi)容看我給的github鏈接
構(gòu)建Gazebo地圖
可以參考這篇博客自己搭建仿真環(huán)境,當(dāng)然我功能包里面有一個(gè)搭好的環(huán)境。在gazebo中添加地圖也可以不顯示GUI界面,后臺(tái)運(yùn)行,你操作機(jī)器人移動(dòng)可以看激光雷達(dá),在電腦運(yùn)行不過(guò)來(lái)GUI的時(shí)候可以這么做,對(duì)虛擬機(jī)友好。
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find 3d_slam_simulation)/world/gallery.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="false"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
添加動(dòng)態(tài)障礙物
Gazebo中添加了actor單位,可以通過(guò)指定巡航點(diǎn)的方式讓其在環(huán)境中自行運(yùn)動(dòng)(當(dāng)然也可以自己寫(xiě)插件,實(shí)現(xiàn)更復(fù)雜的運(yùn)動(dòng)規(guī)劃)官方教程,其實(shí)很容易看懂,skin就是導(dǎo)入了一個(gè)人形的皮膚;animation就是讓人以什么動(dòng)作運(yùn)動(dòng)(可以跑步、走路、太空漫步等),然后運(yùn)動(dòng)做插值可以更順暢;script里面是如何規(guī)劃運(yùn)動(dòng),直接使用trajectory標(biāo)簽就是根據(jù)waypoint點(diǎn)巡航,運(yùn)動(dòng)點(diǎn)首位相接就形成反復(fù)繞圈的景象,不相接會(huì)瞬間移動(dòng)。
<actor name="actor">
<skin>
<filename>walk.dae</filename>
</skin>
<animation name="walking">
<filename>walk.dae</filename>
<interpolate_x>true</interpolate_x>
</animation>
<script>
<trajectory id="0" type="walking">
<waypoint>
<time>0</time>
<pose>0 2 0 0 0 -1.57</pose>
</waypoint>
<waypoint>
<time>2</time>
<pose>0 -2 0 0 0 -1.57</pose>
</waypoint>
<waypoint>
<time>2.5</time>
<pose>0 -2 0 0 0 1.57</pose>
</waypoint>
<waypoint>
<time>7</time>
<pose>0 2 0 0 0 1.57</pose>
</waypoint>
<waypoint>
<time>7.5</time>
<pose>0 2 0 0 0 -1.57</pose>
</waypoint>
</trajectory>
</script>
</actor>
操作機(jī)器人建圖
安裝鍵盤操作機(jī)器人運(yùn)行的功能包
sudo apt-get install ros-kinetic-teleop-twist-keyboard
使用功能包控制機(jī)器人運(yùn)行并建圖,也可以先錄制成rosbag后再播放建圖,對(duì)電腦壓力小一些。
aloam要先啟動(dòng)地圖,再啟動(dòng)算法(不清楚為什么,不然會(huì)出現(xiàn)問(wèn)題)
roslaunch 3d_slam_simulation gazebo_turtlebot3.launch
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
最終效果
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-428902.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-428902.html
到了這里,關(guān)于從零開(kāi)始的三維激光雷達(dá)SLAM教程第二講(搭建Gazebo仿真環(huán)境,并添加動(dòng)態(tài)障礙物)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!