机器人系统ros2-开发学习实践12-给机器人模型添加物理和碰撞属性

在本教程中,我们将了解如何向 URDF 模型添加一些基本物理属性以及如何指定其碰撞属性。

碰撞

到目前为止,我们仅使用单个子元素 指定了链接,visual它定义了(毫不奇怪)机器人的外观。然而,为了使碰撞检测起作用或模拟机器人,我们collision还需要定义一个元素。 下面是具有碰撞和物理属性的新 urdf 。

<?xml version="1.0"?>
<robot name="physics"><material name="blue"><color rgba="0 0 0.8 1"/></material><material name="black"><color rgba="0 0 0 1"/></material><material name="white"><color rgba="1 1 1 1"/></material><link name="base_link"><visual><geometry><cylinder length="0.6" radius="0.2"/></geometry><material name="blue"/></visual><collision><geometry><cylinder length="0.6" radius="0.2"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><link name="right_leg"><visual><geometry><box size="0.6 0.1 0.2"/></geometry><origin rpy="0 1.57075 0" xyz="0 0 -0.3"/><material name="white"/></visual><collision><geometry><box size="0.6 0.1 0.2"/></geometry><origin rpy="0 1.57075 0" xyz="0 0 -0.3"/></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="base_to_right_leg" type="fixed"><parent link="base_link"/><child link="right_leg"/><origin xyz="0 -0.22 0.25"/></joint><link name="right_base"><visual><geometry><box size="0.4 0.1 0.1"/></geometry><material name="white"/></visual><collision><geometry><box size="0.4 0.1 0.1"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="right_base_joint" type="fixed"><parent link="right_leg"/><child link="right_base"/><origin xyz="0 0 -0.6"/></joint><link name="right_front_wheel"><visual><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry><material name="black"/></visual><collision><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry></collision><inertial><mass value="1"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="right_front_wheel_joint" type="continuous"><axis rpy="0 0 0" xyz="0 1 0"/><parent link="right_base"/><child link="right_front_wheel"/><origin rpy="0 0 0" xyz="0.133333333333 0 -0.085"/></joint><link name="right_back_wheel"><visual><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry><material name="black"/></visual><collision><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry></collision><inertial><mass value="1"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="right_back_wheel_joint" type="continuous"><axis rpy="0 0 0" xyz="0 1 0"/><parent link="right_base"/><child link="right_back_wheel"/><origin rpy="0 0 0" xyz="-0.133333333333 0 -0.085"/></joint><link name="left_leg"><visual><geometry><box size="0.6 0.1 0.2"/></geometry><origin rpy="0 1.57075 0" xyz="0 0 -0.3"/><material name="white"/></visual><collision><geometry><box size="0.6 0.1 0.2"/></geometry><origin rpy="0 1.57075 0" xyz="0 0 -0.3"/></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="base_to_left_leg" type="fixed"><parent link="base_link"/><child link="left_leg"/><origin xyz="0 0.22 0.25"/></joint><link name="left_base"><visual><geometry><box size="0.4 0.1 0.1"/></geometry><material name="white"/></visual><collision><geometry><box size="0.4 0.1 0.1"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="left_base_joint" type="fixed"><parent link="left_leg"/><child link="left_base"/><origin xyz="0 0 -0.6"/></joint><link name="left_front_wheel"><visual><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry><material name="black"/></visual><collision><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry></collision><inertial><mass value="1"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="left_front_wheel_joint" type="continuous"><axis rpy="0 0 0" xyz="0 1 0"/><parent link="left_base"/><child link="left_front_wheel"/><origin rpy="0 0 0" xyz="0.133333333333 0 -0.085"/></joint><link name="left_back_wheel"><visual><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry><material name="black"/></visual><collision><origin rpy="1.57075 0 0" xyz="0 0 0"/><geometry><cylinder length="0.1" radius="0.035"/></geometry></collision><inertial><mass value="1"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="left_back_wheel_joint" type="continuous"><axis rpy="0 0 0" xyz="0 1 0"/><parent link="left_base"/><child link="left_back_wheel"/><origin rpy="0 0 0" xyz="-0.133333333333 0 -0.085"/></joint><joint name="gripper_extension" type="prismatic"><parent link="base_link"/><child link="gripper_pole"/><limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/><origin rpy="0 0 0" xyz="0.19 0 0.2"/></joint><link name="gripper_pole"><visual><geometry><cylinder length="0.2" radius="0.01"/></geometry><origin rpy="0 1.57075 0 " xyz="0.1 0 0"/></visual><collision><geometry><cylinder length="0.2" radius="0.01"/></geometry><origin rpy="0 1.57075 0 " xyz="0.1 0 0"/></collision><inertial><mass value="0.05"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="left_gripper_joint" type="revolute"><axis xyz="0 0 1"/><limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/><origin rpy="0 0 0" xyz="0.2 0.01 0"/><parent link="gripper_pole"/><child link="left_gripper"/></joint><link name="left_gripper"><visual><origin rpy="0.0 0 0" xyz="0 0 0"/><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/></geometry></visual><collision><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/></geometry><origin rpy="0.0 0 0" xyz="0 0 0"/></collision><inertial><mass value="0.05"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="left_tip_joint" type="fixed"><parent link="left_gripper"/><child link="left_tip"/></joint><link name="left_tip"><visual><origin rpy="0.0 0 0" xyz="0.09137 0.00495 0"/><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger_tip.dae"/></geometry></visual><collision><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger_tip.dae"/></geometry><origin rpy="0.0 0 0" xyz="0.09137 0.00495 0"/></collision><inertial><mass value="0.05"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="right_gripper_joint" type="revolute"><axis xyz="0 0 -1"/><limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/><origin rpy="0 0 0" xyz="0.2 -0.01 0"/><parent link="gripper_pole"/><child link="right_gripper"/></joint><link name="right_gripper"><visual><origin rpy="-3.1415 0 0" xyz="0 0 0"/><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/></geometry></visual><collision><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger.dae"/></geometry><origin rpy="-3.1415 0 0" xyz="0 0 0"/></collision><inertial><mass value="0.05"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="right_tip_joint" type="fixed"><parent link="right_gripper"/><child link="right_tip"/></joint><link name="right_tip"><visual><origin rpy="-3.1415 0 0" xyz="0.09137 0.00495 0"/><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger_tip.dae"/></geometry></visual><collision><geometry><mesh filename="package://urdf_tutorial/meshes/l_finger_tip.dae"/></geometry><origin rpy="-3.1415 0 0" xyz="0.09137 0.00495 0"/></collision><inertial><mass value="0.05"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><link name="head"><visual><geometry><sphere radius="0.2"/></geometry><material name="white"/></visual><collision><geometry><sphere radius="0.2"/></geometry></collision><inertial><mass value="2"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="head_swivel" type="continuous"><parent link="base_link"/><child link="head"/><axis xyz="0 0 1"/><origin xyz="0 0 0.3"/></joint><link name="box"><visual><geometry><box size="0.08 0.08 0.08"/></geometry><material name="blue"/><origin xyz="-0.04 0 0"/></visual><collision><geometry><box size="0.08 0.08 0.08"/></geometry></collision><inertial><mass value="1"/><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0"/></inertial></link><joint name="tobox" type="fixed"><parent link="head"/><child link="box"/><origin xyz="0.1814 0 0.1414"/></joint></robot>

urdf 关键部件解析:

新的基本链接的代码。

<link name="base_link"><visual><geometry><cylinder length="0.6" radius="0.2"/></geometry><material name="blue"><color rgba="0 0 .8 1"/></material></visual><collision><geometry><cylinder length="0.6" radius="0.2"/></geometry></collision></link>
  • collision 碰撞元素是链接对象的直接子元素,与视觉标签处于同一级别。

  • 碰撞元素定义其形状的方式与视觉元素相同,使用几何标签。此处几何标记的格式与视觉效果完全相同。

在许多情况下,您会希望碰撞几何体和原点与视觉几何体和原点完全相同。但是,有两种主要情况您不会这样做:

  • 处理速度更快。对两个网格进行碰撞检测比对两个简单几何体进行碰撞检测要复杂得多。因此,您可能希望在碰撞元素中用更简单的几何图形替换网格。

  • 安全区。您可能需要限制靠近敏感设备的活动。例如,如果我们不希望任何东西与 R2D2 的头部发生碰撞,我们可以将碰撞几何体定义为包围他的头部的圆柱体,以防止任何东西距离他的头部太近。

物理属性:

为了让您的模型正确模拟,您需要定义机器人的几个物理属性,即像 Gazebo 这样的物理引擎所需的属性。

惯性

每个被模拟的链接元素都需要一个惯性标签。

<link name="base_link"><visual><geometry><cylinder length="0.6" radius="0.2"/></geometry><material name="blue"><color rgba="0 0 .8 1"/></material></visual><collision><geometry><cylinder length="0.6" radius="0.2"/></geometry></collision><inertial><mass value="10"/><inertia ixx="1e-3" ixy="0.0" ixz="0.0" iyy="1e-3" iyz="0.0" izz="1e-3"/></inertial>
</link>
惯性(Inertial)

这部分描述了该部件的质量和惯性矩阵,这些属性对于动力学模拟至关重要。

质量:质量为10千克。
惯性矩阵:
ixx, iyy, izz:主对角线元素分别为0.001 kg·m²,这些值描述了沿对应轴的惯性。
ixy, ixz, iyz:非对角线元素均为0,表示惯性的对称性,这些值在对角线惯性矩阵中常为0,表明没有交叉产品的惯性。

接触系数

您还可以定义链接相互接触时的行为方式。这是通过碰撞标签的一个名为 contact_coefficients 的子元素来完成的。需要指定三个属性:

mu——摩擦系数
kp——刚度系数
kd——阻尼系数

联合动力学

关节的移动方式由关节的动力学标签定义。这里有两个属性:

  • friction- 物理静摩擦力:对于棱柱形关节,单位是牛顿。对于旋转接头,单位为牛顿米。

  • damping- 物理阻尼值:对于棱柱形接头,单位是牛顿秒每米。对于旋转接头,每弧度牛顿米秒。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1425338.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

打包conda环境的两种方法:conda env export和Conda-Pack

打包conda环境的两种方法&#xff1a;conda env export和Conda-Pack 搭建项目环境可能是整个开发过程中最让人头疼的部分了。如何把我们辛辛苦苦搭建的环境打包起来&#xff0c;万一环境崩了还能迅速恢复&#xff0c;或者让别人能轻松地复制同样的设置呢&#xff1f; 今天&am…

数仓架构之为什么要进行数仓分层

数仓分层这个概念想必大家都很熟悉&#xff0c;不管是在实际的开发工作当中会用的&#xff0c;还是在面试官面试你的时候会问到&#xff1a;你之前的项目是按照什么分层的&#xff0c;分哪几层&#xff0c;数仓分层有什么好处&#xff0c;举个栗子说说。 简而言之&#xff0c;…

[Cocos Creator 3.5赛车游戏]第3节 新建项目

环境已经配置好&#xff0c;现在您将真正的开始开发您的项目&#xff0c;开发项目的第一步是新建项目。所以现在请关闭上一个步骤打开的Cocos Creator窗口&#xff0c;回到CocosDashboard&#xff0c;点击“新建”按钮&#xff1a; 选择“模板”选项卡&#xff0c;因为您即将开…

视频监控平台智能边缘分析一体机视频存储平台打手机检测算法

智能边缘分析一体机的打手机检测算法是一种集成了先进图像处理、计算机视觉和人工智能技术的解决方案&#xff0c;专门用于实时监测和识别监控场景中的打手机行为。 在提到“打手机检测算法”时&#xff0c;可能是指一种能够识别和检测使用手机行为的算法。这种算法可以应用于多…

29.IO流(了解)

1. C语言的输入与输出 ​ C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。注意宽度输出和精度输出控制。C语言借助了相应的…

在面对各种问题时,我们应该如何进行数据分析

python数据分析汇总 前言一、对比分析概念特征类型案例Matplotlib的颜色字母对照表解决遇到未知函数 二、相关性分析概念类型案例一案例二 三、时间序列分析概念类型案例 四、回归分析概念类型案例一案例二案例三 五、决策树概念计算过程案例 六、主成分分析概念计算过程案例 七…

武汉星起航推出亚马逊一站式孵化服务,助力卖家轻松拓展全球市场

亚马逊作为全球最大的电商平台之一&#xff0c;以其全球化的销售平台和完善的物流体系&#xff0c;吸引了众多卖家的目光。通过亚马逊平台&#xff0c;卖家可以轻松地将产品销往世界各地&#xff0c;无需担心复杂的国际贸易流程。而在这个充满机遇的市场中&#xff0c;武汉星起…

IDEA中开发并部署运行WEB项目

IDEA中开发并部署运行WEB项目 1 WEB项目的标准结构2 WEB项目部署的方式3 IDEA中开发并部署运行WEB项目3.1 部署步骤3.2 IDEA关联本地Tomcat 4 IDEA创建web工程5 IDEA部署-运行web项目6 IDEA部署并运行项目的原理 1 WEB项目的标准结构 一个标准的可以用于发布的WEB项目标准结构如…

安防监控视频平台智能边缘分析一体机视频存储系统客流统计检测算法

智能边缘分析一体机的客流统计检测算法是一种基于人工智能与边缘计算技术的解决方案&#xff0c;专门设计用来实时、准确地统计通过特定区域的人流量。这项技术广泛应用于零售、交通、场馆管理、智慧城市等领域&#xff0c;以帮助管理者更好地理解顾客行为、优化资源配置、提升…

RS232/RS485信号转12路模拟信号 YL34隔离D/A转换器 4-20mA/0-5V/0-10V/0-20mA/0-25mA

特点&#xff1a; ● RS-485/232接口&#xff0c;隔离转换成12路标准模拟信号输出 ● 可选型输出4-20mA或0-10V控制其他设备 ● 模拟信号输出精度优于 0.2% ● 可以程控校准模块输出精度 ● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;10 ~ …

什么是控制,什么是控制系统?复杂的动态系统怎么被控制的?

在汽车研发中或者购买新能源汽车中&#xff0c;通常能提到什么EPS控制、ABS控制、智能域控等等各种说法&#xff0c;听起来让人觉得非常不一般&#xff0c;但是&#xff0c;这控制究竟是什么&#xff1f;控制的又是什么&#xff1f;其实很好理解&#xff01; 关注我&#xff0c…

Unity Mirror 从入门到入神(一)

Mirror从入门到成神 文章目录 Mirror从入门到成神简介NetworkClientRegisterPrefabConnect (string address)Disconnect ()activeactiveHost NetworkServerSpawn 简介 Mirror是一个unity网络同步框架&#xff0c;基于MonoBehaviour生命周期的回调的基础上进行数值的同步&#…

HTML+CSS练习小项目——百叶窗

前言&#xff1a;在学习完HTML和CSS之后&#xff0c;我们就可以开始做一些小项目了&#xff0c;本篇文章所讲的是新手可以练习的小项目——百叶窗 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下效果&#xff1a…

python怎么安装matplotlib

1、登陆官方网址“https://pypi.org/project/matplotlib/#description”&#xff0c;下载安装包。 2、选择合适的安装包&#xff0c;下载下来。 3、将安装包放置到python交互命令窗口的当前目录下。 4、打开windows的命令行窗口&#xff0c;通过"pip install"这个命令…

K8S认证 | CKA题库 + 答案 | 权限控制RBAC

1、权限控制RBAC 您必须在以下Cluster/Node上完成此考题&#xff1a; Cluster Master node Worker node k8s master …

如何加密电脑文件夹?重要文件夹怎么加密?

文件夹可以帮助我们管理电脑数据&#xff0c;而文件夹并不具有安全保护功能&#xff0c;很容易导致数据泄露。因此&#xff0c;我们需要加密保护电脑文件夹。那么&#xff0c;如何加密电脑文件夹呢&#xff1f;下面我们就来了解一下。 EFS加密 EFS加密是Windows提供的数据加密…

普通人也能创业!轻资产短视频带货项目,引领普通人实现创业梦想

在这个信息爆炸的时代&#xff0c;创业似乎成为了越来越多人的梦想。然而&#xff0c;传统的创业模式 keJ0277 往往伴随着高昂的资金投入和复杂的管理流程&#xff0c;让许多普通人望而却步。然而&#xff0c;现在有一种轻资产短视频带货项目正在悄然兴起&#xff0c;它以其低…

.net下使用cap实现消息异步处理

介绍 github地址 CAP 是一个基于 .NET Standard 的 C# 库&#xff0c;它是一种处理分布式事务的解决方案&#xff0c;同样具有 EventBus 的功能&#xff0c;它具有轻量级、易使用、高性能等特点。 新建项目 新建.net7web项目 安装依赖包 安装软件 安装redis和Sql Server …

MyBatis操作数据库(动态SQL)

1 动态SQL 动态SQL是MyBatis的特征之一&#xff0c;能够完成不同条件下不同的SQL拼接 1.1 <if>标签 在注册用户的时候&#xff0c;可能会有这样一个问题&#xff0c;由于注册分为两种字段&#xff1a;必填字段和非必填字段&#xff0c;如果在添加用户的时候有不确定的…

一个简单的webservice客户端demo

首先我们是客户端&#xff0c;我们要找一个服务端来配合我们调试&#xff0c;可以在这个网址里找个你喜欢的免费服务WEB服务&#xff08;Web Servicrs&#xff09;| 免费WEB服务 | 商业WEB服务 | XML Web Servicrs - WEBXML 比如下面这个查手机号归属地的&#xff1a; 我们新建…