ROS 2边学边练(46)-- 给URDF模型添加物理属性和碰撞属性

前言

        实际物理世界中的物体需要遵守物理定律,机器人也不例外,在urdf中我们同样可以给机器人添加相关属性以模拟对应真实物理世界中的情况。

动动手

碰撞collision

        碰撞属性指的是该物体的最小安全物理空间,站在机器人的角度,这个最小安全空间就是自身所占空间。

        前面的urdf文件中,对于机器人部件(link)我们只给出了visual标签,定义了其形状、颜色,现在我们可以将碰撞属性加入。[原文件:07-physics.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属性标签与visual标签同级;
  • collision属性里的子标签geometry用来定义最终的最小安全空间范围(几何形状、大小);
  • collision属性里同样可以添加原点数据(具体可以参考上面的原文件)。

 

         在许多情况下,我们是希望碰撞几何体和原点要与机器人本身视觉几何体和原点保持一致,但下面的两种情况除外:

  • 快速处理。对两个网格(前面提到的mesh文件,如抓手等比较复杂的模型)进行碰撞检测比对两个简单几何体进行碰撞检测要复杂得多。因此,往往可以考虑将mesh简化为容易计算的简单几何体(此时碰撞几何体和原点就与部件本身不一致了);
  • 安全区域。我们可能想要限制在敏感设备附近的移动。例如,如果我们不希望任何物体与R2D2的头部发生碰撞,我们可能会定义一个包围其头部的圆柱体作为碰撞几何体,以防止任何物体过于接近其头部(可联想为一隐形头盔)。

物理属性physical properties

        此处的物理属性主要指的是惯性(inertia),初中物理我们学过惯性与质量成正比,在机器人动力学中,惯性是机器人机构动力学特性的一个重要因素。由于机器人机构通常包含多个运动部件,这些部件在运动时会产生惯性力,这些惯性力会影响机器人的运动状态和控制精度。因此,在机器人动力学建模和分析中,需要充分考虑惯性因素的影响,以得到更准确的机器人动力学模型和控制算法。计算还是相当复杂的存在。

        在Gazebo中也是需要提供机器人的惯性属性来仿真模拟真实情况。

惯性inertia

        每个被模拟的连接元素(link)都需要一个惯性(inertial)标签。下面是一个简单示例。

<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标签与visual及collision标签等级,也是link标签的子标签;

inertial标签中的mass属性为质量,单位为千克;

3x3 的转动惯量矩阵由惯性元素指定。由于这个矩阵是对称的,因此它可以用仅6个元素来表示,如下所示。

ixxixyixz
ixyiyyiyz
ixziyzizz

这里,3x3的转动惯量矩阵描述了一个物体在空间三个维度上的转动惯量特性。由于矩阵是对称的(即I_xy = I_yx, I_xz = I_zx, I_yz = I_zy),我们只需要存储对角线上的3个元素(表示绕x、y、z轴的转动惯量)以及上三角(或下三角)的3个元素(表示不同轴之间的惯性积)即可。因此,总共需要6个元素来表示这个矩阵。

  • 这些信息我们可以通过建模程序(如MeshLab)获取。几何原始形状(如圆柱体、盒子、球体)的惯性可以通过查阅维基百科上关于惯性张量矩列表(在上面的例子中有所使用)来计算得出;
  • 惯性张量取决于物体的质量和质量的分布。一个好的初步近似方法是假设物体体积内质量均匀分布,并根据物体的形状来计算惯性张量,如上所述;
  • 如果不确定应该填入什么值,对于一个中等大小的连杆,一个合理的默认值是ixx/iyy/izz=1e-3或更小的矩阵(这相当于一个边长为0.1米、质量为0.6千克的盒子)。单位矩阵是一个特别糟糕的选择,因为它通常太高了(它相当于一个边长为0.1米、质量为600千克的盒子!);
  • 我们还可以指定一个“origin”标签来指定重心以及惯性参考系(相对于连杆的参考系);
  • 在使用实时控制器时,如果惯性元素为零(或几乎为零),可能会导致机器人模型在没有警告的情况下崩溃,并且所有连杆的原点都将与世界原点重合。
接触系数contact coefficients

        我们也可以定义连杆在相互接触时如何表现。这是通过collision标签的一个子元素contact_coefficients来完成的。其需要指定三个属性:

  • mu - 摩擦系数Friction coefficient(有动态和静态两种)
  • kp - 刚性系数Stiffness coefficient
  • kd - 阻尼系数Dampening coefficient

关节动力学

        在urdf中可以通过动力学标签来定义关节的移动属性,这里有两个属性:

  • 摩擦friction - 物理静态摩擦。对于滑动关节来说,其单位是牛顿(N),对于有限制的转动关节,其单位是牛米(Nm)。
  • 阻尼damping - 物理阻力值,对于滑动关节来说,其单位是牛顿秒每米(Ns/m),有限制的转动关节,其单位是牛顿米秒每弧度(Nms/rad)。

        如果不指定具体值,这些系数值默认为0.

其他标签     

        在纯URDF(即不包括Gazebo特定标签)的领域中,还有两个剩余的标签用于帮助定义关节:calibrationsafety_controller。但是,需要澄清的是,在标准的URDF规范中,calibrationsafety_controller并不是标准的标签。URDF(Unified Robot Description Format)主要用于描述机器人的结构、尺寸、质量和关节等物理特性,但不直接涉及控制、校准或安全控制器的配置。

        然而,在某些机器人软件框架或应用中,可能会扩展URDF以包含这些额外的信息。例如,calibration标签可能被用于指定关节校准的参数,而safety_controller可能用于描述与关节安全相关的控制器参数或配置。

        但注意,这些并不是URDF规范的标准部分,而是特定于某个软件框架或应用的扩展。如果在某个特定的机器人软件或仿真环境中看到了这些标签,应该查阅该软件的文档以了解这些标签的具体含义和用法。[参考教程]

 

本篇完。

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

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

相关文章

UE5C++ FString做为参数取值时报错error:C4840

问题描述 用来取FString类型的变量时报错&#xff1a; 问题解决 点击错误位置&#xff0c;跳转到代码&#xff1a; void AMyDelegateActor::TwoParamDelegateFunc(int32 param1, FString param2) {UE_LOG(LogTemp, Warning, TEXT("Two Param1:%d Param2:%s"), param…

docker搭建redis6.0(docker rundocker compose演示)

文章讲了&#xff1a;docker下搭建redis6.0.20遇到一些问题&#xff0c;以及解决后的最佳实践方案 文章实现了&#xff1a; docker run搭建redisdocker compose搭建redis 搭建一个redis’的过程中遇到很多问题&#xff0c;先简单说一下搭建的顺序 找一个redis.conf文件&…

spsr 的恢复出错,导致 thumb 指令集的 it 条件运行指令运行异常,清晰的调试思路帮助快速解决问题

记一次调试过程 这是一个在 arm 架构上的 RTOS 上的调试过程。问题现象为使用 thumb 指令集的 libgcc 库的情况下&#xff0c;浮点运算随机出错。经过一番追踪调试&#xff0c;逐步缩小问题范围&#xff0c;最后定位问题&#xff0c;成功解决。 场景 在某款的国产 RTOS 上&a…

RIP动态路由协议详解

目录 一&#xff1a;RIP协议的基本信息 二&#xff1a;RIP协议中的更新方式 三&#xff1a;RIP协议中的计时器 定时更新器&#xff08;UPDATE timer&#xff09; 无效定时器&#xff08;invalid Timer&#xff09; 垃圾收集定时器&#xff08;garbage collection timer&a…

【退役之重学 Java】初步认识 AQS

一、AQS 是什么 Abstract Queued Synchronizer &#xff0c;翻译过来就是“抽象的排好队的同步器”。 AQS 是一个用来构建锁和同步器的框架。是用来构建锁或者其他同步器组件的重量级基础框架及整个JUC体系的基石&#xff0c;通过内置的FIFO队列来完成线程获取资源的排队工作&…

【linux软件基础知识】如何使用 run_list 字段将任务放入就绪队列中

在给定的代码片段中,struct task_struct 表示内核中任务或进程的进程控制块 (PCB)。 run_list 字段的类型为 struct list_head,这表明它是链表实现的一部分。 run_list字段在Linux内核中常用来表示任务在调度队列中的位置,例如就绪队列或各种优先级队列。 init_task是一个…

第100+7步 ChatGPT文献复现:ARIMA-GRNN预测出血热

基于WIN10的64位系统演示 一、写在前面 这一次&#xff0c;我们来解读ARIMA-GRNN组合模型文章&#xff0c;也是老文章了&#xff1a; 《PLoS One》杂志的2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…

树莓派、ubuntu低版本python3安装库

如果遇到树莓派中自带低版本python3&#xff0c;又不想额外去安装python3时&#xff0c;可能会遇到版本过低&#xff0c;无法安装库的情况&#xff0c;以下用我实际情况举例解决方案。 本次遇到的问题是树莓派低版本中&#xff0c;python3为3.7.3&#xff0c;需要安装numpy&am…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机进行双向串口通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串口通信的特殊功能寄存器…

数据结构与算法===递归

文章目录 定义适用场景爬楼梯代码实现 小结 定义 递归(Recursion)是指函数的自身调用。 这个算法演变为了程序员之间的梗&#xff0c;所表达的意思近似于“套娃”&#xff0c;表示不断重复引用别人的话从而产生循环。 适用场景 这个应该很多的&#xff0c;像一些树的遍历&am…

Java | Leetcode Java题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; class Solution {public int largestRectangleArea(int[] heights) {int n heights.length;int[] left new int[n];int[] right new int[n];Arrays.fill(right, n);Deque<Integer> mono_stack new ArrayDeque<Integer>();f…

数据结构与算法学习笔记三---队列的顺序表示和实现(C语言)

目录 前言 1.顺序队列的描述 2.队列的顺序表示和实现 1.定义 2.初始化 3.销毁 4.清空 5.空队列 6.队列长度 7.获取队头 8.入队 9.出队 10.遍历队列 11.完整代码 前言 本篇博客介绍栈和队列的表示和实现。 1.顺序队列的描述 图1.顺序队列的描述 2.队列的顺序表示…

如何根据招聘信息打造完美简历

如何根据招聘信息打造完美简历 招聘信息分析简历调整策略个性化与关键词结语 在求职过程中&#xff0c;简历是第一块敲门砖。它不仅展示了你的专业技能和工作经验&#xff0c;还体现了你对所申请职位的理解和热情。然而&#xff0c;如何从招聘信息中提炼关键点&#xff0c;打造…

苹果电脑MAC清理系统空间工具CleanMyMacX4.15.3中文版下载

苹果电脑以其出色的性能、优雅的设计和高效的操作系统而受到许多用户的喜爱。然而&#xff0c;随着时间的推移和使用量的增加&#xff0c;你可能会发现你的Mac开始变得缓慢和响应迟缓。这通常是因为硬盘空间被大量占用&#xff0c;影响了系统的整体性能。幸运的是&#xff0c;有…

mysql管理

数据库服务管理 安装完成后,启动mysql服务器systemctl start mysqld然后查看mysql状态systemctl status mysqld 发现报错&#xff0c;因为centos不再支持MySQL数据库&#xff0c;安装mariadb代替 yum install –y mariadb-server 会在 /var/log/mysqld.log文件中会自动生成…

Android 13 系统自定义安全水印

效果 源码实现 frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java public final void showSafeModeOverlay() {View v LayoutInflater.from(mContext).inflate(com.android.internal.R.layout.safe_mode, null);WindowManager.Layout…

CSS滑动门

CSS滑动门使各种特殊形状的背景能够自动拉伸滑动&#xff0c;以适应元素内部的文本内容&#xff0c;其原理是&#xff1a;利用CSS精灵和盒子撑开宽度适应不同字数的导航栏。 特点&#xff1a; 1.可以根据导航字数自动调节宽度&#xff1b; 2.可以以简单的背景图实现炫彩的导航条…

NSS题目练习2

[LitCTF 2023]我Flag呢&#xff1f; 打开题目后查看源码即可发现flag [第五空间 2021]WebFTP 看到提示&#xff0c;首先想到用dirsearch扫描链接&#xff0c;看是否存在git泄露 发现存在git泄露&#xff0c;用githack解决 克隆提示目录为空&#xff0c;说明不正确&#xff0c…

前端工程化,前端监控,工作流,部署,性能

开发规范 创建项目的时候&#xff0c;配置下 ESlint&#xff0c;stylelint&#xff0c; prettier&#xff0c; commitlint 等; ESLint 主要功能&#xff1a; ESLint 是一个静态代码检查工具&#xff0c;用于在 JavaScript 代码中识别和报告模式。它的目标是提供一个插件化的 …

ios 开发如何给项目安装第三方库,以websocket库 SocketRocket 为例

1.brew 安装 cococapods $ brew install cocoapods 2、找到xcode项目 的根目录&#xff0c;如图&#xff0c;在根目录下创建Podfile 文件 3、在Podfile文件中写入 platform :ios, 13.0 use_frameworks! target chat_app do pod SocketRocket end project ../chat_app.x…