【嵌入式应用学习笔记 04】ROS-URDF机器人建模

1.URDF简介

URDF,全称为统一机器人描述格式(Unified Robot Description Format),是一个基于XML的语法框架,用于在机器人操作系统(ROS)中描述和定义机器人模型。

1.1 URDF标签

既然我们知道URDF是一种基于XML的语法框架,那必然是会使用到标签去描述和定义机器人模型,下面是关于URDF所使用的标签的介绍
URDF内容:

  • link 连杆
  • joint 关节
  • axis 运动学参数
  • dynamics 动力学参数
  • visual 可视化模型
  • collision 碰撞检测模型

1.1.1 link标签

link 标签说明
link标签它定义了机器人的各个刚体部分,如底座、轮子、激光雷达和摄像头等。这些实体部件都是机器人模型中可见的部分,每个部件都对应一个link标签。以下是link标签的一些关键属性:

  • 形状和尺寸:通过指定几何特征,如立方体、圆柱体或自定义的3D模型,来定义部件的形状。尺寸则通过几何特征的参数,如长度、宽度和高度来确定。
  • 颜色:可以设置部件的颜色,这在视觉呈现上很重要,有助于区分不同的部件或高亮显示特定的部件。
  • 惯性矩阵:这个属性描述了部件的质量分布,对于动力学仿真和碰撞效果的准确计算非常关键。
  • 碰撞参数:定义了部件在物理仿真中如何与其他物体发生相互作用,包括摩擦系数和弹性系数等。
    xml的格式的描述
<link name="<link name>">
<!-- 描述机器人link部分的外观参数, 尺寸、颜色、形状等的外观信息 -->
	<inertial>......</inertial>
	<!-- 描述link的惯性参数,主要用到机器人动力学的运算部分 -->
	<visual>......</visual>
	<!-- 描述link的碰撞属性 -->
	<collision>......</collision>
</link>

1.1.2 joint标签

在URDF(Unified Robot Description Format)中,joint标签用于描述机器人关节的运动学和动力学属性。
以下是joint标签的xml表示

<joint name="joint1" type="revolute">
    <parent link="base_link"/> <!-- 父链接的名称 -->
    <child link="link1"/> <!-- 子链接的名称 -->
    <origin xyz="0 0 0" rpy="0 0 0"/> <!-- 关节的原点位置 -->
    <axis xyz="0 0 1"/> <!-- 关节的运动轴 -->
    <limit lower="-1.57" upper="1.57" effort="10" velocity="1"/> <!-- 运动的限制范围、力矩限制和速度限制 -->
  </joint>

1.1.3 robot标签

robot标签在URDF中作为根标签使用,以确保XML语法的完整性。
以下是robot标签的XML的格式表示

<robot name="name of the robot">
	<link>......</link>
	<link>......</link>
	<joint>......</joint>
	<joint>......</joint>
</robot>

2.URDF的建模实现

首先我们建立一个用来描述机器人建模的功能包,首先创造一个ros的工作空间

mkdir -p ~/catkin_ws/src

初始化工作空间

cd ~/ctakin_ws/src
catkin_init_spacework

初始化完成之后会在catkin_ws/src中创建一个CMakeLists.txt文件
在这里插入图片描述
回到刚刚创建的工作空间中,对工作空间进行编译

cd ~/catkin_ws
catkin_make

在这里插入图片描述
编译完成之后,catkin_ws中会出现build文件夹和devel文件夹
在这里插入图片描述
进入src文件中,建立一个新的功能包

cd ~/catkin_ws/src
catkin_create_pkg mbot_description urdf xacro

在这里插入图片描述
进入我们新建的功能包,创建四个文件夹

cd ./catkin_ws/src/mbot_description
mkdir urdf
mkdir meshes
mkdir launch
mkdir config
  • urdf :存放机器人模型的URDF或xacro文件
  • launch:保存相关启动文件
  • config:保存rviz的配置文件、功能包的配置文件
  • meshes:放置URDF中引用的模型渲染文件,机器人外观纹理,让外观和实际更相似

创建我们的launch启动文件

cd ./catkin_ws/src/mbot_description/launch
sudo gedit display_mbot_base_urdf.launch

写入以下内容

<launch>
   <!-- 加载的参数名字叫robot_description,具体内容是urdf相关模型的路径 -->
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />
	<!-- 设置GUI参数,显示关节控制插件 -->
	<param name="use_gui" value="true"/>
	<!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	<!-- 运行rviz可视化界面,保存每次打开之后的相关插件,保存到config文件夹下面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>

接下来创建我们的URDF模型
我们创建一个原型底盘的小车

cd ./catkin_ws/src/mbot_description/urdf
sudo gedit mbot_base.urdf

写入以下内容

<?xml version="1.0" ?>
<robot name="mbot">
    <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">
                <color rgba="1 0.4 0 1"/>
            </material>

        </visual>

    </link>
    <joint name="left_wheel_joint" type="continuous">
    
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        
       
        
        <axis xyz="0 1 0"/>
        
    </joint>
     
    <link name="left_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.06" length = "0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>
 
    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>

        <parent link="base_link"/>
        <child link="right_wheel_link"/>
        <axis xyz="0 1 0"/>
    </joint>
    <link name="right_wheel_link">
        <visual>
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <geometry>
                <cylinder radius="0.06" length = "0.025"/>
            </geometry>
            <material name="white">
                <color rgba="1 1 1 0.9"/>
            </material>
        </visual>
    </link>

    <joint name="front_caster_joint" type="continuous">
        <origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="front_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />

            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="back_caster_joint" type="continuous">
        <origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
        <axis xyz="0 1 0"/>
    </joint>

    <link name="back_caster_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
                <sphere radius="0.015" />
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>




</robot>


保存,我们查看一下模型

roslaunch mbot_description display_mbot_base_urdf.launch

如果没有模型显示,可以进行以下步骤
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就会出现我们刚刚设计好的模型了

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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、付费专栏及课程。

余额充值