Gazebo学习笔记(1)--入门gazebo和URDF

 主界面介绍

左面板

a.World:选项卡显示当前场景中的模型,允许查看和修改模型参数(姿态调整),也可以通过展开“GUI”选项调整视角

b.Insert:该选项卡是向仿真场景中添加新对象(模型)的。单击文件夹展开,可以看到模型序列。点击模型可以在场景中部署他

c.Layers:该选项卡是组织并显示仿真中可用的不同可视化组。一个图层可包含多个模型。关闭图层可以隐藏该图层的模型(跟画画的图层一个作用)

场景界面(主显示区)

主显示区是gazebo仿真的主要部分,在这个位置显示我们的机器人模型等,我们在这个区域操控我们的仿真对象,并与地形环境进行交互。(在场景中点击鼠标左键可以进行视角移动,点击右键可以进行视角缩放,中键可以转动视角)

右面板

默认情况下,右面版是隐藏的。但我们可以通过滑动右侧的边框来让他出现。右面板可用来选定模型的关节进行交互,当然我们得提前在场景中选定模型。

顶部工具栏

1.选择模式(Select mode):选择场景模型;

2.转换模式(Translate mode):移动场景模型;

3.旋转模式(Rotate mode):旋转模型;

4.缩放模式(Scale mode):缩放模型;

5.撤销/重做(Undo/Redo):撤销/重做模型;

6.灯光(Lights):在场景中添加灯光;

7.复制/粘贴(Copy/Paste):复制/粘贴场景模型;

8.对齐(Align):模型对齐;

9.捕捉(Snap):一个模型捕捉到另一个模型;

10.视图更改(Change view):更换观测视角;

底部工具栏 

URDF介绍

URDF(统一机器人麦哦书格式)是ROS中的重要机器人模型描述格式,ROS提供了URDF文件的c++解析器,可以解析URDF文件中使用XML格式的机器人模型。

URDF 是 XML,它是一种文本格式。因此,您可以在任何文本编辑器中创建文件。建议使用具有良好 XML 支持的 IDE。

如果已经存在机器人的 CAD 模型,可以使用一些工具将 CAD 模型转换为 URDF。(例如solidworks)

1.URDF文件常用的XML标签
1.1<robot>元素

robot 描述文件中的根元素必须是 robot,机器人模型的最顶层标签,所有其他元素(<link>标签和<jont>标签)都必须封装在其中。

  • 主文件必须具有 name 属性。name 属性在包含的文件中是可选的。如果在其他包含的文件中指定了属性名称,则该名称必须与主文件中的值相同。

1.2<link>元素 

链接元素描述具有惯性、视觉特征和碰撞属性的刚体。

资料链接urdf/XML/链接 - ROS Wiki

1.3<joint>元素

关节元素描述关节的运动学和动力学,并指定关节的安全限制

1.4<gazebo>元素

gazebo 元素是 URDF 机器人描述格式的扩展,用于 Gazebo 模拟器中的模拟目的。

有关 Gazebo 元素的完整文档,请参阅在 Gazebo 中使用 URDF(适用于 Gazebo Classic)或 URDF 的 SDFormat 扩展(<gazebo> 标记)(适用于新 Gazebo)。

从零手写移动机器人的URDF模型

1.在home目录下建立一个文件夹(例如mytext_ws),在新建立的文件夹mytext_ws下建立新文件夹src

2.创建机器人描述功能包

进入src文件夹中打开一个终端,运行如下命令:

catkin_create_pkg myrobot urdf xacro

这里的myrobot就是所创建机器人功能包的名称,可自行更改名称,但是后面要记住一些命令记得更改对应的myrobot 

 会在src中的myrobot文件夹中出现如下文件夹:

继续:下面分别创建4个文件夹

·urdf:存放机器人模型的urdf文件和xacro文件

·meshes:放置URDF中引用的模型渲染文件

·launch:保存相关启动文件

·config:保存rviz配置文件

 3.创建URDF模型

 下面进入urdf文件夹后开启一个终端后输入:

touch mbot.urdf

会出现mbot.urdf文件夹

打开刚刚创建的模型文件,复制粘贴如下内容并保存:

<?xml version="1.0" ?>
<robot name="mbot">
 
    <material name="Black">
        <color rgba="0 0 0 1"/>
    </material>
    <material name="White">
        <color rgba="1 1 1 0.95"/>
    </material>
    <material name="Blue">
        <color rgba="0 0 1 1"/>
    </material>
    <material name="Yellow">
        <color rgba="1 0.4 0 1"/>
    </material>
 
    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <material name="Yellow"/>
        </visual>
    </link>
 
</robot>

下面进入到 launch 文件中去,开启一个终端后输入:

touch display_mbot_urdf.launch

 

 打开刚刚创建的模型文件display_mbot_urdf.launch,复制粘贴如下内容并保存:

<launch>
	<!-- 设置机器人模型路径参数 -->
	<param name="robot_description" textfile="$(find myrobot)/urdf/mbot.urdf" />
 
	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
	
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
	
	<!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find myrobot)/config/mbot_urdf.rviz" required="true" />
</launch>

注意find myrobot这个是对应的机器人功能包文件名名称(有用不一样的名字的要更改)

下面来到这个文件夹的页面处:

在工作空间下进行编译,让环境变量能够找到功能包:

catkin_make
4.在rviz中显示机器人模型

重新任意开启一个终端,输入:

roslaunch myrobot display_mbot_urdf.launch

注意文件夹名称,如果模型名称也更改的话也需要更改终端代码

这里可能会出现一些环境变量的问题(我解决后已经不报错了,这里找了个相同的报错截图)

解决方案:

编辑 .bashrc 文件: 在终端中打开 .bashrc 文件:

nano ~/.bashrc

 添加如下代码: 在文件末尾添加你工作空间的路径。根据你的情况,可以如下修改:

# Source ROS工作空间的setup.bash文件
source ~/mytext_ws/devel/setup.bash

# 更新ROS_PACKAGE_PATH以包含你的工作空间
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/mytext_ws/src

保存文件并退出: 使用 Ctrl + O 保存文件,按 Enter 确认。然后按 Ctrl + X 退出编辑。

重新加载 .bashrc: 为了使更改立即生效,运行: 

source ~/.bashrc

检查环境变量是否成功设置: 通过运行以下命令来验证 ROS_PACKAGE_PATH 是否正确设置:

echo $ROS_PACKAGE_PATH

 你应该能够看到输出中包含你工作空间的路径

重新启动 roslaunch: 最后,尝试重新启动

会出现如下Rviz界面:

下面点击——> Add,找到RobotModel:

成功添加了urdf模型

但是,左边出现了明显的报错信息,进行查看:

这个是说没有base_link到map坐标系的一个变换,其中map是rviz默认设置的一个坐标系,但当前我们并没有这个坐标系。下面进行更改操作:

点击 Fixed Frame 并将其更改为 base_link:

可以发现,模型显示正常!!!

这个base_link对应于我们之前模型文件中的base_link,每一个link都会产生一个同名的坐标系:

下面为防止每次打开模型文件时都要添加Add,可以进行rviz模型的保存:

在开启的rviz中点击File——> Save config As:

找到我们功能包下面的config文件夹后,点击进行,进行命名(自定义):

 再点击save保存即可

OK,下次如果调整rviz整个界面的时候,按ctrl+s即可保存界面中的整个配置,保存至刚刚完成命名的config文件夹中。

到此为止车体模型的建立完成!

在gazebo中显示机器人模型

1.在gazebo中建立world

打开gazebo,自己创建场景,点击Edit,选择里面的Building Editor

建立我们自己的world,我随便画了两笔。 

保存在File选项里面,保存好号就可以退出编辑界面回到我们的主场景了

这里我将world保存在了 myrobot下的新建立的world文件夹下,可以打开查看里面的内容(记住路径)。

2.建立gazebo_world.launch

在laugh文件夹下建立一个名为gazebo_world.launch的文件夹(似曾相识)

touch gazebo_world.launch

打开后复制粘贴如下(名称不一样的需要更改)

<launch>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find myrobot)/world/myhouse"/> 
    <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> 

 注意$(find myrobot)/world/myhouse对应世界名称

3.建立gazebo_robot.launch

和上面步骤一样只不过里面内容复制为

<launch>

  <include file="$(find myrobot)/launch/gazebo_world.launch"/>

  <node name="spawn_model"  pkg="gazebo_ros"  type="spawn_model" args="-file $(find myrobot)/urdf/mbot.urdf -urdf -model robot_description" output="screen" />

</launch>

4.打开gazebo
roslaunch myrobot  gazebo_robot.launch

刚刚设计的house就加载到里面了。 

下面我们建立一个合适的urdf模型放入进去,这里我们借鉴下面的urdf

更改一开始我们给出的mbot.urdf文件内容

这个URDF模型是一个简单的差速轮式机器人,包含基本的轮子和底盘定义。有想法的可以自行设计urdf模型。

<?xml version="1.0"?>  
<robot name="mybot">  

  <link name="base_footprint"/>

  <joint name="base_joint" type="fixed">  
    <parent link="base_footprint"/>  
    <child link="base_link"/>  
    <origin rpy="0 0 0" xyz="0 0 0"/>  
  </joint>  
 
  <link name="base_link">  
    <inertial>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <mass value="1.0"/> <!-- 适当增加质量 -->
     <inertia ixx="0.001"  ixy="0"  ixz="0" iyy="0.001" iyz="0" izz="0.01" />
    </inertial>

    <visual>  
      <geometry>  
        <box size="0.50 0.32 0.10"/> <!-- 增大尺寸 -->
      </geometry>  
      <origin rpy="0 0 0" xyz="0 0 0"/>  
      <material name="blue">  
          <color rgba="0 0 0.8 1"/>  
      </material>  
    </visual>  

   <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <box size="0.50 0.32 0.10"/> <!-- 同样增大尺寸 -->
     </geometry>
   </collision>

  </link>  

  <link name="right_wheel_link">  
    <inertial>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <mass value="0.2"/> <!-- 适当增加质量 -->
     <inertia ixx="0.001"  ixy="0"  ixz="0" iyy="0.001" iyz="0" izz="0.001" />
    </inertial>

    <visual>  
      <geometry>  
        <cylinder length="0.04" radius="0.05"/>  <!-- 增大尺寸 -->
      </geometry>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  

    <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <cylinder length="0.04" radius="0.05"/> <!-- 同样增大尺寸 -->
     </geometry>
    </collision>
  </link>  

  <joint name="right_wheel_joint" type="continuous">  
    <axis xyz="0 0 -1"/>  
    <parent link="base_link"/>  
    <child link="right_wheel_link"/>  
    <origin rpy="1.5707 0 0" xyz="0.2 -0.18 -0.06"/>  <!-- 根据新尺寸调整位置 -->
  </joint>  

  <link name="left_wheel_link">  
    <inertial>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <mass value="0.2"/> <!-- 适当增加质量 -->
     <inertia ixx="0.001"  ixy="0"  ixz="0" iyy="0.001" iyz="0" izz="0.001" />
    </inertial>

    <visual>  
      <geometry>  
        <cylinder length="0.04" radius="0.05"/>  <!-- 增大尺寸 -->
      </geometry>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  

    <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <cylinder length="0.04" radius="0.05"/> <!-- 同样增大尺寸 -->
     </geometry>
    </collision>   
  </link>  

  <joint name="left_wheel_joint" type="continuous">  
    <axis xyz="0 0 -1"/>  
    <parent link="base_link"/>  
    <child link="left_wheel_link"/>  
    <origin rpy="1.5707 0 0" xyz="0.2 0.18 -0.06"/>  <!-- 根据新尺寸调整位置 -->
  </joint>  

  <link name="ball_wheel_link">  
    <inertial>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <mass value="0.2"/> <!-- 适当增加质量 -->
     <inertia ixx="0"  ixy="0"  ixz="0" iyy="0" iyz="0" izz="0" />
    </inertial>

    <visual>  
      <geometry>  
        <sphere radius="0.05"/>  <!-- 增大尺寸 -->
      </geometry>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  

    <collision>
     <origin xyz="0 0 0" rpy="0 0 0"/>
     <geometry>
       <sphere radius="0.05"/> <!-- 同样增大尺寸 -->
     </geometry>
    </collision>   
  </link>  

  <joint name="ball_wheel_joint" type="fixed">  
    <axis xyz="0 0 1"/>  
    <parent link="base_link"/>  
    <child link="ball_wheel_link"/>  
    <origin rpy="0 0 0" xyz="-0.20 0 -0.06"/>  <!-- 根据新尺寸调整位置 -->
  </joint>  

</robot>

重新终端运行gazebo

roslaunch myrobot  gazebo_robot.launch

一些参考链接:

ROS建模:一起从零手写URDF模型-优快云博客

机器人仿真-gazebo学习笔记(3)URDF和机器人模型_urdf文件-优快云博客

3.URDF和机器人模型_哔哩哔哩_bilibili

urdf - ROS Wiki

### Gazebo 使用教程 #### 安装指南 对于希望安装特定版本的用户来说,访问官方文档是非常重要的。进入 Gazebo 官方网站的安装指导页面[^1],在右上角选择所需安装的具体版本号,在此案例中选择了Version: 8.0。遵循网页上的逐步说明完成整个安装流程。 为了验证安装成功与否,可以在终端执行相应命令来尝试启动Gazebo窗口: ```bash gazebo ``` 如果一切正常,将会弹出一个新的图形化界面表示环境已经准备好被使用了。 #### 创建工作空间 当准备利用 ROS Gazebo 进行开发时,创建一个合适的工作区是必要的第一步。这一步骤涉及到设置目录结构以及初始化 catkin 工作空间以便后续可以顺利编译自定义包其他资源[^2]。 #### 编辑模型(Model Editor) 通过 Model Editor 用户可以直接操作现有的物体或是构建全新的实体用于模拟实验。具体交互方法包括但不限于双击列表项编辑属性、双击场景内对象调整姿态参数;另外还可以借助鼠标右键菜单选项进一步探索链接检测等功能特性[^3]。 #### 坐标系管理(TF Tree Management) 确保所有传感器数据能在 RViz 中正确呈现的关键在于维护好一致性的坐标框架体系。一旦各个组件间缺乏共同参照点,则可能出现部分视图缺失的现象。因此建议开发者仔细检查各子系统的 frame_id 设置情况,并确认它们都归属于同一个 TF 树形结构之下[^4]。 #### 启动配置(Launch Configuration) 针对复杂项目的快速部署需求,编写 launch 文件能够极大简化多节点协同工作的过程。下面是一个简单的例子展示了如何组合多个硬件驱动程序以实现同步运行的效果: ```xml <launch> <include file="$(find ros_arduino_python)/launch/arduino.launch"/> <include file="$(find usb_cam)/launch/usb_cam-test.launch"/> <include file="$(find rplidar_ros)/launch/rplidar.launch"/> </launch> ``` 上述 XML 片段描述了一个包含 Arduino 控制器、USB 摄像头 RPLIDAR 激光测距仪在内的综合启动脚本。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仗剑走代码

“您的支持是我创作的动力”

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值