1.Gazebo概述
在Gazebo中的模擬效果是非常好的.
它的特性
Dynamics Simulation
直接控制物理引擎參數
Building Editor
無需代碼即可在Gazebo中創建機器人模型(只用insert就可以插入各種模型,可以在基於Gazebo的雲端中創建機器人模型)
Advanced 3DGraphics
提高真實性
Sensors
提供激光雷達,攝像頭,RGBD攝像頭,IMU等傳感器
Robot Models
提供多種機器人模型,包括PR2,iRobot,Create,TurtleBot,機械臂,靈巧手等
Environments
提供多種模擬環境
Programmatic Interfaces
支持ROS,API接口.
Gazebo構架(由服務器和客戶端組成)
服務器:其作用是執行物理循環,生成傳感器數據
執行文件:gzserver
Libraries:Physics(物理環境模擬),Sensors(傳感器),Rendering(用於渲染),Transport(傳輸數據)
客戶端:其作用提供用戶交互和可視化仿真
執行文件:gzclient
Libraries:Transport,Rendering,GUI
如何運行gazebo
有兩種方式:
1.單獨運行server和client
gzserver
gzclient
2.同時運行gazebo server和client
gazebo
如果從ros中啟動,則使用
rosrun gazebo_ros gazebo
本版本的ros是indigo,gazebo的版本為2.2,它有一個故障問題,即找不到models,
Ubuntu下顯示隱藏文件,使用快捷鍵ctrl+h
下載完上面的文件之后,才可以運行Gazebo.
運行之前啟動roscore,再運行rosrun gazebo_ros gazebo
從上面可以看出在world下面提供了Scene,Physics,Models(模擬各種模型,默認只有一個地平面),LIghts(模擬光線).
insert下面包含各種Models.
按住shift+z可以進行左右旋轉
將上面內容保存 save world as,其格式為sdf
它默認的launch文件
在上面的文件中paused表示以暫停模式運行
use_sim_time表示使用模擬時間
extra_gazebo_args表示表示外部的其他參數
gui表示窗口模式
world_name默認是worlds/empty.world,我們可以指定自己的文件比如之前保存的demo_world.sdf文件,在后面直接把launch文件里面empty_world繼承一下,然后把下面的參數默認換成自己的demo_world.world來運行剛剛配置好的世界.
上面的3個參數是跟在gazebo_ros中的參數,第一個參數是否暫停運行,第二個參數為headless,第三個參數為是否詳細運行.
下面的script_type,如果是debug就運行debug,否則運行gzserver.
最下面是client的參數,如果選擇gui的話.
willowgarage_world.launch文件繼承自empty_world.launch文件
剛開始直接包含了empty_world.launch文件,然后把參數換成willowgarage.wold文件.
下面的參數是跟empty_world.launch是一樣的可以不用指定.
TurtleBot in gazebo
下面看一下turtlebot的urdf文件
xacro::macro是支持描述文件的一種格式,
URDF(機器人描述的文件)的生成,
Turtlebot navigation
為了能夠控制啟動的機器人,把下面的一行加入文件turtlebot_gmapping.launch
如果不加就會出現如下錯誤
按照上面修改過后正確運行之后,再運行rviz
rosrun rviz rviz
然后再在rviz中添加如下內容
最后rviz中的顯示結果如下:
看一下上面都發布了那些主題
它發布的主題跟move_base基本上是一致的.
它也有/move_base/goal這個主題,就是rviz上面的2d導航.
下面來啟動一下turtlebot的gmapping
roslaunch turtlebot_navigation turtlebot_gmapping.launch ,同樣需要按照上面的方式進行修改.
下面來寫一個避障的程序,首先需要一個/scan主題,用它來發現離障礙物的距離.以及控制機器人運動的主題為
/cmd_vel_mux/input/teleop
在之前的包為turtlebot_navigation下的src下創建源文件turtlebot_walk.cpp
CMakeLists.txt
文件內容
package.xml
然后在launch文件的turtlebot_amcl.launch中加入下面內容,啟動本程序的節點
下面運行一個turtlebot_amcl.launch文件
roslaunch turtlebot_navigation turtlebot_amcl.launch
關閉該節點.