ROS-机械臂——从零构建机器人模型

URDF建模

在这里插入图片描述

URDF

URDF,全称为 Unified Robot Description Format(统一机器人描述格式),是一种用于描述机器人几何结构和运动学属性的标准文件格式。URDF 文件通常用于机器人模拟、路径规划、控制算法开发和可视化等领域,特别是在 ROS(Robot Operating System)环境中非常常见。

URDF 建模主要关注以下方面:

Link(链接):表示机器人中的刚体部分,如机器人的手臂、腿或任何静态部件。每个链接都有自己的惯性属性,如质量和转动惯量,以及几何形状,如碰撞体(colliders)和视觉表示(visuals)。
Joint(关节):描述链接之间的连接方式,包括关节类型(如revolute旋转关节、prismatic直线关节等)、关节轴线、限制条件(如关节限位)和动力学属性(如摩擦力)。
Inertial(惯性):描述链接的质量和转动惯量等物理属性。
Collision(碰撞):用于物理模拟和碰撞检测的几何形状,通常较为简单。
Visual(视觉):用于渲染和可视化的几何形状,可能比碰撞形状更复杂,以提供更真实的外观。
Material(材质):定义颜色和纹理,用于视觉表示。
Actuator(执行器):描述驱动关节的设备,如电机或液压缸的属性。
Transmissions(传动装置):定义执行器如何影响关节的运动。
Gazebo Plugins(Gazebo 插件):用于在 Gazebo 模拟器中扩展机器人的行为,如传感器模型。
URDF 建模过程涉及创建和配置上述组件,以准确地反映机器人的结构和动力学。URDF 文件通常是 XML 格式的,可以通过文本编辑器手动编写,也可以使用工具辅助生成。

URDF 与 DH 参数(Denavit-Hartenberg 参数)有联系,DH 参数用于描述关节间的相对位置和方向,而 URDF 可以基于这些参数来构建机器人的结构模型。然而,URDF 提供了更为丰富和详细的描述,包括几何形状、物理属性和传感器信息等。

机器人组成

在这里插入图片描述

内部关系

在这里插入图片描述

Links 与 Joints

在这里插入图片描述

Links

在这里插入图片描述

Joint

在这里插入图片描述

UDRF建模弊端

在这里插入图片描述

xacro模型文件

在这里插入图片描述

常量定义与使用

在这里插入图片描述

数学计算

在这里插入图片描述

宏定义、宏调用

在这里插入图片描述

文件包含

在这里插入图片描述

定义排版

在这里插入图片描述

launch文件

在这里插入图片描述
#三维模型导出URDF

网上找到UR3机械臂的资源,把 “.step” 后缀结尾的文件,在solidwork中打开如图

在这里插入图片描述

link和joint的配置

在这里插入图片描述

生成模型功能包

在这里插入图片描述

测试修改bug

在这里插入图片描述

结果展示

在这里插入图片描述

solid works

SolidWorks 是一款广泛使用的三维 CAD 软件,主要用于机械设计。要将 SolidWorks 的模型转换为 URDF(Unified Robot Description Format)格式,用于机器人仿真和控制,你需要一个插件或者工具来辅助这个过程。虽然 SolidWorks 本身并不直接支持 URDF 格式,但有一些第三方插件可以实现这一功能,比如 sw2urdf。

选择哪一款 SolidWorks 版本对于 URDF 转换而言,主要取决于以下几点:

插件兼容性:确保你所选择的 SolidWorks 版本与你打算使用的 URDF 插件兼容。不同的插件可能支持不同版本的 SolidWorks。
功能需求:如果你的模型非常复杂,可能需要使用更高版本的 SolidWorks,因为较新版本往往包含更多功能和改进的性能,这可以帮助你更高效地创建和管理复杂的装配体。
硬件要求:SolidWorks 的高版本通常需要更强的硬件配置。如果您的计算机硬件不够强大,可能会影响软件运行的流畅性和稳定性。
许可成本:SolidWorks 不同版本的价格不同,且功能也有差异。你需要评估成本效益,选择最适合你预算和需求的版本。
技术支持:较新的 SolidWorks 版本通常会获得更好的技术支持和更新。
用户熟悉度:如果你已经熟悉某个版本的 SolidWorks,除非有特别的功能需求,否则继续使用熟悉的版本可能会更加高效。
对于 URDF 导出而言,关键在于找到一个稳定且功能全面的插件,它能够准确地将你的 SolidWorks 模型转换为 URDF 文件。sw2urdf 插件能够处理 SolidWorks 的零件和装配体,自动识别关节类型、变换和轴,这对于 URDF 建模是非常重要的。

目录架构

在这里插入图片描述

相关文件

CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)project(UR3)find_package(catkin REQUIRED)catkin_package()find_package(roslaunch)foreach(dir config launch meshes urdf)install(DIRECTORY ${dir}/DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/${dir})
endforeach(dir)

package.xml

<package format="2"><name>UR3</name><version>1.0.0</version><description><p>URDF Description package for UR3</p><p>This package contains configuration data, 3D models and launch files
for UR3 robot</p></description><author>TODO</author><maintainer email="TODO@email.com" /><license>BSD</license><buildtool_depend>catkin</buildtool_depend><depend>roslaunch</depend><depend>robot_state_publisher</depend><depend>rviz</depend><depend>joint_state_publisher_gui</depend><depend>gazebo</depend><export><architecture_independent /></export>
</package>

display.launch

<launch><argname="model" /><paramname="robot_description"textfile="$(find UR3)/urdf/UR3.urdf" /><nodename="joint_state_publisher_gui"pkg="joint_state_publisher_gui"type="joint_state_publisher_gui" /><nodename="robot_state_publisher"pkg="robot_state_publisher"type="robot_state_publisher" /><nodename="rviz"pkg="rviz"type="rviz"args="-d $(find UR3)/urdf.rviz" />
</launch>

gazebo.launch

<launch><includefile="$(find gazebo_ros)/launch/empty_world.launch" /><nodename="tf_footprint_base"pkg="tf"type="static_transform_publisher"args="0 0 0 0 0 0 base_link base_footprint 40" /><nodename="spawn_model"pkg="gazebo_ros"type="spawn_model"args="-file $(find UR3)/urdf/UR3.urdf -urdf -model UR3"output="screen" /><nodename="fake_joint_calibration"pkg="rostopic"type="rostopic"args="pub /calibrated std_msgs/Bool true" />
</launch>

ur3.urdf

<?xml version="1.0" encoding="utf-8"?>
<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) Commit Version: 1.6.0-4-g7f85cfe  Build Version: 1.6.7995.38578For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robotname="UR3"><linkname="base_link"><inertial><originxyz="2.105E-05 0.098059 -0.0036545"rpy="0 0 0" /><massvalue="1.371" /><inertiaixx="0.0018288"ixy="4.4582E-07"ixz="-2.0556E-07"iyy="0.0019082"iyz="0.00013405"izz="0.0017646" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/base_link.STL" />    </geometry><materialname=""><colorrgba="0.89804 0.91765 0.92941 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/base_link.STL" /></geometry></collision></link><linkname="link1"><inertial><originxyz="-6.5885E-06 0.055927 0.0072937"rpy="0 0 0" /><massvalue="0.75521" /><inertiaixx="0.0010675"ixy="-9.4953E-08"ixz="1.0255E-07"iyy="0.00090525"iyz="-0.00013058"izz="0.00099003" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link1.STL" /></geometry><materialname=""><colorrgba="0.79216 0.81961 0.93333 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link1.STL" /></geometry></collision></link><jointname="joint1"type="revolute"><originxyz="0 0 0.0844"rpy="1.5708 0 -3.1416" /><parentlink="base_link" /><childlink="link1" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint><linkname="link2"><inertial><originxyz="-2.6778E-06 0.060634 0.09327"rpy="0 0 0" /><massvalue="1.6559" /><inertiaixx="0.0025822"ixy="-8.909E-08"ixz="1.019E-07"iyy="0.002419"iyz="-9.301E-05"izz="0.0016021" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link2.STL" /></geometry><materialname=""><colorrgba="0.79216 0.81961 0.93333 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link2.STL" /></geometry></collision></link><jointname="joint2"type="revolute"><originxyz="0 0.0675 0.05235"rpy="1.5708 0 -3.1416" /><parentlink="link1" /><childlink="link2" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint><linkname="link3"><inertial><originxyz="-0.0050453 -0.11121 3.4154E-06"rpy="0 0 0" /><massvalue="0.96204" /><inertiaixx="0.0010146"ixy="4.5981E-05"ixz="6.2628E-08"iyy="0.00054242"iyz="-4.3697E-08"izz="0.0010724" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link3.STL" /></geometry><materialname=""><colorrgba="1 1 1 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link3.STL" /></geometry></collision></link><jointname="joint3"type="revolute"><originxyz="0 -0.02535 0.24365"rpy="-1.5708 0 -1.5708" /><parentlink="link2" /><childlink="link3" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint><linkname="link4"><inertial><originxyz="0.0059208 -0.0007977 2.6694E-07"rpy="0 0 0" /><massvalue="0.32519" /><inertiaixx="0.00019459"ixy="1.8337E-05"ixz="1.3898E-10"iyy="0.00019909"iyz="1.2329E-09"izz="0.00022621" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link4.STL" /></geometry><materialname=""><colorrgba="1 1 1 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link4.STL" /></geometry></collision></link><jointname="joint4"type="revolute"><originxyz="-0.0834 -0.213 0"rpy="-3.1416 0 0" /><parentlink="link3" /><childlink="link4" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint><linkname="link5"><inertial><originxyz="0.0059208 0.00079771 -2.3761E-07"rpy="0 0 0" /><massvalue="0.32519" /><inertiaixx="0.00019459"ixy="-1.8338E-05"ixz="-2.0382E-10"iyy="0.00019909"iyz="1.211E-09"izz="0.00022621" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link5.STL" /></geometry><materialname=""><colorrgba="1 1 1 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link5.STL" /></geometry></collision></link><jointname="joint5"type="revolute"><originxyz="0 0.0834 0"rpy="0 0 -1.5708" /><parentlink="link4" /><childlink="link5" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint><linkname="link6"><inertial><originxyz="4.7334E-10 0.00010334 -0.021073"rpy="0 0 0" /><massvalue="0.11536" /><inertiaixx="4.2469E-05"ixy="1.5688E-12"ixz="1.7329E-12"iyy="4.2681E-05"iyz="1.0324E-07"izz="5.9067E-05" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link6.STL" /></geometry><materialname=""><colorrgba="1 1 1 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://UR3/meshes/link6.STL" /></geometry></collision></link><jointname="joint6"type="revolute"><originxyz="0 -0.0409 0"rpy="1.5708 0.2207 3.1416" /><parentlink="link5" /><childlink="link6" /><axisxyz="1 0 0" /><limitlower="-3.14"upper="3.14"effort="100"velocity="1" /></joint>
</robot>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

workingset protection/detection on the anonymous LRU list

Working-set protection for anonymous pages [LWN.net] [PATCH v3 0/9] workingset protection/detection on the anonymous LRU list [LWN.net] 14.7 跟踪LRU活动情况和Refault Distance算法-CSDN博客

React学习笔记03-----手动创建和运行

一、项目创建与运行【手动】 react-scripts集成了webpack、bable、提供测试服务器 1.目录结构 public是静态目录&#xff0c;提供可以供外部直接访问的文件&#xff0c;存放不需要webpack打包的文件&#xff0c;比如静态图片、CSS、JS src存放源码 &#xff08;1&#xff09…

十大经典排序算法(1)——冒泡排序

一、算法简述 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单直观的暴力枚举式排序算法。它重复地遍历要排序数组&#xff0c;每次比较两个相邻元素&#xff0c;如果顺序错误就把他们交换过来。直到数组已经按照顺序排列&#xff0c;冒泡算法之所以叫做“冒泡”&…

公司想无偿裁员,同事赖着不走

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 这招好像也不错! 事情是这样的&#xff1a;某公司准备把成本高的员工都裁掉&#xff0c;主要包含研发部和程序员&#xff0c;总共18个人&#xff0c;准备裁掉10人&#xff0c;因为他们工资开的太高了&#xff0c;…

HTML+CSS+JS井字棋(来自动下棋)

井字棋 自动下棋 玩家先下&#xff0c;计算机后下 源码在图片后面 点赞❤️收藏⭐️关注&#x1f60d; 效果图 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>Tic Tac Toe Game</tit…

释放DOE的能量,快速确定最佳工艺设置,节省时间、成本和资源

您是否希望降低成本、提高生产效率&#xff0c;并最大限度地减少行业对环境的影响&#xff1f; 所有行业&#xff0c;尤其是钢铁、铝、水泥和石化等能源密集型行业&#xff0c;都面临着应对这些挑战的持续压力。供应链压力、可持续发展、严格的监管环境、日益增长的消费者预期…

前端使用 Vue 3,后端使用 Spring Boot 构建 Hello World 程序

前端使用 Vue 3&#xff0c;后端使用 Spring Boot 构建 Hello World 程序 前端&#xff08;Vue 3&#xff09; 首先&#xff0c;创建一个 Vue 3 项目。 1. 安装 Vue CLI npm install -g vue/cli2. 创建 Vue 项目 vue create frontend在交互式提示中&#xff0c;选择默认的…

web滚动页面到指定位置

方法&#xff1a;scrollTo(x-coord,y-coord) 方法是Web API中Element接口的一部分&#xff0c;但它主要用于Window对象或可滚动的元素&#xff08;如具有overflow属性为auto或scroll的<div>&#xff09;。此方法用于将窗口滚动到文档中的特定位置&#xff0c;或者将某个元…

【Linux】权限的管理和Linux上的一些工具

文章目录 权限管理chgrpchownumaskfile指令sudo指令 目录权限粘滞位Linux中的工具1.软件包管理器yum2.rzsz Linux开发工具vim 总结 权限管理 chgrp 功能&#xff1a;修改文件或目录的所属组 格式&#xff1a;chgrp [参数] 用户组名 文件名 常用选项&#xff1a;-R 递归修改文…

股指期货与股票抛空机制的区别是什么?

在投资的世界里&#xff0c;有两种看似相似&#xff0c;实则大有不同的玩法&#xff1a;股指期货和股票抛空。让我们用通俗易懂的话来搞清楚这两者的区别。 股票抛空&#xff1a;借来卖出&#xff0c;期待低价买回 想象一下&#xff0c;你看到市场上有只股票&#xff0c;觉得…

基于STM32设计的超声波测距仪(微信小程序)(186)

基于STM32设计的超声波测距仪(微信小程序)(186) 文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择1.5 系统框架图…

Oracle 常用系统

常用系统包 查看系统包 SELECT * FROM all_objects WHERE object_type PACKAGE AND owner SYS AND object_name 包名称;AUTO_SERVER_PKG AUTO_SERVER_PKG 在Oracle数据库的上下文中&#xff0c;并不是一个标准的Oracle系统包或内置功能。然而&#xff0c;在参考文章中提到…

大模型笔记3 Longformer for Extractive Summarization训练

目录 改为GPU运行 从文本label生成输入token label 多样本输出文本 保存训练过程损失和模型 部署到服务器 训练集构建 改为GPU运行  1.检查是否有可用的GPU&#xff0c;并根据可用性设置设备。  2.使用方法将模型和输入张量移动到GPU。.to(device)  3.将所有…

DeepSORT:高效对象跟踪算法

在自动驾驶领域&#xff0c;对象检测和跟踪是实现安全驾驶的关键技术。检测对象是第一步&#xff0c;而跟踪它们的去向则是更为复杂和关键的一环。本文将深入探讨一种先进的对象跟踪算法——DeepSORT&#xff0c;它结合了简单排序算法、卡尔曼滤波器、深度外观描述符等技术&…

Latte: Latent Diffusion Transformer for Video Generation

文章目录 AbstractIntroductionMethodology潜在扩散模型的初步研究Latte的模型变体Latte的实验验证潜在视频片段的patch embeddingTimestep-class information injectionTemporal positional embedding通过学习策略增强视频生成 Experiments Abstract Latte首先从输入的视频提…

成像光谱遥感技术中的AI革命:ChatGPT

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力&#xff0c;ChatGPT在遥感中的应用&#xff0c;人工智能在…

太速科技-FMC207-基于FMC 两路QSFP+光纤收发子卡

FMC207-基于FMC 两路QSFP光纤收发子卡 一、板卡概述 本卡是一个FPGA夹层卡&#xff08;FMC&#xff09;模块&#xff0c;可提供高达2个QSFP / QSFP 模块接口&#xff0c;直接插入千兆位级收发器&#xff08;MGT&#xff09;的赛灵思FPGA。支持利用Spartan-6、Virtex-6、Kin…

PTA - 接收n个关键字参数

接收n个以关键字形式传入的参数&#xff0c;按格式输出。 函数接口定义&#xff1a; def print_info (**keyargs) 提示&#xff1a;keyargs为可变参数&#xff0c;其可接受若干个关键字形式的实参值&#xff0c;并将接收到的值组装为一个字典。 裁判测试程序样例&#xff1…

Nextjs 调用组件内的方法

在 Next.js 中&#xff0c;如果你想从一个组件外部调用组件内部的方法&#xff0c;可以使用 React 的 useRef 钩子来引用组件实例并调用其方法。这种方法主要适用于类组件&#xff0c;但也可以用于函数组件&#xff0c;通过将方法暴露在 ref 对象上。 以下是一个示例&#xff…

Ningx配置前端http缓存

在构建高性能的网站或Web应用程序时&#xff0c;优化前端资源的加载速度是至关重要的。一个有效的方法是利用HTTP缓存机制&#xff0c;通过缓存静态资源来减少网络请求&#xff0c;降低服务器负载&#xff0c;并提升用户体验。本文将介绍如何使用Nginx配置前端HTTP缓存&#xf…