当前位置: 首页 > news >正文

urdf ( xacro ) 的 collision碰撞参数设置

目录

  • 写在前面的话
  • 整体流程
    • 1 URDF 文件结构
    • 2 查看原始碰撞形状描述
    • 3 加入简单碰撞形状描述
      • 方法一 Meshlab 自动测量
      • 方法二 人为测量
    • 4 加入XACRO函数简化描述
  • 最终结果展示
    • 侧视图
    • 正视图
    • 碰撞几何体中心点设置不对出现的结果

写在前面的话

本文使用的 URDF 文件是由 solidworks 的 URDF export 插件生成,详情请看上一篇文章:solidworks模型导出urdf(超详细)

整体流程

1 URDF 文件结构

写法跟XML文件格式非常类似,<robot>块包含了所有机器人的描述,<link>块描述了零件的连接,<joint>块描述了单个零件。collision碰撞的描述是在<link>块中,包含<origin><geometry>两个属性,<geometry>描述的是碰撞几何体的形状,<origin>描述的是碰撞几何体的姿态,包括中心点的位置和欧拉角(这个地方需要重点关注)

在这里插入图片描述

2 查看原始碰撞形状描述

原始的 URDF 文件是直接使用零件的三维模型文件作为碰撞几何体的描述,但是这样在仿真的时候 gazebo 仿真软件需要耗费大量的时间进行碰撞计算,gazebo 会出现加载时间过长和崩溃的情况,所以有必要进行简化这个碰撞形状描述

<collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://car_urdf/meshes/left_front_wheel_Link.STL" /></geometry>
</collision>

3 加入简单碰撞形状描述

需要提前下载meshlab软件,方便后面的碰撞形状参数测量和查看

sudo apt install meshlab

方法一 Meshlab 自动测量

在meshlab界面菜单栏找到 Render > Show Box Corners 可以查看外接矩形的尺寸大小(下图左上角的Size)该外接矩形中心点的位置(下图左上角的center),这个矩形中心点一般不是零件的原点(可以通过下面第二图的坐标轴看出),因为零件不一定是对称物体,而且零件的原点也跟它保存的三维数据(三维坐标)有关。

注意:这个只能支持拟合外接矩阵

在这里插入图片描述

在这里插入图片描述

方法二 人为测量

还可以如下图操作,选中菜单栏的正方体,并在右边 Measure Info 设置为 On,进行人为测量,这个人为结果可能会有偏差,但其实影响不大,因为我们在实际设置碰撞几何体的时候经常会预设一定范围的安全空间。

在这里插入图片描述

为了得到更加准确的结果,可以选择不同的视图进行查看并测量

在这里插入图片描述

  1. 引入长方体描述整个机器人
    box 表示长方体,size分别表示长宽高三个尺寸。
    box size = 外接矩形的尺寸大小(下图左上角的Size)
    origin xyz = 该外接矩形中心点的位置(下图左上角的center)
    <collision><origin rpy="0 0 0" xyz="-0.9 0 0.1"/><geometry><box size="2.9 1.5 1.6"/></geometry></collision>

在这里插入图片描述

  1. 引入长方体描述车轮转向零件
    box 表示长方体,size分别表示长宽高三个尺寸。
    <collision><origin rpy="0 0 0" xyz="0 -0.03 -0.27"/><geometry><box size="0.34 0.39 0.54"/></geometry></collision>

在这里插入图片描述

  1. 引入圆柱体描述车轮
    cylinder 表示圆柱体,length表示圆柱的高,radius表示圆柱的底的半径。

这里要注意的是要设置欧拉角,因为圆柱体默认是竖直的,也就是底部跟地面(xy面)平行,但是车轮是竖直的,所以这里的圆柱需要横滚角(roll角)设为90度,也就是约等于1.57弧度。

    <collision><origin rpy="1.5707963267948966 0 0" xyz="0 -0.05 0"/><geometry><cylinder length="0.2" radius="0.3"/></geometry></collision>

在这里插入图片描述

4 加入XACRO函数简化描述

  1. 先把.urdf文件的后缀加上.xacro
  2. 在urdf文件头部的<robot name=“”xxx“”>后面属性加上xmlns:xacro="http://www.ros.org/wiki/xacro"
<robotname="car_urdf" xmlns:xacro="http://www.ros.org/wiki/xacro">
  1. 因为我的三维模型车轮转向器和车轮都是重复的东西,可以进行统一函数封装,方便函数调用,这个类似函数定义,不细讲,可以去看古月居的视频,或者找几个代码看看。
    这里的左右轮和左右轮转向器为什么要分开写?因为他们的中心点是不一样的,这个需要注意一下,这个可能真正的工程试验才会遇到,提醒一下。
  <xacro:property name="base_box_size" value="2.9 1.5 1.6"/><xacro:property name="orient_box_size" value="0.34 0.39 0.54"/><xacro:property name="wheel_cylinder_radius" value="0.3"/><xacro:property name="wheel_cylinder_length" value="0.2"/><xacro:macro name='base_collision'><collision><originxyz="-0.9 0 0.1"rpy="0 0 0" /><geometry><box size="${base_box_size}"/></geometry></collision></xacro:macro><xacro:macro name='left_orient_collision'><collision><originxyz="0 -0.03 -0.27"rpy="0 0 0" /><geometry><box size="${orient_box_size}"/></geometry></collision></xacro:macro><xacro:macro name='right_orient_collision'><collision><originxyz="0 0.03 -0.27"rpy="0 0 0" /><geometry><box size="${orient_box_size}"/></geometry></collision></xacro:macro><xacro:macro name='left_wheel_collision'><collision><originxyz="0 -0.05 0"rpy="${pi/2} 0 0" /><geometry><cylinder radius="${wheel_cylinder_radius}" length="${wheel_cylinder_length}"/></geometry></collision></xacro:macro><xacro:macro name='right_wheel_collision'><collision><originxyz="0 0.05 0"rpy="${pi/2} 0 0" /><geometry><cylinder radius="${wheel_cylinder_radius}" length="${wheel_cylinder_length}"/></geometry></collision></xacro:macro>

最终结果展示

侧视图

在这里插入图片描述

正视图

在这里插入图片描述

碰撞几何体中心点设置不对出现的结果

这是长方体中心点全部默认为 0 ,且车轮圆柱没设置欧拉角的显示结果

在这里插入图片描述

相关文章:

urdf ( xacro ) 的 collision碰撞参数设置

目录 写在前面的话整体流程1 URDF 文件结构2 查看原始碰撞形状描述3 加入简单碰撞形状描述方法一 Meshlab 自动测量方法二 人为测量 4 加入XACRO函数简化描述 最终结果展示侧视图正视图碰撞几何体中心点设置不对出现的结果 写在前面的话 本文使用的 URDF 文件是由 solidworks …...

iOS——方法交换Method Swizzing

什么是方法交换 Method Swizzing是发生在运行时的&#xff0c;主要用于在运行时将两个Method进行交换&#xff0c;我们可以将Method Swizzling代码写到任何地方&#xff0c;但是只有在这段Method Swilzzling代码执行完毕之后互换才起作用。 利用Objective-C Runtimee的动态绑定…...

【有啥问啥】大模型应用中的哈希链推理任务

大模型应用中的哈希链推理任务 随着人工智能技术的快速发展&#xff0c;尤其是大模型&#xff08;如GPT、BERT、Vision Transformer等&#xff09;的广泛应用&#xff0c;确保数据处理和模型推理的透明性与安全性变得愈发重要。哈希链推理任务作为一种技术手段&#xff0c;能够…...

DevExpress WinForms v24.1新版亮点:功能区、数据编辑器全新升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…...

FreeRTOS内部机制学习01(任务创建的细节以及任务调度的内部机制)

文章目录 前言&#xff1a;首先要谢谢韦东山老师的无私奉献&#xff0c;让我学到了很多东西&#xff0c;我做这个笔记是害怕我会忘记&#xff0c;所以就记录了下来&#xff0c;希望对大家有帮助&#xff01;关于寄存器CPU内部的寄存器这些寄存器到底要保存一些什么&#xff1f;…...

CANoe突然出现Trace窗口筛选项无法显示的问题

原因&#xff1a;和最近window的推送的补丁包有关 同事通过网上的操作&#xff0c;一顿操作猛如虎&#xff0c;卸载掉了这个插件&#xff0c;结果电脑文件夹无法打开和闪退。 IT的同事通过cmd命令也无法恢复。 dism /online /cleanup-image /scanhealth dism /online /cleanu…...

Linux日志-sar日志

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 Linux 系统中的日志是记录系统活动和事件的重要工具&#xff0c;它们可以帮助管理员监视系统状态、调查问题以及了解系统运行…...

全国计算机二级考试C语言篇3——选择题

C语言部分——C语言概述 1.程序模块化的优点 程序模块化的优点在于它可以使程序的开发、维护和复用变得更简单。下面是一些主要的优点&#xff1a; 降低复杂度&#xff1a;模块化可以将复杂的问题分解成更小的、更易管理的部分。 可维护性&#xff1a;模块化使得代码更易于维护…...

Python实现混合蛙跳算法

博客目录 引言 什么是混合蛙跳算法&#xff08;Shuffled Frog Leaping Algorithm, SFLA&#xff09;&#xff1f;混合蛙跳算法的应用场景为什么使用混合蛙跳算法&#xff1f; 混合蛙跳算法的原理 混合蛙跳算法的基本概念蛙群分组与局部搜索全局混洗与更新混合蛙跳算法的流程 …...

印度再现超级大片,豪华阵容加顶级特效

最近&#xff0c;印度影坛再次掀起了风潮&#xff0c;一部名为《毗湿奴降临》的神话大片强势登陆各大影院&#xff0c;上映首周票房就飙升至105亿卢比&#xff0c;成功占据了票房榜首的位置。之后&#xff0c;这部电影也在北美上映&#xff0c;海外市场的表现同样不俗&#xff…...

Git使用经验总结6-删除远端历史记录

删除远端的历史记录但是不影响最新的仓库内容是笔者一直想实现的功能&#xff0c;有两个很不错的用处&#xff1a; 有的历史提交不慎包含了比较敏感的信息&#xff0c;提交的时候没注意&#xff0c;过了一段时间才发现。这个时候已经有了很多新的历史提交&#xff0c;无法再回…...

Linux 下查找运行中的 Java 进程及 .jar 文件位置

在 Linux 环境中&#xff0c;有时我们需要查找正在运行的 Java 进程以及它们对应的 .jar 文件位置。本文将介绍如何使用命令行工具来实现这一目标。 前言 在 Linux 系统中&#xff0c;我们经常需要监控正在运行的应用程序&#xff0c;特别是在出现问题时&#xff0c;了解应用程…...

Openwrt 安装 AX210 无线网卡

安装 TTYD 我安装的是官方原版的 Openwrt&#xff0c;首先需要安装 YYTD 来从网页控制 Openwrt。 安装驱动 参考这个链接&#xff0c;跟着做。 iwlwifi-firmware-ax210 不要直接拷贝粘贴&#xff0c;CSDN 复制文字最后面有网站添加的信息。 lspci opkg update opkg instal…...

在VitePress中进行页面链接:最佳实践与实例

在使用VitePress构建静态网站时&#xff0c;页面之间的链接是必不可少的。本文将介绍如何在VitePress中正确链接页面&#xff0c;包括内部页面和外部非VitePress页面的链接方法&#xff0c;并通过实例代码进行详细解释。 一、链接VitePress内部页面 在VitePress中&#xff0c…...

Qt/C++百度地图/高德地图/天地图/腾讯地图/谷歌地图/加载绘图工具栏

一、前言说明 在地图中提供一个绘图工具栏&#xff0c;可以便捷的在地图上添加各种覆盖物&#xff0c;比如折线、多边形、矩形、圆形等&#xff0c;然后可以获取这些覆盖物的路径以及中心点等属性。这里有几个小插曲&#xff0c;比如百度地图gl版本默认不提供这个功能&#xf…...

Vue2 与 Vue3 的区别有哪些

Vue 2 和 Vue 3 在许多方面都有显著的区别&#xff0c;包括性能、API 设计、功能特性等。以下是它们主要的区别&#xff1a; 1. 响应式系统 Vue 2: 基于 Object.defineProperty: Vue 2 使用 Object.defineProperty 来实现响应式数据。这种方法在处理对象属性时有一定的局限性…...

加锁造成的线程优先级反转

优先级反转(Priority Inversion),也称优先级翻转,一般是在优先级不同的多线程环境中发生。在桌面操作系统中,线程的优先级不是太重要,因此较少见优先级反转的现象。但是,优先级反转是实时操作系统(RTOS)中一个常见的问题,特别是在采用优先级调度算法的系统中。这个问…...

【日常记录-Java】SpringBoot中使用无返回值的异步方法

Author&#xff1a;赵志乾 Date&#xff1a;2024-09-05 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 简介 在SpringBoot中&#xff0c;使用Async注解可以很方便地标记一个方法为异步执行。好处是调用者无需等待这些方法完成便可继续执…...

【深度学习】多层感知机的从零开始实现与简洁实现

可以说&#xff0c;到现在我们才真正接触到深度网络。最简单的深度网络称为多层感知机。 多层感知机由多层神经元组成&#xff0c;每一层与它的上一层相连&#xff0c;从中接收输入&#xff1b;同时每一层也与它的下一层相连&#xff0c;影响当前层的神经元。 和以前相同&…...

4、Django Admin对自定义的计算字段进行排序

通常&#xff0c;Django会为模型属性字段&#xff0c;自动添加排序功能。当你添加计算字段时&#xff0c;Django不知道如何执行order_by&#xff0c;因此它不会在该字段上添加排序功能。 如果要在计算字段上添加排序&#xff0c;则必须告诉Django需要排序的内容。你可以通过在…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

篇章二 论坛系统——系统设计

目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...

聚六亚甲基单胍盐酸盐市场深度解析:现状、挑战与机遇

根据 QYResearch 发布的市场报告显示&#xff0c;全球市场规模预计在 2031 年达到 9848 万美元&#xff0c;2025 - 2031 年期间年复合增长率&#xff08;CAGR&#xff09;为 3.7%。在竞争格局上&#xff0c;市场集中度较高&#xff0c;2024 年全球前十强厂商占据约 74.0% 的市场…...