Gazebo機器人仿真學習探索筆記(二)基本使用說明
在完成Gazebo7安裝後,需要熟悉Gazebo,方便之後使用。
部分源代碼可以參考:https://bitbucket.org/osrf/gazebo/src/
如果還沒有安裝請參考之前內容完成安裝,快速打開ubuntu終端的方式(CTRL+ALT+t
):
~$ gazebo
Gazebo7自帶了很多構建好的環境模型,可以直接使用,這些模型位置和安裝路徑相關:
relaybot@relaybot-desktop:~$ ls /usr/share/gazebo-7/worlds/
actor.world pioneer2dx.world
blank.world plane_demo.world
camera.world plugin.world
cart_demo.world polyline.world
cessna_demo.world population.world
contact.world pr2.world
depth_camera.world presentation.world
elevator.world pressure_sensor.world
empty_1_0.world projector.world
empty_bullet.world quad_rotor_demo_2.world
empty_sky.world quad_rotor_demo.world
empty.world random_velocity.world
everything.world ray_cpu.world
flocking.world ray_noise_plugin.world
force_torque_demo.world road_textures.world
friction_demo.world road.world
gripper.world robocup09_spl_field.world
heightmap_dem.world robocup14_spl_field.world
heightmap.world robocup_3Dsim.world
hydra_demo.world rubble.world
imu_demo.world seesaw.world
initial_velocity.world shapes_bitmask.world
joint_damping_demo.world shapes_layers.world
joint_friction_demo.world shapes.world
joints.world sim_events.world
lift_drag_demo.world simple_arm.world
lights.world simple_gripper.world
linear_battery_demo.world single_rotor_demo.world
logical_camera.world sonar_demo.world
magnetometer.world sphere_atlas_demo.world
mud_bitmask.world stacks.world
mud.world timer_gui.world
multilink_shape.world torsional_friction_demo.world
nested_model.world transporter.world
openal.world trigger.world
ortho.world twin_rotor_demo.world
osrf_elevator.world underwater.world
pioneer2dx_camera.world willowgarage.world
pioneer2dx_laser_camera.world wireless_sensors.world
pioneer2dx_laser.world
在ubuntu下默認的路徑爲:/usr/share/gazebo-7/worlds/。
啓動一個示例,如下:
/usr/share/gazebo-7/worlds$ gazebo lift_drag_demo.world
啓動一個帶有天空的環境:
/usr/share/gazebo-7/worlds$ gazebo empty_sky.world
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<scene>
<sky>
<clouds>
<speed>12</speed>
</clouds>
</sky>
</scene>
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>
<!-- A ground plane -->
<include>
<uri>model://ground_plane</uri>
</include>
</world>
</sdf>
注意這個環境中,天空中只有雲彩速度爲12,場景中還有光源和大地。
啓動一個帶有機器人模型的環境:
/usr/share/gazebo-7/worlds$ gazebo pioneer2dx_laser_camera.world
<?xml version="1.0" ?>
<sdf version="1.5">
<world name="default">
<!-- Ground -->
<include>
<uri>model://ground_plane</uri>
</include>
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include> <!-- Pioneer2dx model -->
<model name="pioneer2dx">
<include>
<uri>model://pioneer2dx</uri>
</include> <include>
<uri>model://hokuyo</uri>
<pose>0.2 0 .38 0 0 0</pose>
</include> <include>
<uri>model://camera</uri>
<pose>0.2 0 .3 0 0 0</pose>
</include> <joint name="camera_joint" type="revolute">
<parent>pioneer2dx::pioneer2dx::chassis</parent>
<child>pioneer2dx::camera::link</child>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>0</lower>
<upper>0</upper>
</limit>
</axis>
</joint> <joint name="laser_joint" type="revolute">
<parent>pioneer2dx::pioneer2dx::chassis</parent>
<child>pioneer2dx::hokuyo::link</child>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>0</lower>
<upper>0</upper>
</limit>
</axis>
</joint> </model> </world>
</sdf>
參考上述模板,可以學習環境文件,主要由大地,光源,機器人模型,機器人模型包括本體,激光和攝像頭等具體配置。
除此之外,還有gzserver和gzclient。
gazebo命令实际上运行两个不同的可执行文件。 第一个称为gzserver,第二个称为gzclient。
gzserver可执行程序运行物理更新循环和传感器数据生成。 这是Gazebo的核心,可以独立于图形界面使用。 您可能会在论坛中看到“run headless”这个短语。 这个短语相当于只运行gzserver。 一个示例用例将涉及在不需要用户界面的云计算机上运行gzserver。
gzclient可执行文件运行基于QT的用户界面。 此应用程序提供了一个很好的可视化的模拟,并在各种模拟属性方便的控制。
當然,這兩個可以分別啓動。
gazebo使用的快捷鍵:
Action | Operation | Instruction |
---|---|---|
MODE | ||
Enter Selection mode (default mode) | Esc | press Esc for mode to select models and right-click for context menu |
Enter Rotate mode | r | press "r" for Rotate (model) mode |
Enter Translate mode | t | press "t" for Translate (model) mode |
Enter Scale mode | s | press "s" for Scale (model) mode |
Enter Snap mode | n | press "n" for Snap (model) mode |
MODELS | ||
Delete model | Delete | press Delete when a model is selected to delete from scene |
Copy model | Ctrl + c | press Ctrl + "c" when model is selected to copy |
Paste model | Ctrl + v | press Ctrl + "v" to paste copied model |
MANIPULATING MODELS | ||
Rotate model | r | press "r" for Rotate mode; click model & rotate using markers |
Translate model | t | press "t" for Translate mode; click model & translate using markers |
Scale model | s | press "s" for Scale mode; click model & scale using markers |
Constrain along axis | x/y/z | hold key while manipulating model to constrain movement along that axis |
Snap to 45° when rotating | Ctrl + drag | hold Ctrl while rotating model to rotate in 45° increments |
Snap to grid when translating | Ctrl + drag | hold Ctrl while translating model to snap to grid |
Snap to 1 m when scaling | Ctrl + drag | hold Ctrl while scaling mode to scale in 1 m increments |
Snap when inserting | Ctrl + drag | hold Ctrl while inserting model to enable snap to grid |
Snap models together | n | press "n" for Snap mode; click one link, then a second to snap first link to second |
GUI LAYOUT | ||
Hide toolbars | Ctrl + h | hide/show top toolbar and bottom time panel |
Enter fullscreen | F11 | enter/exit fullscreen |
Action | Operation | Instruction |
---|---|---|
EDITORS | ||
Open Model Editor | Ctrl + m | open Model Editor to construct or edit models |
Open Schematic View (Model Editor) | Ctrl + e | open Schematic View in Model Editor |
Open Building Editor | Ctrl + b | open Building Editor to construct buildings |
Show floor plan (Building Editor) | f | show/hide floor plan in Building Editor 2D View |
Show building features (Building Editor) | g | show/hide building features in Building Editor 2D View |
New canvas (both Editors) | Ctrl + n | create new canvas |
Save model (both Editors) | Ctrl + s | save model for later use |
Save as (both Editors) | Ctrl + Shift + s | save model for later use & give it a name |
Exit (both Editors) | Ctrl + x | exit Editor |
WORLD | ||
Save world | Ctrl + s | press Ctrl + "s" to save world for later use |
Save as | Ctrl + Shift + s | press Ctrl + Shift + "s" to save world for later use & give it a name |
Reset world | Ctrl + r | press Ctrl + "r" to reset world to its original state |
Reset model poses | Ctrl + Shift + r | press Ctrl + Shift + "r" to reset models to their original poses |
DATA | ||
Visualize topics | Ctrl + t | open dialog with list of topics currently advertized |
Log data | Ctrl + d | open dialog to record log files |
MISCELLANEOUS | ||
Quit Gazebo | Ctrl + q | press Ctrl + "q" to quit Gazebo |
Gazebo 鼠標控制
場景視角改變
注意這裏gazebo並不能與ROS通訊,如果需要可以使用下面命令:
rosrun gazebo_ros gazebo
rosrun gazebo_ros gzserver
rosrun gazebo_ros gzclient
rosrun gazebo_ros spawn_model
rosrun gazebo_ros perf
rosrun gazebo_ros debug
啓動後可以看到:
~$ rostopic list
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/rosout
/rosout_agg
具體在之後筆記中再補充。
附件:官網教程。
Run Gazebo
These three steps will run Gazebo with a default world.
Install Gazebo.
Open a terminal. On most Ubuntu systems you can press
CTRL+ALT+t
Start Gazebo by entering the following at the command prompt.
gazebo
Run Gazebo with a robot
Let's simulate something a bit more interesting by loading a world with a pioneer2dx.
Open a terminal and enter the following command.
gazebo worlds/pioneer2dx.world
Where are the worlds located?
You may have noticed the mysterious worlds/pioneer2dx.world
argument in the above command. This instructs gazebo to find the pioneer2dx.world
file, and load it on start.
World files are located in a versioned system directory, for example /usr/share/gazebo-7
on Ubuntu. If you have Gazebo 7.0 installed on Ubuntu, in a terminal type the following to see a complete list of worlds.
ls /usr/share/gazebo-7/worlds
For a Gazebo 7.0 installation on OS X using Homebrew, type the following to see a complete list of worlds.
ls /usr/local/share/gazebo-7/worlds
Client and server separation
The gazebo
command actually runs two different executables for you. Thefirst is called gzserver
, and the second gzclient
.
The gzserver
executable runs the physics update-loop and sensor datageneration. This is the core of Gazebo, and can be used independently of agraphical interface. You may see the phrase "run headless" thrown about inthe forums. This phrase equates to running only the gzserver
. An exampleuse case would involve running gzserver
on a cloud computer where a userinterface is not needed.
The gzclient
executable runs a QT based userinterface. This application provides a nice visualization of simulation, andconvenient controls over various simulation properties.
Try running each of these executables. Open a terminal and run the server:
gzserver
Open another terminal and run the graphical client:
gzclient
At this point you should see the Gazebo user interface. You restart thegzclient
application as often as you want, and even run multipleinterfaces.
This page describes each of the items involved in running a Gazebo simulation.
World Files
The world description file contains all the elements in a simulation, including robots, lights, sensors, and static objects. This file is formatted using SDF (Simulation Description Format), and typically has a .world
extension.
The Gazebo server (gzserver
) reads this file to generate and populate a world.
A number of example worlds are shipped with Gazebo. These worlds are located in <install_path>/share/gazebo-<version>/worlds
.
Model Files
A model file uses the same SDF format as world files, but should only contain a single <model> ... </model>
. The purpose of these files is to facilitate model reuse, and simplify world files. Once a model file is created, it can be included in a world file using the following SDF syntax:
<include>
<uri>model://model_file_name</uri>
</include>
A number of models are provided in the online model database (in previous versions, some example models were shipped with Gazebo). Assuming that you have an Internet connection when running Gazebo, you can insert any model from the database and the necessary content will be downloaded at runtime.
Environment Variables
Gazebo uses a number of environment variables to locate files, and set up communications between the server and clients.
Starting with Gazebo 1.9.0, default values that work for most cases are compiled in. This means you don't need to set any variables.
Here are the variables:
GAZEBO_MODEL_PATH
: colon-separated set of directories where Gazebo will search for models
GAZEBO_RESOURCE_PATH
: colon-separated set of directories where Gazebo will search for other resources such as world and media files.
GAZEBO_MASTER_URI
: URI of the Gazebo master. This specifies the IP and port where the server will be started and tells the clients where to connect to.
GAZEBO_PLUGIN_PATH
: colon-separated set of directories where Gazebo will search for the plugin shared libraries at runtime.
GAZEBO_MODEL_DATABASE_URI
: URI of the online model database where Gazebo will download models from.
These defaults are also included in a shell script:
source <install_path>/share/gazebo/setup.sh
If you want to modify Gazebo's behavior, e.g., by extending the path it searches for models, you should first source the shell script listed above, then modify the variables that it sets.
Gazebo Server
The server is the workhorse of Gazebo. It parses a world description file given on the command line, and then simulates the world using a physics and sensor engine.
The server can be started using the following command. Note that the server does not include any graphics; it's meant to run headless.
gzserver <world_filename>
The <world_filename>
can be:
relative to the current directory,
an absolute path, or
relative to a path component in
GAZEBO_RESOURCE_PATH
.
Worlds that are shipped with Gazebo are located in <install_path>/share/gazebo-<version_number>/worlds
.
For example, to use the empty.world
which is shipped with Gazebo, use the following command
gzserver worlds/empty.world
Graphical Client
The graphical client connects to a running gzserver
and visualizes the elements. This is also a tool which allows you to modify the running simulation.
The graphical client is run using:
gzclient
Server + Graphical Client in one
The gazebo
command combines server and client in one executable. Instead of running gzserver worlds/empty.world
and then gzclient
, you can do this:
gazebo worlds/empty.world
Plugins
Plugins provide a simple and convenient mechanism to interface with Gazebo. Plugins can either be loaded on the command line, or specified in a world/model file (see the SDF format). Plugins specified on the command line are loaded first, then plugins specified in the world/model files are loaded. Most plugins are loaded by the server; however, plugins can also be loaded by the graphical client to facilitate custom GUI generation.
Example of loading a plugin on the command line:
gzserver -s <plugin_filename> <world_file>
The same mechanism is used by the graphical client:
gzclient -g <plugin_filename>
For more information refer to the plugins overview page.
Introduction
Gazebo uses a distributed architecturewith separate libraries for physics simulation,rendering, user interface, communication, and sensor generation.Additionally, gazebo provides two executable programs for running simulations:
a server
gzserver
for simulating the physics, rendering, and sensorsa client
gzclient
that provides a graphical interface tovisualize and interact with the simulation
The client and server communicate using the gazebo communication library.
Communication Between Processes
The communication library currently uses the open sourceGoogle Protobuf
for the message serializationand boost::ASIO
for the transport mechanism.It supports the publish/subscribe communication paradigm.For example, a simulated world publishes body pose updates,and sensor generation and GUI will consume these messages to produce output.
This mechanism allows for introspection of a running simulation,and provides a convenient mechanism to control aspectsof Gazebo.
System
Gazebo Master
This is essentially a topic name server.It provides namelookup, and topic management.A single master can handle multiple physics simulations,sensor generators, and GUIs.
Communication Library
- Dependencies: Protobuf and boost::ASIO
- External API:
- Internal API: None
- Advertised Topics: None
- Subscribed Topics: None
This library is used by almost all subsequent libraries.It acts as the communication and transport mechanism for Gazebo.It currently supports only publish/subscribe,but it is possible to useRPCwith minimal effort.
Physics Library
- Dependencies: Dynamics engine (with internal collision detection)
- External API: Provides a simple and generic interface to physics simulation
- Internal API: Defines a fundamental interface to the physics library for 3rd party dynamic engines.
The physics library provides a simple and generic interface tofundamental simulation components, including rigid bodies,collision shapes, and joints for representing articulationconstraints.This interface has been integrated with four open-sourcephysics engines:
A model described in theSimulation Description Format (SDF)using XML can be loaded by each of these physics engines.This provides access to different algorithm implementationsand simulation features.
Rendering Library
- Dependencies: OGRE
- External API: Allows for loading, initialization, and scene creation
- Internal API: Store metadata for visualization, call the OGRE API for rendering.
The rendering library uses OGRE to provide a simple interfacefor rendering 3D scenes to both the GUI and sensor libraries.It includes lighting, textures, and sky simulation.It is possible to write plugins for the rendering engine.
Sensor Generation
- Dependencies: Rendering Library, Physics Library
- External API: Provide functionality to initialize and run a set of sensors
- Internal API: TBD
The sensor generation library implements all the various types of sensors,listens to world state updates from a physics simulator andproduces output specified by the instantiated sensors.
GUI
- Dependencies: Rendering Library, Qt
- External API: None
- Internal API: None
The GUI library uses Qt to create graphical widgets for users to interact with the simulation.The user may control the flow of time by pausing or changing time step sizevia GUI widgets.The user may also modify the scene by adding, modifying, or removing models.Additionally there are some tools for visualizing andlogging simulated sensor data.
Plugins
The physics, sensor, and rendering libraries support plugins.These plugins provide users with access to the respective librarieswithout using the communication system.
Capture screenshots
To capture a screenshot of the scene displayed in the Gazebo 3D render window, find and click on the camera icon on the toolbar above the render window.
Screenshot save location
The captured image will be saved to ~/.gazebo/pictures with a timestamped filename.
Gazebo機器人仿真學習探索筆記(二)基本使用說明的更多相关文章
- Gazebo機器人仿真學習探索筆記(三)機器人模型
gazebo_models:https://bitbucket.org/osrf/gazebo_models 模型庫下載,可以參考如下命令: ~/Rob_Soft/Gazebo7$ hg clone ...
- Gazebo機器人仿真學習探索筆記(四)模型編輯
模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...
- Gazebo機器人仿真學習探索筆記(一)安裝與使用
Gazebo提供了多平臺的安裝和使用支持,大部分主流的linux,Mac以及Windows,這裏結合ROS以Ubuntu爲例進行介紹. 首先是參考資料:http://gazebosim.org/tut ...
- Gazebo機器人仿真學習探索筆記(七)连接ROS
中文稍后补充,先上官方原版教程.ROS Kinetic 搭配 Gazebo 7 附件----官方教程 Tutorial: ROS integration overview As of Gazebo 1 ...
- Gazebo機器人仿真學習探索筆記(六)工具和实用程序
Gazebo附带了许多工具和实用程序. 这些教程说明了这些可用的工具,以及如何使用它们. 主要有: 1 记录和播放 2 日志过滤 3 应用力/扭矩 4 HDF5数据集 官网介绍通俗具体,非常容易,请参 ...
- Gazebo機器人仿真學習探索筆記(五)環境模型
環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...
- ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)
國防科學技術大學發布了RoboCup中型組仿真平臺,基於ROS和Gazebo設計. 該平臺可以用於多機器人協作研究.參考資料如下: ROS新聞:1 http://www.ros.org/news ...
- ROS常用三維機器人仿真工具Gazebo教程匯總
參考網址: 1. http://gazebosim.org/tutorials 2. http://gazebosim.org/tutorials/browse Gazebo Tutorials Ga ...
- ROS_Kinetic_x 目前已更新的常用機器人資料 rosbridge agvs pioneer_teleop nao TurtleBot
Running Rosbridge Description: This tutorial shows you how to launch a rosbridge server and talk to ...
随机推荐
- [HNOI 2014]道路堵塞
Description A国有N座城市,依次标为1到N.同时,在这N座城市间有M条单向道路,每条道路的长度是一个正整数.现在,A国 交通部指定了一条从城市1到城市N的路径,并且保证这条路径的长度是所有 ...
- ●BZOJ 2007 NOI 2010 海拔
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2007 题解: 网络流.最小割.对偶图 奇妙的题 ~ 种种原因导致了高度要么为 0,要么为 1 ...
- bzoj3622已经没有什么好害怕的了 dp+组合+容斥(?)
3622: 已经没有什么好害怕的了 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1033 Solved: 480[Submit][Status][ ...
- C语言程序设计第二次作业—————顺序结构
(一)改错题 1.输出带框文字:在屏幕上输出以下3行信息. ************* Welcome ************* 源程序 include int mian() { printf(&q ...
- HttpClient 实现 get,post请求
private String sendPost(Map<String,Object> data, String url) { CloseableHttpClient httpClient ...
- Android.mk 详解
Android中增加本地程序或者库,这些程序与其所在路径没有关系,只和它们的Android.mk有关系. Android.mk与普通的makefile略有不同,Android.mk具有统一的写法,主要 ...
- JSON.parse()在火狐中的BUG
//用sessionStorage解决load页面刷新问题 { //sessionStorage.removeItem("loadInfo"); var loadInfo=de ...
- http协议无状态中的 "状态" 到底指的是什么?!
引子: 最近在好好了解http,发现对介绍http的第一句话[http协议是无状态的,无连接的]就无法理解了:无状态的[状态]到底指的是什么?! 找了很多资料不仅没有发现有一针见血正面回答这个问题的, ...
- LINUX逻辑卷(LVM)管理与逻辑卷分区
LINUX之逻辑卷管理与逻辑卷扩展 LVM是逻辑卷管理(Logical Volume Manager)的简称,他是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,和直接使用物理存储在管理上相 ...
- 四种方式实现子goroutine与主线程的同步
如何实现子goroutine与主线程的同步 第一种方式: 这种方式很太死板,就不演示了. 第二种方式:使用 channel机制,每个 goroutine传一个 channel进去然后往里写数据,在再主 ...