ubuntu版本:20.04
gazebo版本:gazebo11
1.打開gazebo
終端輸入“gazebo”或者直接點(diǎn)gazebo軟件圖標(biāo)。
?2.前往建筑編輯器
點(diǎn)擊上方“Edit” → “Buiding Edit ” 或者快捷鍵 “Ctrl + B” 進(jìn)入建筑編輯器。
左邊圖形界面可以建造墻,添加門、窗、梯子。也可以更改以后墻的顏色和紋理。
3.導(dǎo)入圖片
點(diǎn)擊左下角“import” ,選擇一張戶型圖導(dǎo)入
點(diǎn)擊“Next”,隨便選取一段,在左邊輸入其真實(shí)長(zhǎng)度后 ,點(diǎn)擊“ok”。
4.建造model并保存
做完上述步驟后,右上部分2D視圖會(huì)出現(xiàn)導(dǎo)入的圖片。
點(diǎn)擊左邊“ Wall ” ,對(duì)著房屋輪廓和內(nèi)部墻壁描邊,下方的3D視圖會(huì)同步顯示墻壁信息,全部完成如下所示。
也可以雙擊2D視圖里的墻壁進(jìn)行詳細(xì)參數(shù)設(shè)置。
再按照戶型圖進(jìn)行門窗的設(shè)置,點(diǎn)擊左邊的“Window ” 和 “ Door ” ,在相應(yīng)墻壁位置選擇即可。同樣,門窗的參數(shù)也可以雙擊修改。
?
全部完成后,就造好了一個(gè)像樣的住房模型。
點(diǎn)擊左上角“File” → “Save” 保存。注意,保存路徑為 ./gazebo/models (需要在主目錄文件下打開隱藏目錄右,在保存路徑窗口右鍵選擇“show hidden files”)。再輸入你的 Model Name ,點(diǎn)擊“Save” 保存成功(保存后再次無法編輯,只能增刪模型)。
tips:較低版本的gazebo可能在保存之前,需要提前在主目錄文件下打開隱藏目錄(右上角選項(xiàng)勾選上或者按“ Ctrl + H ”)進(jìn)入 ./gazebo/models,創(chuàng)建一個(gè)和你的 Model Name 同名的文件夾,再進(jìn)行保存操作。
5.初始化文件+豐富模型
再次從文件進(jìn)入 ./gazebo/models/house_2,會(huì)有兩個(gè)文件
右邊的model.sdf 就是房屋模型的參數(shù)。打開左邊的model.config (較低版本gazebo沒有該文件,需要自己創(chuàng)建),就可以添加一些模型作者及郵箱、模型簡(jiǎn)介等信息,之后保存退出即可。
再次打開gazebo ,左上角insert 選項(xiàng)卡里就會(huì)找到自己的模型,找到并選擇自己剛
才建好的模型放置到右邊窗口。
在insert選項(xiàng)下,選擇添加自己想要的家具等模型,來豐富自己的world??梢酝ㄟ^上方按鈕,來平移、旋轉(zhuǎn)模型選擇合適的擺放位置。
點(diǎn)擊“File” → “Save world” ,保存到 usr/share/gazebo-11/worlds 下,并命名為house_2.world。
如果出現(xiàn)權(quán)限不夠的問題,可以先在主目錄下創(chuàng)建一個(gè)world文件夾(做臨時(shí)保存用),點(diǎn)擊“File” → “Save world” ,在world文件下保存命名為house_2.world。然后通過vim指令,在終端通過sudo vim house_2.world 在目錄usr/share/gazebo-11/worlds下 生成house_2.world,并把臨時(shí)保存的house_2.world里面的代碼復(fù)制進(jìn)去,保存退出。
6.配置launch文件
在/opt/ros/noetic/share/gazebo_ros/launch目錄下同上使用vim指令創(chuàng)建house_2.launch文件,并添加以下代碼:
<?xml version="1.0"?>
<launch>
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="worlds/house_2.world"/>
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
</launch>
保存退出后,終端輸入:
roslaunch gazebo_ros house_2.launch
就可以成功啟動(dòng)剛才保存的house_2.launch文件,效果如下。
至此,一個(gè)完整的world創(chuàng)建和啟動(dòng)就結(jié)束了。
tips:world和launch文件也可以統(tǒng)一保存在用戶目錄下的workspace中,這樣就不會(huì)有權(quán)限問題,但是launch的配置文件需要作一點(diǎn)點(diǎn)修改,需要find到正確的路徑,因?yàn)檫\(yùn)行gazebo默認(rèn)的world路徑是gazebo_ros 。
7.載入小車并運(yùn)動(dòng)觀察
在/opt/ros/noetic/share/gazebo_ros/launch目錄下繼續(xù)使用vim指令創(chuàng)建house_2_with_robot.launch文件,把house_2的代碼復(fù)制進(jìn)來,并加入小車節(jié)點(diǎn),即加入以下代碼:
<!-- 加載機(jī)器人模型描述參數(shù) -->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_gazebo)/urdf/mrobot_with_camera.urdf.xacro'" />
<!-- 運(yùn)行joint_state_publisher節(jié)點(diǎn),發(fā)布機(jī)器人的關(guān)節(jié)狀態(tài) -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<!-- 運(yùn)行robot_state_publisher節(jié)點(diǎn),發(fā)布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" >
<param name="publish_frequency" type="double" value="50.0" />
</node>
<!-- 在gazebo中加載機(jī)器人模型-->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model mrobot -param robot_description"/>
將第一個(gè)中路徑改為自己機(jī)器人模型的路徑文件即可。
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_gazebo)/urdf/mrobot_with_camera.urdf.xacro'" />
在這里提供兩種模型供大家選擇,第一種為本文中用到的小車模型,鏈接如下:
鏈接: https://pan.baidu.com/s/1guTCa-Nt4y3-xtiHBDlwZg 提取碼: x7bx
第二種是turtubot3中小車模型,鏈接如下,有需要的人自行下載:https://pan.baidu.com/s/1bUjgNsmc83ja7KwL8iPhYw
提取碼: 5g4g
完整house_2_with_robot.launch代碼如下:
<?xml version="1.0"?>
<launch>
<!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="worlds/house_2.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
<arg name="paused" value="false"/>
<arg name="use_sim_time" value="true"/>
<arg name="gui" value="true"/>
<arg name="headless" value="false"/>
<arg name="debug" value="false"/>
</include>
<!-- 加載機(jī)器人模型描述參數(shù) -->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find mrobot_gazebo)/urdf/mrobot_with_rplidar.urdf.xacro'" />
<!-- 運(yùn)行joint_state_publisher節(jié)點(diǎn),發(fā)布機(jī)器人的關(guān)節(jié)狀態(tài) -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<!-- 運(yùn)行robot_state_publisher節(jié)點(diǎn),發(fā)布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" >
<param name="publish_frequency" type="double" value="50.0" />
</node>
<!-- 在gazebo中加載機(jī)器人模型-->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model mrobot -param robot_description"/>
</launch>
?
同樣通過roslaunch即可啟動(dòng)整個(gè)gazebo環(huán)境加小車模型。
roslaunch gazebo_ros house_2_with_robot.launch
如果小車上配備了攝像頭傳感器的話,啟動(dòng)鍵盤控制節(jié)點(diǎn),控制小車運(yùn)動(dòng),再在終端輸入
rqt_image_view
啟用rqt工具,選擇 /camera/image_raw,就可以實(shí)時(shí)觀看攝像頭的畫面。文章來源:http://www.zghlxwxcb.cn/news/detail-457500.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-457500.html
到了這里,關(guān)于gazebo仿真環(huán)境搭建+配置+小車運(yùn)動(dòng)仿真的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!