博客地址:https://www.cnblogs.com/zylyehuo/
gazebo小車模型創(chuàng)建及仿真詳見之前博客
gazebo小車模型(附帶仿真環(huán)境) - zylyehuo - 博客園
gazebo+rviz 仿真 - zylyehuo - 博客園
參考鏈接
Autolabor-ROS機(jī)器人入門課程《ROS理論與實(shí)踐》
成果圖
step1: 準(zhǔn)備工作
安裝必要工具包+創(chuàng)建工作包
- 安裝 gmapping 包(用于構(gòu)建地圖):
sudo apt install ros-melodic-gmapping
- 安裝地圖服務(wù)包(用于保存與讀取地圖):
sudo apt install ros-melodic-map-server
- 安裝 navigation 包(用于定位以及路徑規(guī)劃):
sudo apt install ros-melodic-navigation
創(chuàng)建文件夾及文件
按下圖結(jié)構(gòu)在 nav_demo 下依次創(chuàng)建
文件夾: config(也可按照步驟之后創(chuàng)建)、map(也可按照步驟之后創(chuàng)建)、launch
文件:nav01_slam.launch、nav02_map_save.launch、nav03_map_server.launch
/home/yehuo/mycar_ws/src/nav_demo/launch/nav01_slam.launch
<launch>
<!-- 仿真環(huán)境下,將該參數(shù)設(shè)置為true -->
<param name="use_sim_time" value="true"/>
<!-- gmapping -->
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<!-- 設(shè)置雷達(dá)話題 -->
<remap from="scan" to="scan"/>
<!-- 關(guān)鍵參數(shù):坐標(biāo)系 -->
<param name="base_frame" value="base_footprint"/><!--底盤坐標(biāo)系-->
<param name="map_frame" value="map"/>
<param name="odom_frame" value="odom"/> <!--里程計(jì)坐標(biāo)系-->
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="16.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.1"/>
<param name="srt" value="0.2"/>
<param name="str" value="0.1"/>
<param name="stt" value="0.2"/>
<param name="linearUpdate" value="1.0"/>
<param name="angularUpdate" value="0.5"/>
<param name="temporalUpdate" value="3.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="30"/>
<param name="xmin" value="-50.0"/>
<param name="ymin" value="-50.0"/>
<param name="xmax" value="50.0"/>
<param name="ymax" value="50.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
</node>
<node pkg="joint_state_publisher" name="joint_state_publisher" type="joint_state_publisher" />
<node pkg="robot_state_publisher" name="robot_state_publisher" type="robot_state_publisher" />
<node pkg="rviz" type="rviz" name="rviz" />
<!-- 可以保存 rviz 配置并后期直接使用-->
<!--
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find my_nav_sum)/rviz/gmapping.rviz"/>
-->
</launch>
step2: 仿真環(huán)境運(yùn)行 + SLAM建圖
(1)編譯+啟動(dòng) gazebo 仿真環(huán)境
source ./devel/setup.bash
roslaunch mycar environment.launch
(2)啟動(dòng) rviz
source ./devel/setup.bash
roslaunch nav_demo nav01_slam.launch
(3)啟動(dòng)鍵盤控制節(jié)點(diǎn)
rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:=0.3 _turn:=0.5
(4)在 rviz 中顯示仿真環(huán)境
(5)保存 rviz 設(shè)置
(6)通過鍵盤控制機(jī)器人運(yùn)動(dòng)
每隔 5s 更新一次地圖
step3: 保存地圖(在step2基礎(chǔ)上,不要關(guān)閉之前程序)
/home/yehuo/mycar_ws/src/nav_demo/launch/nav02_map_save.launch
<launch>
<arg name="filename" value="$(find nav_demo)/map/nav" />
<node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>
在 nav_demo 下新建文件夾 map
新建終端,保存地圖
source ./devel/setup.bash
roslaunch nav_demo nav02_map_save.launch
/home/yehuo/mycar_ws/src/nav_demo/map/nav.yaml 文件解釋
# 1、聲明地圖圖片資源的路徑
image: /home/yehuo/mycar_ws/src/nav_demo/map/nav.pgm
# 2、地圖刻度尺單位是 米/像素
resolution: 0.050000
# 3、地圖的位姿(按照右手坐標(biāo)系,地圖右下角相對(duì)于 rviz 中原點(diǎn)的位姿)
# 值1:x方向上的偏移量
# 值2:y方向上的偏移量
# 值3:地圖的偏航角度(單位:弧度)
origin: [-50.000000, -50.000000, 0.000000]
# 地圖中的障礙物判斷:
# 最終顯示結(jié)果:白色是可通行區(qū)域,黑色是障礙物,藍(lán)灰是未知區(qū)域
# 判斷規(guī)則:
# 1、地圖中的每個(gè)像素都有取值 [0,255] 255:白色 0:黑色
# 2、根據(jù)像素值計(jì)算一個(gè)比例: p = (255 - 像素值)/ 255 ==> 0:白色 1:黑色
# 3、判斷是否是障礙物, p > occupied_thresh 就是障礙物
# p < free_thresh 就無障礙物
# 4、占用閾值
occupied_thresh: 0.65
# 5、空閑閾值
free_thresh: 0.196
# 6、取反(1:黑的區(qū)域變白的,白的區(qū)域變黑的)
negate: 0
step4: 讀取地圖
/home/yehuo/mycar_ws/src/nav_demo/launch/nav03_map_server.launch
<launch>
<!-- 設(shè)置地圖的配置文件 -->
<arg name="map" default="nav.yaml" />
<!-- 運(yùn)行地圖服務(wù)器,并且加載設(shè)置的地圖-->
<node name="map_server" pkg="map_server" type="map_server" args="$(find nav_demo)/map/$(arg map)"/>
</launch>
讀取地圖文章來源:http://www.zghlxwxcb.cn/news/detail-443764.html
source ./devel/setup.bash
roslaunch nav_demo nav03_map_server.launch
顯示讀取的地圖
打開一個(gè)新的終端,啟動(dòng) rviz文章來源地址http://www.zghlxwxcb.cn/news/detail-443764.html
到了這里,關(guān)于基于Gazebo搭建移動(dòng)機(jī)器人,并結(jié)合SLAM系統(tǒng)完成定位和建圖仿真的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!