当前位置: 首页 > 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需要排序的内容。你可以通过在…...

Veo 2提示词效能跃迁实战(工业级Prompt链构建全图谱)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Veo 2提示词编写的核心范式演进 Veo 2作为新一代视频生成模型&#xff0c;其提示词&#xff08;prompt&#xff09;工程已从早期的“关键词堆叠”转向结构化、语义分层与意图对齐的复合范式。这一演进并非简…...

ThinkPad开机嘀嘀响或报2100/2110错误?可能是硬盘松了!自己动手检测与修复指南

ThinkPad开机嘀嘀响或报2100/2110错误&#xff1f;三步排查硬盘接触不良问题ThinkPad用户对那个标志性的开机"嘀嘀"声再熟悉不过——正常情况下它意味着系统自检通过。但当这个声音变成急促的报警音&#xff0c;伴随屏幕上出现"2100 Detection error"或&qu…...

保姆级教程:在ROS2 Humble/Foxy的Gazebo中配置RGB-D相机(附解决点云颜色/坐标问题)

ROS2 Humble/Foxy中Gazebo深度相机仿真全攻略&#xff1a;从配置到点云问题解决在机器人仿真开发中&#xff0c;深度相机&#xff08;RGB-D&#xff09;是不可或缺的传感器之一。它能够同时提供彩色图像和深度信息&#xff0c;为SLAM、物体识别、避障等任务提供关键数据支持。本…...

Android 11开发避坑:为什么你的App获取的Wifi MAC地址总是变?手把手教你配置固定MAC

Android 11开发实战&#xff1a;彻底解决Wifi MAC地址随机化问题最近在开发一个设备管理系统时&#xff0c;遇到了一个棘手的问题&#xff1a;我们的App在Android 11设备上获取的Wifi MAC地址每次都不一样&#xff0c;导致基于MAC地址的设备识别功能完全失效。经过一周的深入研…...

用Python和MNE库玩转BCI Competition IV 2a脑电数据集:从数据加载到可视化全流程

用Python和MNE库玩转BCI Competition IV 2a脑电数据集&#xff1a;从数据加载到可视化全流程当你第一次接触脑电信号处理时&#xff0c;面对原始数据文件可能会感到无从下手。BCI Competition IV 2a数据集作为脑机接口领域的经典基准数据&#xff0c;包含了9名受试者四种运动想…...

2026 西安 AI 问答曝光搭建技术解析:GEO 知识图谱 + 深度测评

随着大语言模型技术的快速普及&#xff0c;AI 搜索已经成为用户获取企业信息、商家服务的核心入口。根据中国互联网信息中心 2026 年发布的《中国人工智能搜索发展报告》显示&#xff0c;2025 年国内 AI 搜索用户规模突破 8.2 亿&#xff0c;日均搜索请求超过 20 亿次&#xff…...

Unity iOS构建报错SDK version is 0的根因与精准修复

1. 这个报错不是Unity在“发脾气”&#xff0c;而是工程配置在“装死”刚接手一个老项目&#xff0c;打开Unity编辑器&#xff0c;点Build Settings准备打包iOS&#xff0c;结果弹出一行红字&#xff1a;“SDK version is 0, cannot build”。我第一反应是——这什么鬼&#xf…...

Hindsight API参考:REST接口完整文档

Hindsight API参考&#xff1a;REST接口完整文档 【免费下载链接】hindsight Hindsight: Agent Memory That Learns 项目地址: https://gitcode.com/GitHub_Trending/hindsight2/hindsight Hindsight是一个强大的Agent Memory系统&#xff0c;提供了全面的REST API接口&…...

开源ELM327 OBD-II适配器:从硬件设计到多协议固件实现全解析

1. 项目概述&#xff1a;开源ELM327 OBD适配器如果你对汽车诊断、数据监控或者嵌入式开发感兴趣&#xff0c;那么自己动手做一个OBD-II适配器绝对是个能让你学到很多东西的硬核项目。今天要聊的&#xff0c;就是一个完全开源的、基于NXP LPC1517微控制器的ELM327兼容OBD适配器。…...

使用libusb-win32驱动复活老旧USB硬件:以Elektor Magic Eye为例

1. 项目概述&#xff1a;让老硬件在新时代焕发新生手头有一台十多年前的《Elektor》杂志上刊登的“Magic Eye EM84”复古VFD显示屏项目&#xff0c;想把它接到Windows 10电脑上当个酷炫的CPU占用率显示器&#xff0c;却发现官方提供的“AVR309”USB驱动在新系统上彻底罢工了。这…...