ROS-URDF

本文档介绍了如何使用ROS的通用机器人描述格式(URDF)来创建机器人模型。从创建功能包、编写URDF文件、设置link和joint属性,到创建launch文件启动模型,并在rviz中显示和验证。此外,还提到了URDF文件的错误检查方法和关节类型。通过实践,读者将掌握URDF的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

URDF的相关知识

URDF的官网学习网站

实践出真知

1、创建功能包

  • 1、打开到工作空间的src目录下
ubuntu@ubuntu:~/catkin_ws/src$ cd ~/catkin_ws/src/
  • 2、新建功能包
ubuntu@ubuntu:~/catkin_ws/src$ catkin_create_pkg learning_urdf urdf xacro
Created file learning_urdf/CMakeLists.txt
Created file learning_urdf/package.xml
Successfully created files in /home/ubuntu/catkin_ws/src/learning_urdf. Please adjust the values in package.xml.
  • 其中urdf xacro是功能包的依赖包。
  • 3、功能包内创建文件夹
ubuntu@ubuntu:~/catkin_ws$ cd ~/catkin_ws/src/learning_urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ ls
CMakeLists.txt  package.xml
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ mkdir config launch meshes urdf
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ ls
CMakeLists.txt  config  launch  meshes  package.xml  urdf
  • urdf用在存放urdf或xacro的文件
  • meshes:放置URDF中引用的模型渲染文件
  • launch:保存相关启动文件
  • config:保存rviz的配合文件

2、创建urdf文件

ubuntu@ubuntu:~/catkin_ws/src/learning_urdf$ cd ~/catkin_ws/src/learning_urdf/urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ touch mbot.urdf

3、编写urdf文件

3.1先创建个简单的车体底盘

ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ gedit mbot.urdf
  • 一般的模板:
<?xml version="1.0" ?>
<robot name="xxx">
	<link name="xxx">
	</link>	
	<joint name="xxx" type="xxx">
	</joint>	
</robot>
  • 首先需要声明文档使用的是XML语言编写,版本号为1.0是否可以进行增加和更改
  • robot的标签就是需要编写的机器人的模型,标签都是有开头结尾。
  • 在robot标签中可以增加一些link和joint。
  • 在link和joint中可以对这个形状进行设置其属性和参数
<?xml version="1.0" ?>
<robot name="mrobot">
	<link name="link1">
	<!--intertial-->
	<!--/intertial-->
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.3" radius="0.20"/>
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
		<!--collision-->
		<!--/collision-->	
    </link>

</robot>
  • 仅描述了link,在link中省略了intertial和collision标签。降低建模的复杂度。
  • intertial是用于描述link的惯性参数。
  • collision是用于描述link的碰撞属性
  • visual是用于描述机器人link外观,其中包含了origin(原点)、geometry(形状)、material(翻译是衣料感觉就是外观的颜色)
  • origin(原点)可以设置xyz的坐标,同时可以设置是否进行变换(根据xyz进行旋转)
  • geometry(形状)
    • 有box一个立方体,size属性包含三维的长度,原点在立方体中心;
    • cylinder一个圆柱体,需指定radius(半径)和length(高)属性,原点在圆柱体中心;
    • sphere一个球体,需指定radius(半径)属性,原点在球体中心;
    • mesh一个不规则网线图,通过元素filename指定网线图文件,可选的元素scale用来指定缩放,缩放的为网线图的轴对称边界框围成的立方体.虽然.stl文件格式也被支持,但是为了得到最好的质地和颜色,推荐使用Collada的.dae文件格式.不能在多个机器上使用同一个模型.必须使用本地文件
  • material修改材料其中就是颜色,其中rgba就是红绿蓝透明度四个参数最大为1

3.2创建编写launch文件(启动)

ubuntu@ubuntu:~$ cd ~/catkin_ws/src/learning_urdf/launch/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ touch show_mbot_urdf.launch
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ gedit show_mbot_urdf.launch  
  • 编写内容
<launch>
	<param name="robot_description" textfile="$(find learning_urdf)/urdf/mbot.urdf" />
	<param name="use_gui" value="true"/>
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find learning_urdf)/config/mbot_urdf.rviz" required="true" />
</launch>

launch标签就是launch文件内容的开始和结束
param标签第一个意义是设置机器人的路径参数,会查找testfile的文件
第二个也是一个参数是是否使用GUI的一个工具参数
node标签是运行一个节点,启动固定工功能包下的某个节点。
joint_state_publisher是向外广播关节状态的值
robot_state_publisher是描述tf坐标系的
rviz是运行rviz的
其中里面有固定功能包的查找文件,需要对功能包进行编译。

ubuntu@ubuntu:~$ cd ~/catkin_ws/
ubuntu@ubuntu:~/catkin_ws$ catkin_make
  • 运行urdf的功能包的launch文件
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/launch$ roslaunch learning_urdf show_mbot_urdf.launch 
    • 3)关闭之前的打开的rviz重新执行roslaunch learning_urdf show_mbot_urdf.launch 语句。
  • 打开之后如图
    在这里插入图片描述
    • 如果里面没有robotmodel需要电机标号3的add进行添加。如果有的话,可能会像现在这样报错,将标号1的map修改成编写的文件的第一个link1就可以。就会显示urdf编写的模型。如图

在这里插入图片描述

    • 为了避免下次打开需要重新对rviz里面进行配置,可以将配置进行保存成一个配置文件放在功能包中的config中。
    • 按ctrl+shift+s进行另存为。找到路径,编写文件名,点击保存
      在这里插入图片描述
  • 颜色变化的快捷方式,可以将颜色定义放在前面对其进行表述,后面如果想使用某一个颜色直接调用名称就行。调用是和定义时的语法不一样,请详细对比。
<?xml version="1.0" ?>
<robot name="mrobot">

    <material name="yellow">
        <color rgba="1 0.4 0 1"/>
    </material>
    <material name="blue">
        <color rgba="0 0 1 1"/>
    </material>	
    <material name="red">
        <color rgba="1 0 0 1"/>
    </material>	
    <material name="green">
        <color rgba="0 1 0 1"/>
    </material>	
    <material name="white">
        <color rgba="1 1 1 1"/>
    </material>	

	<link name="link1">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.3" radius="0.40"/>
            </geometry>
			<material name="blue"/>
        </visual>	
    </link>

    <joint name="left_joint" type="continuous">
        <origin xyz="0 0.4 -0.10" rpy="0 0 0"/>
        <parent link="link1"/>
        <child link="link_left"/>
        <axis xyz="0 1 0"/>
    </joint>

	<link name="link_left">
        <visual>
            <origin xyz=" 0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.12" length = "0.05"/>
            </geometry>
			<material name="white"/>
        </visual>
    </link>
</robot>
  • 上面代码中增加了一个关节joint 和一个link。其中joint的名称是left_joint(可自定义),类型是continuous可以旋转。
jonit的类型含义
continuous旋转关节,可以围绕单轴无线旋转
revolute旋转关节,类似continuous ,担忧旋转角度的极限
prismatic滑动关节,沿某一轴线移动,带有位置极限
planar平面关节,允许在平面正交方向上平移或旋转
floating浮动关节,允许进行平移,旋转运动
fixed浮固定关节,不允许运动的特殊关节
  • parent 和child 是必须指定的属性,两个link进行连接。
  • axis 是根据什么方向旋转。

在这里插入图片描述

  • 通过滑动窗口关节的值可以使轮子进行旋转,如果旋转的物体不是小轮子而是圆柱体,将config的配置文件进行删除,重新打开就可以了。
  • 如果轮子转的不明显可以添加一个tf坐标系。
    如图
    在这里插入图片描述
    在这里插入图片描述
  • 在增加一个右轮,简单的小车底盘就完成了,也可以自己增加万向轮或者其他的部件。

检测urdf文件

  • 打开目录带到urdf文件下,输入指令检测urdf文件
ubuntu@ubuntu:~/catkin_ws$ cd ~/catkin_ws/src/learning_urdf/urdf/
ubuntu@ubuntu:~/catkin_ws/src/learning_urdf/urdf$ urdf_to_graphiz mbot.urdf 
Created file mrobot.gv
Created file mrobot.pdf

生成两个文件可以查看其结构是否存在问题。

### 回答1: 这是一个关于ROS Noetic软件包依赖关系的问题。其中,下列软件包的依赖关系尚不足够满足要求,无法安装: ros-noetic-desktop-full: 依赖于 ros-noetic-desktop,但它不会被安装。 依赖于 ros-noetic-perception,但它不会被安装。 依赖于 ros-noetic-simulators,但它不会被安装。 依赖于 ros-noetic-urdf-sim-tu,但它不会被安装。 ### 回答2: 这个错误提示是说明在安装 ros-noetic-desktop-full 软件包时,发现它需要依赖一些其他的软件包,但是这些软件包未被安装。其中,ros-noetic-desktop、ros-noetic-perception、ros-noetic-simulators 和 ros-noetic-urdf-sim-tu 是四个未满足依赖关系的软件包。 这个错误提示一般是由于软件源的问题所导致的。在安装软件包时,系统会从软件源中查找该软件包以及它所需的依赖关系。如果软件源中不存在某个软件包的依赖关系,则会提示这个错误信息。 要解决这个问题,可以尝试以下几个方法: 1. 更新软件源:可通过修改软件源配置文件或使用软件源管理工具来更新软件源。更新后再次尝试安装软件包,看是否能够解决依赖关系问题。 2. 手动安装依赖关系:如果更新软件源后仍然无法解决依赖关系问题,可以尝试手动安装依赖关系。按照依赖关系的提示,逐个安装这四个软件包。安装完成后再次尝试安装 ros-noetic-desktop-full 软件包,看是否能够正常安装。 3. 使用 aptitude 命令安装:aptitude 命令可以自动处理依赖关系,可能会更好地解决这个问题。可以通过运行以下命令安装 ros-noetic-desktop-full 软件包: sudo aptitude install ros-noetic-desktop-full 以上是我的回答,希望能对你有所帮助。如果你还有其他问题,请随时回复。 ### 回答3: 这个问题意味着在安装 ros-noetic-desktop-full 软件包时,计算机无法满足所有需要的依赖关系。这些依赖关系包括 ros-noetic-desktop、ros-noetic-perception、ros-noetic-simulators 和 ros-noetic-urdf-sim-tu。 在解决这个问题之前,我们需要了解什么是依赖关系。在软件工程中,依赖关系指的是一个软件包需要另一个软件包才能正常运行的情况。例如,在 ROS 中,ros-noetic-desktop-full 需要依赖其他的软件包才能提供完整的功能。 为了解决这个问题,我们可以使用以下方法: 1. 更新软件包源列表。我们可以更新软件包源列表,这有助于计算机查找所需的软件包。在 Ubuntu 系统中,我们可以使用以下命令更新软件包源列表:sudo apt-get update。 2. 安装依赖关系。我们可以尝试单独安装缺失的依赖关系。在 ROS 中,我们可以使用以下命令安装缺失的软件包:sudo apt-get install ros-noetic-desktop ros-noetic-perception ros-noetic-simulators ros-noetic-urdf-sim-tu。 3. 检查软件包仓库。某些情况下,软件包源可能已经过时或不再受支持。我们可以检查软件包仓库,查看软件包是否可用。在 Ubuntu 系统中,我们可以使用以下命令查看软件包仓库:apt-cache search ros-noetic-desktop-full。 总之,无法满足依赖关系的问题是常见的,在解决这个问题之前,我们需要了解依赖关系的概念,并掌握一些解决方法。在 ROS 中,我们可以使用更新软件包源列表、安装依赖关系和检查软件包仓库等方法解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值