ROS基础(9)——机器人仿真URDF

一、学习前提

首先,你需要了解一下URDF文件,这是我Linux系统和ROS都不太熟时学习的笔记,可以先做简单了解,里面的操作都是小白方法,如果学习完之前的内容再看就显得笨且糊里糊涂的,但那也是一个过程

好啦,看完上面的资料,只记住基础知识,忘掉练习的操作,开始今天的内容吧

Unified Robot DescriptionFormat,统一机器人描述格式
非常重要的机器人模型描述格式
可以解析URDF文件中使用XML格式描述的机器人模型
ROS同时也提供URDF文件的C++解析器

URDF的一些参数

< link >
描述机器人某个刚体部分的外观和物理属性>尺寸(size)、颜色(color),形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等

< visual >:描述机器人link部分的外观参数

< inertiab >︰描述link的惯性参数

< collision>︰描述link的碰撞属性

< joint >
描述机器人关节的运动学和动力学属性
包括关节运动的位置和速度限制
根据关节运动形式,可以将其分为六种类型

关节类型 描述
continuous 旋转关节,可以围绕单轴无限旋转
revolute 旋转关节,类似于continuous,但是有旋转的角度极限
prismatic 滑动关节,沿某一轴线移动的关节,带有位置极限
planar 平面关节,允许在平面正交方向上平移或者旋转
floating 浮动关节,允许进行平移、旋转运动
fixed 固定关节,不允许运动的特殊关节

< calibration>:关节的参考位置,用来校准关节的绝对位置

< dynamics>∶描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到

< limit>︰描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等

< mimic>︰描述该关节与已有关节的关系

< safety_controller>∶描述安全控制器参数

< robot>:完整机器人模型的最顶层标签,< link>和< joint>标签都必须包含在< robot>标签内,一个完整的机器人由一系列的< link>和< joint>构成

二、实战

在完成ROS基础(8)——机器人建模实战的学习后,接着来吧~

可以跟着自己写来一遍,也可以用已经弄好的包:提取码:bf7y

不过和我下面做的有出入,仔细看,做适当的更改

1、功能包的准备

cd try_ws/src/      # 到达工作空间指定路径
catkin_create_pkg mybot_des urdf xacro     # 创建自己的包且添加两个依赖
#会在自己的内自动生成两个文件:
#Created file mybot_des/package.xml
#Created file mybot_des/CMakeLists.txt
#Successfully created files in /home/ubuntu/try_ws/src/mybot_des. Please adjust the values in package.xml.
cd mybot_des/     # 来到自己的包内
mkdir urdf        # 创建存放机器人模型的文件
mkdir launch      # 创建启动文件
mkdir meshes      # 创建存放渲染机器人模型的文件
mkdir config      # 创建存放rviz配置的文件

在这里插入图片描述

2、launch文件

首先到launch文件下创建启动launch文件

ubuntu@ubuntu:~/try_ws/src/mybot_des$ cd launch/
ubuntu@ubuntu:~/try_ws/src/mybot_des/launch$ gedit ./display_mbot_base_urdf.launch

将下列内容输入到display_mbot_base_urdf.launch文件中

<launch>
	<param name="robot_description" textfile="$(find mybot_des)/urdf/mbot_base.urdf" />   
	# textfile告知调用哪个路径下的urdf文件
	
	<param name="use_gui" value="true"/>  
	# 启用插件:设置GUI参数,value="true"为显示关节控制插件
	
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
	# 运行joint_state_publisher节点,发布机器人的关节状态。pkg包名,type可执行程序
	
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
	# 运行robot_state_publisher节点,发布tf。
	
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mybot_des)/config/mbot_urdf.rviz" required="true" />
	# 运行rviz可视化界面。参数args标定路径,required="true"表示rviz必须启动
    # 这里要注意你需要提前安装好rviz的插件哦~
    # rviz的文件内容在这里不写了,看我给的资源包里面直接复制,放到相应的文件里
</launch>

3、urdf文件

到达指定路径,创建文件的指令应该都烂熟于心的,所以后面就不写了,不会参照上面
创建 mbot_base.urdf文件,内容如下:
看懂上面的备注,下面也就懂了

<?xml version="1.0" ?>    # XML文件的第一行,声明这是一个XML文件,version属性是必须写的
<robot name="mbot">       # 机器人的名字
# 车身
    <link name="base_link">   # 连杆名字:主关节(起始1)
        <visual>  # 视觉信息(起始2)
            <origin xyz=" 0 0 0" rpy="0 0 0" />    # 连杆的起点:xyz为相对的位置,rpy为相对的方向
            <geometry>    # 几何形状(起始3)
                <cylinder length="0.16" radius="0.20"/>    # link的形状:圆柱 高 半径
            </geometry>   # (结束3)
            <material name="yellow">     # 素材:黄色 (起始4)
                <color rgba="1 0.4 0 1"/>    # 黄色的代码和配置,1 0.4 0表达颜色,1表达透明度
            </material>    # (结束4)
        </visual>    # (结束2)
    </link>    # (结束1)
# 左轮连接轴
    <joint name="left_wheel_joint" type="continuous">     # 关节名字和类型,continuous为旋转关节,可围绕单轴无限旋转
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>      # 关节的起点:xyz为相对的位置,rpy为相对的方向
        <parent link="base_link"/>          # 父连杆
        <child link="left_wheel_link"/>     # 子连杆
        <axis xyz="0 1 0"/>      # axis为基准轴在本坐标系中的姿态
    </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"/
### 关于ROS2在四足机器人仿真中的应用 对于希望了解如何利用ROS2进行四足机器人仿真的开发者来说,可以从以下几个方面入手: #### 1. **基础环境搭建** 为了实现基于ROS2的四足机器人仿真,首先需要配置合适的开发环境。由于ROS2支持多平台运行[^2],可以选择适合的操作系统(如Ubuntu Linux),并安装必要的依赖项以及ROS2发行版。 #### 2. **模型设计与导入** 通常情况下,四足机器人的三维模型可以通过CAD软件创建或者直接下载开源资源。这些模型随后会被转换成URDF/XACRO文件格式以便加载到Gazebo或其他物理引擎中用于仿真。如果涉及到自定义硬件驱动程序,则可能还需要编写类似于`my_robot_driver.xml`这样的插件描述文档来适配特定功能需求[^3]。 #### 3. **传感器初始化与数据处理** 针对实际项目里可能会用到的各种类型的传感器设备,在启动阶段就需要完成它们各自的实例化过程并通过API接口设置好参数属性。例如下面这段C代码展示了地面距离感应器启用方法的一个例子: ```c // 初始化地面传感器数组 for (int id = 0; id < NUM_GROUND_SENSORS; ++id) { ground_sensors[id] = wb_robot_get_device(ground_sensors_names[id]); wb_distance_sensor_enable(ground_sensors[id], get_time_step()); } ``` 上述片段说明了通过Webots API获取指定名称列表下的每一个传感器对象,并为其分配时间步长以激活周期读取模式[^4]。 #### 4. **运动规划算法集成** 最后一步就是将高级别的导航逻辑嵌入整个框架之中。这往往意味着要引入诸如SLAM建图、路径优化之类的复杂计算模块。而这一切都可以借助官方提供的tutorials作为起点深入学习下去——即从简单的节点通信练习逐步过渡至完整的控制系统部署。 以下是几个推荐的学习方向和参考资料链接供参考者进一步探索相关内容: - 官方文档: https://docs.ros.org/en/rolling/Tutorials.html - GitHub仓库搜索关键词:"quadruped ros2 simulation"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值