文章目录
- 一、gazebo介绍
- 二、应用场景
- 三、gazebo的特点
- 四、gazebo安装并运行
- 五、gazebo界面介绍
- 六、gazebo和ros的接口功能包
- 七、搭建仿真环境步骤【重点!!!】
- 1.gazebo的服务器和客户端
- 2.【环境模型文件】构建环境几何模型【.world/.sdf】
- 3.【机器人模型文件】构建机器人几何模型【.urdf/.xacro】
- 4.【构建/使用环境插件】【.pluin】
- 5.通过launch文件导入相关gazebo需要的东西【gazebo.launch】
- 6.搭建ROS工程,用ROS工程编写源代码
- 7.从gazebo中获取仿真得到的数据
- 八、注意
- 参考资料
- 相关技术专栏推荐
开发管理相关博客专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138258301
开发经验及方法博客专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138256324
嵌入式系统平台硬软件底层开发相关博客专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138229695
机器人导航系统架构及业务模块组合策略的相关博客专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138202210
运动学与动力学基础知识相关博客专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138201806
机器人传感器及感知相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138507260
机器人定位相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138199360
机器人地图建立相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138199063
机器人动作策略规划相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138175048
机器人全局路径规划相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138174918
机器人局部轨迹规划相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138174730
机器人轨迹跟踪控制相关教程及博客请关注专栏:
https://blog.youkuaiyun.com/qq_35635374/article/details/138168913
本文先对gazebo三维物理仿真环境做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章
提示:以下是本篇文章正文内容
一、gazebo介绍
gazebo是三维物理仿真平台,强调的是创建一个虚拟的仿真环境。gazebo不是显示工具,强调的是仿真,它不需要数据,而是创造数据.gazebo本身就是一款机器人的仿真软件,基于ODE的物理引擎,可以模拟机器人以及环境中的很多物理特性%2c不仅可以仿真机器人的运动功能,还可以仿真机器人的传感器数据。而这些数据就可以放到rviz中显示,所以使用gazebo的时候,经常也会和rviz配合使用。另外,【防盗标记–盒子君hzj】rviz配合其他功能包也可以建立一个简单的仿真环境,比如rviz+ArbotiX,可以参考《ROS by Example》
教程见:http://www.ros.org/wiki/simulator_gazebo/Tutorials
.
.
二、应用场景
1.测试机器人算法
2.机器人的设计【防盗标记–盒子君hzj】
3.显示场景下的回溯测试
.
.
三、gazebo的特点
-
动力学仿真:支持多种高性能的物理引擎,例如ODE、Bullet、SimBody、DART等
-
三维可视化环境:支持显示逼真的三维环境,包括光线、纹理、影子。
-
传感器仿真:支持传感器数据的仿真,同时可以仿真传感器噪声。
-
可扩展插件:用户可以定制化开发插件,扩展gazebo的功能,满足个性化的需求。
-
多种机器人模型:官方提供PR2、Pioneer2 DX、TurtleBot等机器人模型,当然也可以使用自己创建的机器人模型。
-
TCP/IP传输:gazebo可以实现远程仿真,后台仿真和前台显示通过网络通信。
【防盗标记–盒子君hzj】 -
云仿真:gazebo仿真可以在Amazon、Softlayer等云端运行,也可以在自己搭建的云服务器上运行。
终端工具:用户可以使用gazebo提供的命令行工具在终端实现仿真控制。
四、gazebo安装并运行
1.安装
与rviz一样,如果已经安装了桌面完整版的ROS,那么可以直接跳过这一步,否则,请使用以下命令进行安装:
$ sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control
2.运行
安装完成后,在终端中使用如下命令启动ROS和gazebo【防盗标记–盒子君hzj】
$ roscore
$ rosrun gazebo_ros gazebo或者打开gazebo:直接在终端输入$ gazebo
.
五、gazebo界面介绍
0 :3D视图区
1 :工具栏
用于选择、移动、旋转和缩放对象的按钮;创建简单形状(例如立方体、球体、圆柱体);和复制/粘贴
2 :模型列表
WORLD:显示当前在场景中的模型,并允许您查看和修改模型参数【防盗标记–盒子君hzj】
INSERT:用于向模拟添加新对象(模型)。要查看模型列表,可能需要单击箭头以展开文件夹。在要插入的模型上单击(并释放),然后在场景中再次单击以添加该模型
LAYERS:组织并显示仿真中可用的不同可视化组(如果有)
3 :模型属性项
4 :时间显示区
.
.
六、gazebo和ros的接口功能包
gazebo仿真的元素搭建都是有对应的msgs的,也有对应的api函数,学会这些自己也可以搭建
(1)gazebo_ros
主要用于gazebo的接口封装、gazebo服务端和客户端的启动、URDF模型的生成【防盗标记–盒子君hzj】
(2)gazebo_msgs
主要是gazebo的话题msg和服务srv的数据结构
(3)gazebo_plugins
主要用于gazebo的通用传感器插件
(4)gazebo_ros_api_plugins\gazebo_ros_path_plugins
这两个gazebo的插件实现接口的封装
官方教程
http://gazebosim.org/tutorials?tut=custom_messages&cat=transport
.
.
七、搭建仿真环境步骤【重点!!!】
1.gazebo的服务器和客户端
(gazebo的底层引擎)
服务器gzserver:用于模拟物理、渲染和传感器的服务器
客户端gzclient:提供图形界面以可视化模拟并与模拟交互的客户端【防盗标记–盒子君hzj】
客户端和服务器使用gazebo通信库进行通信
.
.
2.【环境模型文件】构建环境几何模型【.world/.sdf】
(有关环境配置的都在这里,包括静态对象、灯光等等)
【这个一般都要自己搭建–以.world模型文件的形式】
(1)环境几何模型目录
(1)世界对象
如建筑物和灯光
(2)静态对象
标记为静态的实体(在SDF中具有<Static>true</Static>元素的实体)是仅具有碰撞几何体的对象。所有不打算移动的对象都应标记为静态
(3)动态对象
标记为动态的实体(缺少<static>元素或在SDF中设置为false)是同时具有惯性和碰撞几何体的对象。
.
.
(2)静态简单场景搭建
1. 方法一:直接使用gazebo的GUI收录的模型/自己下载gazebo的模型数据库,然后保存成为.world文件
后续也能通过参数修改
(1)【快速搭建】Gazebo 界面GUI提供了一组简单的形状:长方体、球体和圆柱体
(2)【非常有用】Gazebo的模型数据库model database是所有类型模型的存储库,包括机器人、桌子和建筑物
(3)环境搭建完成后,选择“文件”菜单的“保存”,格式为.world文件,若要重新打开,进入.world文件目录下,输入指令$gazebo XXX.world
官方教程
【创建环境】http://gazebosim.org/tutorials?tut=build_world&cat=build_world
【修改环境】http://gazebosim.org/tutorials?tut=modifying_world&cat=build_world
.
.
2. 方法二:使用Building Editor自己画模型(主要是围墙和房子),然后保存成为.world文件
在gazebo菜单栏中选择Edit –; Building Editor,可以打开Building Editor界面。选择左侧的绘制选项,然后在上侧窗口中使用鼠标绘制,下侧窗口中即可实时显示绘制的仿真环境。【防盗标记–盒子君hzj】
参考官方教程
http://gazebosim.org/tutorials?cat=build_world&tut=building_editor
.
.
3.方法三:在github上搜索开源的环境模型,拿过来直接用【这个还是自己搭建比较好】
github打发~~
.
.
(3)动态复杂场景搭建
查阅gazebo官网提供的教程,一般使用world插件的方法进行导入
.
.
(4)修改已经搭建好的.world文件的方法
去到放置.world文件的目的,运行指令$gazebo XXX.world,修改完成后覆盖保存一下【防盗标记–盒子君hzj】
.
.
注意
(1)仿真环境应该尽可能保持简单,不然出问题很难搞
.
.
3.【机器人模型文件】构建机器人几何模型【.urdf/.xacro】
(有关机器人本体的构造配置都在这里,包括机器人的机械构造、几何链接关系)
【这个能用别人的模型就用别人的模型–以describe功能包模型文件的形式】
(0)机器人/障碍物的几何模型目录结构原理
(1)模型的内涵
能够以编程方式或通过GUI将模型动态加载到仿真中
模型定义了具有动力学、运动学和视觉特性的物理实体
模型可能有一个或多个插件,这些插件会影响模型的行为【防盗标记–盒子君hzj】
(2)模型数据库的目录结构
(1)【插件】Plugins Directory
(2)【几何结构】Meshes Directory
(3)【材料】Material Directory
(4)Database Config
(5)Model Config
(6)Model SDF
(7)Model SDF.ERB
Gazebo依靠模型数据库来存储和维护仿真中可用的模型,模型数据库是社区支持的资源
git clone https://github.com/osrf/gazebo_models
.
.
(1)简单的机器人/障碍物模型构建【使用gazebo的界面GUI的Model Editor实现】
注意这种方法仅仅适合用Model Editor的
(1)机械外形【simple shapes/custom shapes】
方法一:用GUI简单的几何图形搭建一个简单的机器人【防盗标记–盒子君hzj】
方法二:用SVG files画一些机械小零件
官方教程
http://gazebosim.org/tutorials?cat=model_editor_top&tut=extrude_svg
(2)插入传感器【Model Database】
从gazebo的模型数据库中插入现有的传感器模型
第一个列表包含本地计算机上可用的模型
第二个列表包含gazebo官方的模型,在线模型数据库下载它们时,将显示更多信息
(3)添加插件【Model Plugins】
简单的插件可以使用gazebo现有的插件,复杂的插件可以通过编程的方法创建自己的插件【防盗标记–盒子君hzj】
(4)最后通过GUI保存模型
参考官方教程
http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b3
.
.
(2)复杂的机器人模型构建【自己借助工具或者编程实现】
1)方法一:通过简单的URDF/xacro文件编程实现
1、名称
Unified Robot Description Format 统一机器人描述格式
2、优点
1、可以解析URDF文件中使用XML格式描述的机器人模型【防盗标记–盒子君hzj】
2、ROS同时也提供URDF文件的C++解析器
3、机器人结构分解
连杆link
格式:
<link name="<link name">
<inertial>......</inertial>
<visual>......</visual>
<colliion>......</colliion>
<link>
参数:
<inertial>:描述link的惯性参数:惯性矩阵
<visual>:描述link部分的外观参数:外观、尺寸、颜色
<colliion>:描述link的碰撞属性:碰撞参数
关节join
格式:
<joint name="joint name"type="joint type">
<parent link="parent link"/>
<child link="child link"/>
<calibration......./>
<dynamics....../>
<limit....../>
<....../>
</joint>
参数
<parent link>:连接关节的前一个连杆,必须要的
<child link>:连接关节的后一个连杆,必须要的
<calibration>:关节的参考位置,用来校准绝对的关节位置的
<dynamics>:描述关节的物理属性,例如阻尼值、静摩擦力,经常在动力学仿真上用到【防盗标记–盒子君hzj】
<limit>:描述关节运动的极限值,包括上下限位置、速度限制、力矩限制等
<mimic>:描述该关节和已有关节的关系
<safety _controller>:描述安全控制器参数
关节类型
1、(重要)continuous:旋转关节,可以围绕单轴做无限旋转
2、(重要)revolute:旋转关节,进可以围绕单轴做有限角度旋转
3、prismastic:平滑关节,可以沿着某一轴线移动,带有位置限制
等等
4、建立仿真模型urdf实操(让rviz模型可视化)【涉及launch文件】
2)方法二:专有的场景零件,使用SDF文件自己编程实现
(1)创建环境外形模型meshes
方法一:在Google 的 3D 仓库里面进行寻找
链接为:https://3dwarehouse.sketchup.com/
方法二:使用三维建模软件构建环境,并导入gazebo 【防盗标记–盒子君hzj】
Blender、Sketchup、soildworks
(2)编写.sdf环境文件
官方教程
http://gazebosim.org/tutorials?tut=build_model&cat=build_robot
.
.
3)方法三:通过soildworks工具导入
把设计文件转化成urdf文件再导入到机器人模型【防盗标记–盒子君hzj】
.
.
4)方法四:通过github上开源的下载,改一改使用【我常用这种方法–偷鸡】
注意
(1)创建一个机器人,放在gazebo的环境(URDF\Xacro,可以自己创建也可以GitHub)[构建一个模型很麻烦,因为不精准,网上找就行]
.
.
(3)两个xacro模型连接到同一个总的xacro模型的方法
【用于连接同一个机器人的父模型(躯干)与子模型(手臂)】
【用于连接机器人模型和传感器模型】
注意
(1)创建一个机器人,放在gazebo的环境(URDF\Xacro,可以自己创建也可以GitHub)[构建一个模型很麻烦,因为不精准,网上找就行]
.
.
.
4.【构建/使用环境插件】【.pluin】
(实现传感器数据处理、控制等复杂功能,包括六种类型的插件)
【嵌入到系统中使用,不能单独使用】【防盗标记–盒子君hzj】
【这个能用别人的插件就用别人的插件–以插件的形式】
(1)构建自己的插件的方法
1)从零构建一个插件的泛型方法
官方教程1
http://gazebosim.org/tutorials?tut=plugins_hello_world&cat=write_plugin
官方教程2
http://gazebosim.org/tutorials?tut=ros_plugins&cat=connect_ros
.
.
.
2)gazebo插件的类型、构建+编译+使用方法
目前有6种类型的插件,每个插件类型都由Gazebo的不同组件管理
(1)【环境场景插件】World
World插件连接到World,控制World属性,例如物理引擎、环境照明等
构建的官方教程http://gazebosim.org/tutorials?tut=plugins_world&cat=write_plugin
(2)【机器人模型插件–控制】Model
Model插件连接到Gazebo中的特定机器人模型并控制该模型,控制关节和模型的状态
构建的官方教程http://gazebosim.org/tutorials?tut=plugins_model&cat=write_plugin
(3)【传感器插件】Sensor
Sensor插件到一个特定的传感器,获取传感器信息并控制传感器属性【防盗标记–盒子君hzj】
在后面有详细说
(4)【系统插件】System
System插件在命令行中指定,并在Gazebo启动时首先加载。这个插件让用户可以控制启动过程
官方教程http://gazebosim.org/tutorials?tut=system_plugin&cat=write_plugin
(5)【可视化插件】Visual
GUI覆盖视为位于渲染窗口顶部的透明2D层,可视化参数
官方教程http://gazebosim.org/tutorials?tut=gui_overlay&cat=user_input
(6)【界面插件】GUI
.
.
.
3)从零构建一个32线的激光雷达传感器插件
【构建好了插件放在哪里都能用了】【防盗标记–盒子君hzj】
参考官方教程
http://gazebosim.org/tutorials?cat=guided_i&tut=guided_i1
.
.
.
4)测试插件的的基本方法(以激光雷达为例)
(1)Start roscore
source /opt/ros/<DISTRO>/setup.bash
roscore
(2)In a new terminal, start Gazebo
cd ~/velodyne_plugin/build
source /opt/ros/<DISTRO>/setup.bash
gazebo ../velodyne.world
(3)In a new terminal, use rostopic to send a velocity message.
source /opt/ros/<DISTRO>/setup.bash
rostopic pub /my_velodyne/vel_cmd std_msgs/Float32 1.0
.
.
.
(2)使用别人构建的插件的方法【重点】
0)主要原理与步骤
(1)第一步:在gazebo中可以通过插入一些插件,来仿真机器人的传感器、执行驱动器的特性,这些插件通过元素中的标签描述
(2)第二步:在传感器的urdf/xacro.sdf文件中,通过使用标签先把传感器模型(带插件)包含进来机器人子模型中,再通过标签连接不同模型
(3)第三步:(大型模型才会这么做,选做)先用xacro文件为传感器创建一个传感器模型和配置,再把传感器的xacro模型与配置通过二次标签嵌入到机器人的xacro文件【防盗标记–盒子君hzj】
官方教程
http://gazebosim.org/tutorials?tut=add_laser&cat=build_robot
.
.
.
1)使用机器人本体插件
(1)【Model插件】小车运动控制插件类
(1)差速底盘驱动插件
很多机器人本体都采用差速驱动的方式,gazebo提供差速机器人的仿真插件,可以直接将下边的代码放到URDF文件中,修改相应的参数,指定运动控制需要订阅的主题,让机器人在gazebo中动起来
<gazebo>
<plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">
<alwaysOn>true</alwaysOn>
<updateRate>${update_rate}</updateRate>
<leftJoint>base_link_right_wheel_joint</leftJoint>
<rightJoint>base_link_left_wheel_joint</rightJoint>
<wheelSeparation>0.5380</wheelSeparation>
<wheelDiameter>0.2410</wheelDiameter>
<torque>20</torque>
<commandTopic>cmd_vel</commandTopic>
<odometryTopic>odom</odometryTopic>
<odometryFrame>odom</odometryFrame>
<robotBaseFrame>base_footprint</robotBaseFrame>
</plugin>
</gazebo>
(2)在关节Jink和连杆link中设置速度(PID)插件
在关节Jink和连杆link中设置速度【防盗标记–盒子君hzj】
官方教程http://gazebosim.org/tutorials?tut=set_velocity&cat=
(3)接触传感器【Contact Sensor】
接触传感器检测两个物体之间的碰撞,并报告与接触相关的力的位置
官方教程http://gazebosim.org/tutorials?tut=contact_sensor&cat=sensors
(4)关节的力与力矩传感器插件【Force/Torque Sensor】
在关节上使用力/扭矩传感器。该传感器将力和扭矩读数发布到主题。
官方教程http://gazebosim.org/tutorials?tut=force_torque_sensor&cat=sensors
(5)通用控制接口ros_control
控制通用接口
官方教程http://gazebosim.org/tutorials?tut=ros_control&cat=connect_ros
(6)重力PID补偿插件
在Gazebo中使用模型插件进行重力补偿,以及如何补充内置PID关节控制器
官方教程http://gazebosim.org/tutorials?tut=gravity_compensation&cat=plugins
(7)【model插件】JointEvent事件触发插件
当关节的位置(或速度或施加的力)进入或离开指定范围时,JointEvent将在sim_事件主题上发送消息【防盗标记–盒子君hzj】
官方教程http://gazebosim.org/tutorials?tut=joint_events&cat=
.
.
.
(2)【Sensor插件】小车传感器类
【xacro文件之间可以进行嵌套】
官方教程http://gazebosim.org/tutorials?tut=ros_gzplugins&cat=connect_ros
1、仿真二维雷达数据
因为带示例在我的知识库,后续转移过来~
.
2、仿真摄像头数据
因为带示例在我的知识库,后续转移过来~【防盗标记–盒子君hzj】
.
3、仿真三维激光雷达数据
因为带示例在我的知识库,后续转移过来~
.
4、仿真RealSense双目相机数据
因为带示例在我的知识库,后续转移过来~
.
5、深度相机集成插件
因为带示例在我的知识库,后续转移过来~
.
.
.
2)使用world环境插件
(1)【world插件】动态的人行走的场景(actor)
【作为动态障碍物】
博客教程http://gazebosim.org/tutorials?tut=actor#Scriptedtrajectories
官方教程http://gazebosim.org/tutorials?tut=actor&cat=build_robot
.
(2)为世界坐标系下的任意link指定随机的运动速度
【Random Velocity Plugin】【作为动态障碍物】【防盗标记–盒子君hzj】
为世界上的link指定随机速度,可以设置x、y和z速度分量的最大和最小允许值以及速度幅值。此外,还可以设置时间段,在此时间段之后,速度可以自行更改。设置“速度幅值”后,将自行设置方向
官方教程http://gazebosim.org/tutorials?tut=plugins_random_velocity&cat=
.
(3)获取机器人在gazebo的定位信息
以插件形式获取:可以在机器人的urdf模型中加入插件
<!-- Fake localization plugin -->
<plugin name="ground_truth_odometry" filename="libgazebo_ros_p3d.so">
<alwaysOn>true</alwaysOn>
<updateRate>100.0</updateRate>
<bodyName>base_link</bodyName>
<topicName>base_pose_ground_truth</topicName>
<gaussianNoise>0.01</gaussianNoise>
<frameName>map</frameName>-->
<!-- initialize odometry for fake localization-->
<xyzOffsets>0 0 0</xyzOffsets>
<rpyOffsets>0 0 0</rpyOffsets>
</plugin>
以订阅者形式获取
订阅话题/gazebo/model_states,找到对应模型的名称
【防盗标记–盒子君hzj】
void _modelStatesCallback(const gazebo_msgs::ModelStatesConstPtr &msg)
{
int modelCount = msg->name.size();
for(int modelInd = 0; modelInd < modelCount; ++modelInd)
{
if(msg->name[modelInd] == "turtlebot3")
{
_current_pose.pose = msg->pose[modelInd];
_current_velocity.twist = msg->twist[modelInd];
break;
}
}
}
.
(4)基于事件触发
(1)【world插件】Occupied Event
每当模型占据指定的三维区域时,OccuppiedEvent将发送有关主题的消息【防盗标记–盒子君hzj】
官方教程
.http://gazebosim.org/tutorials?tut=occupiedevent&cat=plugins
(2)【world插件】环境触发事件的动作(Trigger an Action)
官方教程
http://gazebosim.org/tutorials?tut=contain_plugin&cat=plugins
.
.
3)【可视化插件】Visual
作用
GUI覆盖视为位于渲染窗口顶部的透明2D层,可视化参数
官方教程
http://gazebosim.org/tutorials?tut=gui_overlay&cat=user_input
注意
ROS的gazebo的仿真插件需要什么功能插件可以去官网里面找,或者wiki【防盗标记–盒子君hzj】
.
.
.
5.通过launch文件导入相关gazebo需要的东西【gazebo.launch】
(有关启动gazebo组件的都在这里)
【这个一般是是自己实现的–gazabo的launch】
一级的demo_run.launch
【这个launch是启动整个工程的】
其他模块的启动…
<!---Gazebo---->
<include file="$(gazebo所在的功能包)/.../launch/gazebo.launch">
.
.
二级的gazebo.launch
【这个launch 是专门处理gazebo的】
(1)使用roslaunch命令打开环境World Models仿真环境
1)命令(不带参数):roslaunch gazebo.launch
2)命令(带参数):roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false recording:=false debug:=true verbose:=true gui_required:=true
(2)编写gazebo.launch的原理
(1)【几何环境加载】world文件加载的原理
先创建一个空的empty gazebo环境,再通过world_name加载.world文件的路径进去【防盗标记–盒子君hzj】
(2)【机器人模型文件加载】xacro文件加载原理
机器人模型一般是再网上下载下来的,已经是一个带有传感器和控制插件的功能包了,像再launch上启动一个功能包这样启动它就行了
(3)【插件文件的加载】
插件文件一般都嵌入到了world几何环境和model机器人模型中了,具体怎么操作看插件的使用章节,
带有模型的插件是不会独立使用的,一些独立的系统的可视化的插件可以,
如rqt_steering插件(rqt工具包有比较多的独立插件)、robot_state_publisher(用于发布TF)
(4)......
.
.
(3)gazebo.launch通常启动类型的步骤
启动gazebo环境也是启动一个总的launch,进而启动一堆仿真相关的机械外形、控制、传感器数据、环境数据、插件数据、坐标转换的东西!
(1)【环境几何模型】设置gazebo的参数(最常用时这个了)
不设置的话,使用默认参数
paused 在暂停状态下启动Gazebo(默认为false)
use_sim_time 告知ROS节点请求时间以获取通过ROS主题/时钟发布的Gazebo发布的模拟时间(默认为true)
gui 启动Gazebo的用户界面窗口(默认为true)
gui_required 当gzclient(用户界面窗口)退出时终止启动脚本(默认为false)
headless 启用gazebo状态日志记录
debug Start gzserver (Gazebo Server) in debug mode using gdb (default false)
verbose 使用--verbose运行gzserver和gzclient,向终端打印错误和警告(默认为false)
server_required 当gzserver(Gazebo服务器)退出时终止启动脚本(默认为false)
world_name 这个就是我们建立.world文件的目录
(2)【机器人模型】在gazebo中加载机器人模型xacro(robot_description)
(3)【插件】运行robot_state_publisher节点,用于发布TF
(4)【插件】加载小车控制器rqt_steering
(5)【插件】启动rqt steering GUI【插件】
…
官方教程
http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros
6.搭建ROS工程,用ROS工程编写源代码
【系统开发基础储备】ROS开发步骤(第二篇)
和上面博客的步骤一致,转战一下~
.
.
7.从gazebo中获取仿真得到的数据
【以.rviz、插件、订阅者的形式】
(获取数据之前先实现自己的源码)
(1)构建rviz可视化配置文件【.rviz】
(有关数据可视化的都在rviz,有关仿真环境的都要在gazebo)【防盗标记–盒子君hzj】
在rviz中配置好,直接导出文件就好,仿真数据的获取都是用插件的形式得到的,无论是控制插件、传感器插件、环境插件
注意
一般在gazebbo中看不出来具体效果,可以把gazebo的界面关了,太耗算力
rviz可视化gazebo的模型和场景的数据,都是通过参数服务器来的,而不是通过接收话题来的
(2)通过gazebo的GUI,显示发布出去的话题
(3)gazebo的屏幕截图
.
.
.
八、注意
gazebo的坐标系使用的是右手坐标系
gazebo常出现的问题
频繁开启关闭gazrbo仿真环境会报错误,因为gazebo在没有完全退出的时候就再次开启(垃圾电脑更是这样)【防盗标记–盒子君hzj】
解决办法
$killall gzserver
$killall gzclient
参考资料
(1)gazebo的教程:http://www.gazebosim.org/tutorials
(2)自己需要什么功能可以去gazebo的官网上去搜索,按照wiki和Tutorials的教程部署下来
(3)具体参考的工程,或者要偷源码可以直接运行官方教程,部署下来,分析他怎么实现的
相关技术专栏推荐
(1)计算技术&硬软件开发工程篇
https://blog.youkuaiyun.com/qq_35635374/category_12821115.html
(2)计算机技术基础&开发经验
https://blog.youkuaiyun.com/qq_35635374/category_11471204.html
(3)嵌入式系统硬软件开发
https://blog.youkuaiyun.com/qq_35635374/category_11464543.html
(4)开发技术管理
https://blog.youkuaiyun.com/qq_35635374/category_12344669.html
(5)机器人/自动驾驶导航算法篇
https://blog.youkuaiyun.com/qq_35635374/category_12825966.html
(6)导航系统架构及业务模块组合策略
https://blog.youkuaiyun.com/qq_35635374/category_11464757.html
(7)运动学与动力学基础知识
https://blog.youkuaiyun.com/qq_35635374/category_11471199.html
(8)多传感器标定、数据融合与状态估计
https://blog.youkuaiyun.com/qq_35635374/category_11464733.html
(9)定位、地图建立、地图管理SLAM合集
https://blog.youkuaiyun.com/qq_35635374/category_12805256.html
(10)定位location
https://blog.youkuaiyun.com/qq_35635374/category_11464501.html
(11)地图mapping
https://blog.youkuaiyun.com/qq_35635374/category_11464370.html
(12)机器人决策规划控制合集
https://blog.youkuaiyun.com/qq_35635374/category_12804215.html
(13)任务决策规划mission_planner
https://blog.youkuaiyun.com/qq_35635374/category_12344770.html
(14)动作策略规划motion_planner
https://blog.youkuaiyun.com/qq_35635374/category_12176372.html
(15)全局路线规划global_planner
https://blog.youkuaiyun.com/qq_35635374/category_12176370.html
(16)局部路径规划local_planner
https://blog.youkuaiyun.com/qq_35635374/category_12176374.html
(17)轨迹跟踪控制模块Path_tracking
https://blog.youkuaiyun.com/qq_35635374/category_12176376.html
(18)机器人实战篇
https://blog.youkuaiyun.com/qq_35635374/category_12821111.html
(19)足式机器人&机械臂控制合集
https://blog.youkuaiyun.com/qq_35635374/category_11523332.html
(20)自动驾驶&无人机导航合集
https://blog.youkuaiyun.com/qq_35635374/category_12804317.html
(21)四足机器人MIT Cheetah mini
https://blog.youkuaiyun.com/qq_35635374/category_11523325.html
(22)自动驾驶Autoware
https://blog.youkuaiyun.com/qq_35635374/category_11523328.html
(23)无人机fast_planner
https://blog.youkuaiyun.com/qq_35635374/category_11523335.html