-
2021-10-11 15:30:30
.yaml参数文件的编写和使用_Just do it的博客-CSDN博客
Gazebo常用操作_qqliuzhitong的博客-CSDN博客
Simulation in Gazebo | Details | Hackaday.io
https://github.com/lnotspotl/notspot_sim_py
gazebo入门_Gazebo仿真控制中,有哪些你不知道的秘密?_weixin_39636540的博客-CSDN博客
【ROS-Gazebo】平衡与舞蹈-pigot四足机器人姿态控制仿真 - 知乎
【ROS】pigot四足机器人控制仿真综合(一)——倒地恢复 - 知乎
更多相关内容 -
gazebo教程(八)场景建模
2021-05-21 08:25:44gazebo教程(八)场景建模 我是。 发布时间 2021.01.03阅读数 1344 评论数 1 场景建模 一、介绍 1、打开场景编辑器 UI介绍 二、导入平面图 三、添加特征 墙壁 添加门窗 添加楼梯 添加层 ...转载自:https://www.guyuehome.com/22247
gazebo教程(八)场景建模
发布时间 2021.01.03阅读数 1344 评论数 1
场景建模
一、介绍 1、打开场景编辑器 UI介绍 二、导入平面图 三、添加特征
-
- 墙壁
-
- 添加门窗
-
- 添加楼梯
-
- 添加层
-
- 编辑建筑物
-
- 变更层数
-
- 编辑建筑物
-
- 编辑墙体
-
- 编辑门窗
-
- 添加颜色和纹理
- 保存场景
- 退出
一、介绍
在gazebo中,我们不仅可以对机器人建模,还可以对场景建模(即机器人所在环境),这一节就给大家介绍如何在gazebo中创建一栋房子,作为机器人的活动空间。
1、打开场景编辑器
启动gazebo,依次点击
Edit -> Building Editor
, 或者使用快捷键Ctrl+B
打开编辑器。界面如下:UI介绍
该编辑器由以下3个区域组成:
- 调色板,在这里你可以选择你的建筑特征和材料。
- 2D视图,你可以导入楼层平面图,编辑器会根据平面图自动插入插入墙壁,门窗和楼梯。
- 3D视图,在这里你可以看到你的建筑物的预览。您还可以在其中为建筑物的不同部分分配颜色和纹理。
二、导入平面图
您可以从零开始创建建筑场景,也可以使用现有图像作为模板进行追溯。该图像可以是例如建筑物的2D激光扫描。 这里给出示例平面图:
然后按以下步骤操作: 1、点击调色板下方的
Import
按钮。然后将会弹出Import Image
对话框。 2、选择平面图所在路径,然后单击Next
。3、为确保在图像上绘制的墙以正确的比例显示,必须以像素/米(
px/m
)设置图像的分辨率。如果知道分辨率,则可以直接在对话框中输入分辨率,然后单击Ok
。在此示例中,我们不知道分辨率,但是我们知道图像中两点之间的真实距离(例如7.5 m的顶壁),因此我们可以使用它来计算分辨率:- 点击墙的一端,然后在另一端释放。当您移动鼠标时,将显示橙色线,如下所示。
- 现在,在对话框中输入以米为单位的距离(在这种情况下为7.5 m)。分辨率将根据您绘制的线条自动为您计算。
- 最后,单击
Ok
。
三、添加特征
墙壁
我们接下来会根据平面图绘制所有的墙壁。值得注意的是,稍后我们会将门窗附加到墙壁上,因此现阶段可以直接忽略门窗位置。如果你觉得墙壁不完美,不用担心,稍后我们将对其进行更加细致的编辑。
- 在调色板上,单击
Wall
。 - 在2D视图上,在任意墙角单击开始绘制墙体。随着鼠标的移动,墙的长度也会跟着显示。
- 再次单击可以结束当前墙体的绘制,转而进入相邻墙体的绘制,如果想要取消绘制可以
esc
。(这里跟cad sw的绘制直线有点类似)。
默认情况下,墙体会以15°和0.25 m递增,并且还会捕捉到现有墙的端点。如果不希望自动补抓,可在绘图时按住
Shift
。添加门窗
注意:目前,门窗是墙上的简单孔。 让我们在平面图上所示的位置插入门窗。
- 在面板上,单击
Window
或Door
。 - 在2D视图中移动鼠标时,要插入的特征会随之移动,在3D视图中其对应物也会随之移动。
- 单击所需位置以放置特征。
提示:将鼠标悬停在门上时,门窗会自动与墙壁对齐。移动时会显示到墙端的距离。
提示:在墙壁上添加了相关特征之后,可能很难看到其在平面图中的位置。为了简化操作,您可以在2D视图的顶部选择查看或隐藏当前级别的平面图或特征。您还可以使用热键来切换可见性,
F
对应floor和G
对应特征。添加楼梯
尽管在这个平面图上没有显示楼梯,但是我们还是要插入一个楼梯。
- 在调色面板上,单击
Stairs
。 - 在2D视图中移动鼠标时,要插入的楼梯也随之移动,在3D视图中也是如此。
- 为您的楼梯选择一个位置,然后单击放置它。
添加层
我们已经完成了第1层的工作。接下来我们要在建筑物中添加另一个层,使得我们的楼梯能够连接到某个地方。
- 在2D视图的顶部,单击+添加一个级别。或者,右键单击2D视图,然后选择
Add a level
- 添加新层后,将自动插入地板。如果下面的台阶上有楼梯,则在保存建筑物时,将从地面上挖一个台阶。
注意:目前,所有楼层均为矩形。 提示:在添加层之前,请确保要在当前层上建立墙体。 提示:目前,建立新的层时是复制上一层的所有墙体,并且使用默认材质。没有其他特征被复制。您可以手动删除不需要的墙。
编辑建筑物
注意:编辑建筑物时要小心;编辑器目前无法撤消您的操作。 提示:所有度量单位均为米。
由于添加一层,因此在2D视图中我们看到的同样是新一层的平面图。您可以通过从2D视图顶部的下拉列表中选择层2返回到层1。
提示:在2D视图中,当前选择的层在3D视图中将显示为半透明,而其下面的所有层将显示为不透明。上面的层将被隐藏,但是依旧存在。
如果有需要,我们还可以编辑一些相关层的配置。
- 双击2D视图以打开带有层配置选项的检查器。或者,右键单击并选择
Open Level Inspector
您可能添加了不需要的级别,或者在当前层中弄乱了,并希望重新绘制,可以
- 按2D视图顶部的
-
按钮删除当前层,或右键单击并选择Delete Level
。
编辑墙体
我们之前画了很多墙,但是也许它们并没有完全按照我们想要的方式绘制。我们有以下方式可以进行修改: 1、在2D视图中,单击要编辑的墙。
- 通过将墙拖动到新位置来平移墙。
- 通过拖动墙的端点之一来调整墙的大小或旋转墙。
2、在2D视图中双击墙以打开带有配置选项的检查器。或者,右键单击并选择
Open Wall Inspector
。编辑你想要修改的内容,然后按Apply
预览更改。 3、选中你想要删除的墙体,按下键盘上的Delete
键,或在2D视图中右键单击墙体,选择Delete
。编辑门窗
现在让我们一起编辑门窗。正如我们编辑墙体那样,也可以通过以下几种不同的方式更精确地控制门窗属性。 1、在2D视图中,单击要编辑的特征。
- 通过将特征拖动到新位置来对其进行变换。
- 拖动特征的旋转手柄来旋转特征。当前,只要将它们附着在墙上,它们的方向就不会改变。
- 通过拖动端点之一来调整特征的宽度。
2、双击2D视图中的特征以打开带有配置选项的检查器。或者,右键单击并选择
Open Window/Door Inspector
3、选中想要删除的特征,按下键盘的Delete
键,或在2D视图中右键单击并选择Delete
。编辑楼梯同样如此,这里就不细说了
添加颜色和纹理
现在,一切都已正确放置并确定大小,您可以为墙壁,地板和楼梯分配颜色和纹理。请记住,门窗只是墙上的孔,因此不能有任何材料。 有两种方法可以为建筑物添加颜色和纹理:
- 您可以从
Wall Inspector
、Stairs Inspector
和Level Inspector
分别为墙壁,楼梯和地板添加颜色和纹理。只需打开检查器,选择材料,然后按Apply
- 可以从调色板中选择颜色和纹理,然后通过在3D视图中单击将其分配给建筑物中的项目。
a、单击调色板中的颜色或纹理。 b、在3D视图中移动鼠标时,悬停的功能将突出显示,显示所选材质的预览。 c、单击突出显示的功能会为其分配选定的材料。您可以根据需要单击任意数量的功能。 d、完成所选材质的操作后,右键单击3D视图,或在任何要素外部单击以退出材质模式。
凉亭5.1的新增功能:要选择自定义颜色,请在More调色板上单击。将打开一个对话框,您可以在其中指定自定义颜色。
保存场景
保存之前,在选用板上给您的建筑物起个名字。
在顶部菜单上,选择
File
,然后Save As
(或按Ctrl+S
)。将出现一个对话框,您可以在其中选择模型保存的位置。退出
注意:一旦退出场景编辑器后,场景就不能够再次编辑了。 完成创建建筑物并保存之后,请转到
File
,然后单击Exit Building Editor
,您的建筑物将显示在主窗口中。您可以在Insert
标签中找到该场景。
ROSgazebo建模与仿真场景建模
原创文章作者:我是。。如若转载,请注明出处:古月居 https://www.guyuehome.com/22247
-
-
Gazebo教程: 机器人模型结构和信息要求
2022-05-11 11:22:48本教程描述了 Gazebo 的模型目录结构,以及模型目录中的必要文件。 Gazebo 中的模型定义了具有动态、运动学和视觉属性的物理实体。 此外,一个模型可能有一个或多个插件,这些插件会影响模型的行为。 一个模型可以...一、说明:
首先,Gazebo是个仿真软件,不是模型软件,但Gazebo需要依赖于许多模型;
Gazebo 能够以编程方式或通过 GUI 将模型动态加载到仿真中。 在您下载或创建模型之后,模型就存在于您的计算机上。 本教程描述了 Gazebo 的模型目录结构,以及模型目录中的必要文件。
Gazebo 中的模型定义了具有动态、运动学和视觉属性的物理实体。 此外,一个模型可能有一个或多个插件,这些插件会影响模型的行为。 一个模型可以代表任何东西,从简单的形状到复杂的机器人; 连地面都是模型。
Gazebo 依靠数据库来存储和维护可在模拟中使用的模型。 模型数据库是社区支持的资源,因此请上传和维护您创建和使用的模型。
二、模型数据库存储库
模型数据库是在此处找到的 GitHub 存储库。您可以使用以下方法克隆存储库:git clone https://github.com/osrf/gazebo_models
下文专门介绍 gazebo_models中的专属文件。
三、模型数据库结构
模型数据库必须遵循特定的目录和文件结构。模型数据库的根目录包含每个模型的一个目录,以及一个包含模型数据库信息的 database.config 文件。每个模型目录还有一个 model.config 文件,其中包含有关模型的元数据。模型目录还包含模型的 SDF 以及任何材料、网格和插件。结构如下(在此示例中,数据库只有一个模型,称为 model_1):
数据库
- database.config :关于数据库的元数据。现在从 CMakeLists.txt 自动填充
- model_1 :model_1 的目录
- model.config : 关于 model_1 的元数据
- model.sdf : 模型的 SDF 描述
- model.sdf.erb : Ruby 嵌入式 SDF 模型描述
- 网格:所有 COLLADA 和 STL 文件的目录
- material : 一个应该只包含纹理和脚本子目录的目录
- textures :图像文件(jpg、png 等)的目录。
- scripts : OGRE 材料脚本的目录
- plugins:插件源和头文件的目录
插件目录
这是一个可选目录,其中包含模型的所有插件。网格目录
这是一个可选目录,其中包含模型的所有 COLLADA 和/或 STL 文件。材料目录
这是一个可选目录,其中包含模型的所有纹理、图像和 OGRE 脚本。 纹理图像必须放在textures 子目录中,而OGRE 脚本文件必须放在scripts 目录中。四、数据库配置
这是模型数据库根目录中的 database.config 文件。 该文件包含模型的许可证信息、数据库的名称和所有有效模型的列表。注意:只有在线存储库需要 database.config 文件。 本地计算机上的模型目录不需要 database.config 文件。
这个 database.config 的格式是:
<?xml version='1.0'?> <database> <name>name_of_this_database</name> <license>Creative Commons Attribution 3.0 Unported</license> <models> <uri>file://model_directory</uri> </models> </database>
<名称> : 数据库的名称。 这由 GUI 和其他工具使用。
<许可证> : 数据库中模型的许可证。 我们强烈推荐 Creative Commons Attribution 3.0 Unported 许可证。
<型号> : 数据库中所有模型 URI 的列表。
<uri> : 模型的 URI,这应该是 file://model_directory_name
五、模型配置
每个模型都必须在模型的根目录中有一个 model.config 文件,其中包含有关模型的元信息。这个model.config的格式是:
<?xml version="1.0"?> <model> <name>My Model Name</name> <version>1.0</version> <sdf version='1.5'>model.sdf</sdf> <author> <name>My name</name> <email>name@email.address</email> </author> <description> A description of the model </description> </model>
<电子邮件> 必需, 作者的电子邮件地址。
<描述> 必填, 模型描述应包括:
模型是什么(例如,机器人、桌子、杯子), 插件的作用(模型的功能)
<依赖> 可选,此模型的所有依赖项。 这通常是其他模型。<型号> 可选,
<uri> 必需 , 模型依赖的 URI。
<版本> 必需 ,模型的版本。
-
gazebo教程---使用gazebo插件
2021-08-14 23:12:39-- We resume the logic in empty_world.launch, changing only the name of the world to be launched --> "$(find gazebo_ros)/launch/empty_world.launch"> "world_name" value="$(find rrbot_gazebo)/worlds/...一. 添加传感器插件
(1)在rrbot.xacro中添加< link/>和< joint/>,内容如下:<joint name="camera_joint" type="fixed"> <axis xyz="0 1 0" /> <origin xyz="${camera_link} 0 ${height3 - axel_offset*2}" rpy="0 0 0"/> <parent link="link3"/> <child link="camera_link"/> </joint> <!-- Camera --> <link name="camera_link"> <collision> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="${camera_link} ${camera_link} ${camera_link}"/> </geometry> </collision> <visual> <origin xyz="0 0 0" rpy="0 0 0"/> <geometry> <box size="${camera_link} ${camera_link} ${camera_link}"/> </geometry> <material name="red"/> </visual> <inertial> <mass value="1e-5" /> <origin xyz="0 0 0" rpy="0 0 0"/> <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" /> </inertial> </link>
上面是用于rviz加载
(2)在rrbot.gazebo中添加如下内容:<!-- camera --> <gazebo reference="camera_link"> <sensor type="camera" name="camera1"> <update_rate>30.0</update_rate> <camera name="head"> <horizontal_fov>1.3962634</horizontal_fov> <image> <width>800</width> <height>800</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip> <noise> <type>gaussian</type> <!-- Noise is sampled independently per pixel on each frame. That pixel's noise value is added to each of its color channels, which at that point lie in the range [0,1]. --> <mean>0.0</mean> <stddev>0.007</stddev> </noise> </camera> <plugin name="camera_controller" filename="libgazebo_ros_camera.so"> <alwaysOn>true</alwaysOn> <updateRate>0.0</updateRate> <cameraName>rrbot/camera1</cameraName> <imageTopicName>image_raw</imageTopicName> <cameraInfoTopicName>camera_info</cameraInfoTopicName> <frameName>camera_link_optical</frameName> <!-- setting hackBaseline to anything but 0.0 will cause a misalignment between the gazebo sensor image and the frame it is supposed to be attached to --> <hackBaseline>0.0</hackBaseline> <distortionK1>0.0</distortionK1> <distortionK2>0.0</distortionK2> <distortionK3>0.0</distortionK3> <distortionT1>0.0</distortionT1> <distortionT2>0.0</distortionT2> <CxPrime>0</CxPrime> <Cx>0.0</Cx> <Cy>0.0</Cy> <focalLength>0.0</focalLength> </plugin> </sensor> </gazebo>
<gazebo reference="camera_link">
首先这个link的名字必须与我们添加到xacro文件中的canera的link匹配。
<sensor type="camera" name="camera1">
其次传感器的名字必须是唯一的,除了在gazebo插件中,这个名字不能用在其它地方。
<update_rate>30.0</update_rate>
这是在仿真期间传感器尝试刷新的最大频率,但是当物理仿真速度快于传感器生成的速度时,它会低于这个目标值。
<horizontal_fov>1.3962634</horizontal_fov> <image> <width>800</width> <height>800</height> <format>R8G8B8</format> </image> <clip> <near>0.02</near> <far>300</far> </clip>
上面的取值是与自身相机物理硬件的规格相匹配。而< near>和< far>表示的是相机可以看到物体的最近和最远距离。
<plugin name="camera_controller" filename="libgazebo_ros_camera.so">
这个是实际文件gazebo_ros/gazebo_ros_camera.cpp所要链接的。
<cameraName>rrbot/camera1</cameraName> <imageTopicName>image_raw</imageTopicName> <cameraInfoTopicName>camera_info</cameraInfoTopicName>
这里定义的是相机发布的话题。对于rrbot,我们所要订阅的话题为:
/rrbot/camera1/image_raw /rrbot/camera1/camera_info
二. 运行launch文件
roslaunch rrbot_gazebo rrbot_world.launch roslaunch rrbot_description rrbot_rviz.launch
结果如下图:
运行rqt_graph,显示节点图:
可以看出gazebo和rviz中的机器人状态不一致。
此时加载的rrbot_world.launch的内容如下:<launch> <!-- these are the arguments you can pass this launch file, for example paused:=true --> <arg name="paused" default="false"/> <arg name="use_sim_time" default="true"/> <arg name="gui" default="true"/> <arg name="headless" default="false"/> <arg name="debug" default="false"/> <!-- 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="$(find rrbot_gazebo)/worlds/rrbot.world"/> <arg name="debug" value="$(arg debug)" /> <arg name="gui" value="$(arg gui)" /> <arg name="paused" value="$(arg paused)"/> <arg name="use_sim_time" value="$(arg use_sim_time)"/> <arg name="headless" value="$(arg headless)"/> </include> <!-- Load the URDF into the ROS Parameter Server --> <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find rrbot_description)/urdf/rrbot.xacro'" /> <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot --> <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen" args="-urdf -model rrbot -param robot_description"/> </launch>
rrbot_rviz.launch的内容如下:
<launch> <param name="robot_description" command="$(find xacro)/xacro --inorder '$(find rrbot_description)/urdf/rrbot.xacro'" /> <!-- send fake joint values --> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <param name="use_gui" value="true"/> </node> <!-- Combine joint values --> <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/> <!-- Show in Rviz --> <node name="rviz" pkg="rviz" type="rviz" args="-d $(find rrbot_description)/launch/rrbot.rviz"/> </launch>
对于添加激光雷达插件是一样的原理。
参考:
http://gazebosim.org/tutorials?tut=ros_gzplugins -
gazebo教程---在gazebo中使用URDF
2021-08-14 16:17:48一. 背景 虽然URDF在ROS中是一个非常有用的标准格式,但是它缺少很多特性并且不能满足机器人不断发展的需求。URDF只能单独指定一个单个机器人的运动学和...为了解决这个问题,一个新的格式SDF被用在Gazebo以此解决URD -
gazebo教程---ros_control
2021-08-15 14:32:30一. ros_control和Gazebo的数据流向 在Gazebo中模拟机器人的控制器是可以通过使用ros_control和一个简单的Gazebo插件适配器来完成。下面是仿真,硬件,控制器和传动之间关系的概览: -
gazebo教程---使用roslaunch来启动gazebo,加载models
2021-08-13 21:27:03roslaunch gazebo_ros willowgarage_world.launch 运行效果如图: 下面看一下willowgarage_world.launch里的内容: <?xml version="1.0"?> <launch> <!-- We resume the logic in empty_world.... -
gazebo教程之gazebo的结构
2019-09-28 20:14:58官方的教程:http://gazebosim.org/tutorials?tut=architecture&cat=get_started 一、总述 (1)gazebo采用的是分布式结构,将物理环境的仿真和解析、用户的界面接口、通信、传感器数据的产生四部分采用不同的库... -
gazebo教程(六)插件配置
2021-01-12 10:09:41#if GAZEBO_MAJOR_VERSION (int _argc, char **_argv) { // Load gazebo as a client #if GAZEBO_MAJOR_VERSION < 6 gazebo::setupClient(_argc, _argv); #else gazebo::client::setup(_argc, _argv); #endif // ... -
gazebo教程之gazebo的组成部分
2019-09-20 14:53:52这一部分将描述在运行gazebo仿真过程的每一部分。 《一》world files 环境文件、世界文件 这个world描述文件包含所有在仿真过程的元素模块。包括机器人(robot)、光照、传感器和静态的物体。这个文件的格式是使用... -
Gazebo教程(使用roslaunch 启动Gazebo,world以及urdf模型)
2020-08-26 19:02:27Gazebo教程(使用roslaunch 启动Gazebo,world以及urdf模型) 关于如何学习ROS可以参考古月居的这篇文章 1、 https://www.zhihu.com/question/35788789/answer/580258849 推荐一些好的参考 2、... -
Gazebo教程(使用roslaunch启动Gazebo,world文件和URDF模型)
2020-12-19 09:32:45启动Gazebo,打开world模型以及向仿真环境中插入机器人模型的方法有很多.在这个教程中,我们将使用rosrun和roslaunch来实现.这里包括将URDF文件存储在ROS包中,并保留相对于ROS工作区的各种资源路径。一.使用... -
gazebo教程(10)制作一个简单的夹子
2020-03-21 15:04:19本教程介绍了如何通过编辑SDF文件来制作简单的两杆式夹持器。 想要以图形化界面的方式编辑模型,请参见“ 模型编辑器” 教程。 -
ROS中gazebo配置教程详解
2020-06-02 18:07:29ROS中gazebo配置教程详解机器人模型文件获取原始URDF模型文件采用xacro格式改写文件增加gazebo插件描述增加传动transmission最后将上面三个文件合成一个文件环境XX.world文件配置文件××.yaml 每次配置机械臂到... -
ros gazebo基础教程
2018-03-16 09:56:19本人用的ros版本是kinetic,因为比较穷。。所以就一直在找可以...1.首先安装turtlebot-gazebo,在gazebo环境下进行turtlebot的仿真 apt-get install ros-kinetic-turtlebot-gazebo 2.启动gazebo roslaunch tu...