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>
  <arg
    name="model" />
  <param
    name="robot_description"
    textfile="$(find UR3)/urdf/UR3.urdf" />
  
  <node
    name="joint_state_publisher_gui"
    pkg="joint_state_publisher_gui"
    type="joint_state_publisher_gui" />
  
  <node
    name="robot_state_publisher"
    pkg="robot_state_publisher"
    type="robot_state_publisher" />
  
  <node
    name="rviz"
    pkg="rviz"
    type="rviz"
    args="-d $(find UR3)/urdf.rviz" />
</launch>

gazebo.launch

<launch>
  <include
    file="$(find gazebo_ros)/launch/empty_world.launch" />
  <node
    name="tf_footprint_base"
    pkg="tf"
    type="static_transform_publisher"
    args="0 0 0 0 0 0 base_link base_footprint 40" />
  <node
    name="spawn_model"
    pkg="gazebo_ros"
    type="spawn_model"
    args="-file $(find UR3)/urdf/UR3.urdf -urdf -model UR3"
    output="screen" />
  <node
    name="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.38578
     For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot
  name="UR3">
  <link
    name="base_link">
    <inertial>
      <origin
        xyz="2.105E-05 0.098059 -0.0036545"
        rpy="0 0 0" />
      <mass
        value="1.371" />
      <inertia
        ixx="0.0018288"
        ixy="4.4582E-07"
        ixz="-2.0556E-07"
        iyy="0.0019082"
        iyz="0.00013405"
        izz="0.0017646" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/base_link.STL" />    
      </geometry>
      <material
        name="">
        <color
          rgba="0.89804 0.91765 0.92941 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/base_link.STL" />
      </geometry>
    </collision>
  </link>
  <link
    name="link1">
    <inertial>
      <origin
        xyz="-6.5885E-06 0.055927 0.0072937"
        rpy="0 0 0" />
      <mass
        value="0.75521" />
      <inertia
        ixx="0.0010675"
        ixy="-9.4953E-08"
        ixz="1.0255E-07"
        iyy="0.00090525"
        iyz="-0.00013058"
        izz="0.00099003" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link1.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link1.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint1"
    type="revolute">
    <origin
      xyz="0 0 0.0844"
      rpy="1.5708 0 -3.1416" />
    <parent
      link="base_link" />
    <child
      link="link1" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link2">
    <inertial>
      <origin
        xyz="-2.6778E-06 0.060634 0.09327"
        rpy="0 0 0" />
      <mass
        value="1.6559" />
      <inertia
        ixx="0.0025822"
        ixy="-8.909E-08"
        ixz="1.019E-07"
        iyy="0.002419"
        iyz="-9.301E-05"
        izz="0.0016021" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link2.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.79216 0.81961 0.93333 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link2.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint2"
    type="revolute">
    <origin
      xyz="0 0.0675 0.05235"
      rpy="1.5708 0 -3.1416" />
    <parent
      link="link1" />
    <child
      link="link2" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link3">
    <inertial>
      <origin
        xyz="-0.0050453 -0.11121 3.4154E-06"
        rpy="0 0 0" />
      <mass
        value="0.96204" />
      <inertia
        ixx="0.0010146"
        ixy="4.5981E-05"
        ixz="6.2628E-08"
        iyy="0.00054242"
        iyz="-4.3697E-08"
        izz="0.0010724" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link3.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link3.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint3"
    type="revolute">
    <origin
      xyz="0 -0.02535 0.24365"
      rpy="-1.5708 0 -1.5708" />
    <parent
      link="link2" />
    <child
      link="link3" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link4">
    <inertial>
      <origin
        xyz="0.0059208 -0.0007977 2.6694E-07"
        rpy="0 0 0" />
      <mass
        value="0.32519" />
      <inertia
        ixx="0.00019459"
        ixy="1.8337E-05"
        ixz="1.3898E-10"
        iyy="0.00019909"
        iyz="1.2329E-09"
        izz="0.00022621" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link4.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link4.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint4"
    type="revolute">
    <origin
      xyz="-0.0834 -0.213 0"
      rpy="-3.1416 0 0" />
    <parent
      link="link3" />
    <child
      link="link4" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link5">
    <inertial>
      <origin
        xyz="0.0059208 0.00079771 -2.3761E-07"
        rpy="0 0 0" />
      <mass
        value="0.32519" />
      <inertia
        ixx="0.00019459"
        ixy="-1.8338E-05"
        ixz="-2.0382E-10"
        iyy="0.00019909"
        iyz="1.211E-09"
        izz="0.00022621" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link5.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link5.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint5"
    type="revolute">
    <origin
      xyz="0 0.0834 0"
      rpy="0 0 -1.5708" />
    <parent
      link="link4" />
    <child
      link="link5" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
  <link
    name="link6">
    <inertial>
      <origin
        xyz="4.7334E-10 0.00010334 -0.021073"
        rpy="0 0 0" />
      <mass
        value="0.11536" />
      <inertia
        ixx="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>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link6.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 1 1 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://UR3/meshes/link6.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="joint6"
    type="revolute">
    <origin
      xyz="0 -0.0409 0"
      rpy="1.5708 0.2207 3.1416" />
    <parent
      link="link5" />
    <child
      link="link6" />
    <axis
      xyz="1 0 0" />
    <limit
      lower="-3.14"
      upper="3.14"
      effort="100"
      velocity="1" />
  </joint>
</robot>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

信号和槽机制的轻量级实现,sigslot 库介绍及使用

Qt中的信号与槽机制很好用&#xff0c;然而只在Qt环境中。在现代 C 编程中&#xff0c;对象间的通信是一个核心问题。为了解决这个问题&#xff0c;许多库提供了信号和槽&#xff08;Signals and Slots&#xff09;机制。今天推荐分享一个轻量级的实现&#xff1a;sigslot 库。…

AWS CDN新增用户ip 地区 城市 响应头

1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数&#xff0c;应用你写的这个函数 function handler(event) {var request event.request;var respon…

全国农产品地理标志登记汇总表(截至2022年2月25日)

数据来源&#xff1a;自主整理 数据范围&#xff1a;省级层面 数据数量&#xff1a;3510条数据指标&#xff1a; 本数据展示了截至2022年2月25日的全国农产品地理标志登记汇总表&#xff0c;具体指标展示如下表&#xff1a; 序号 年份 产品名称 所在地域 证书持有人…

【每日刷题】Day81

【每日刷题】Day81 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 日期累加_牛客题霸_牛客网 (nowcoder.com) 2. 打印日期_牛客题霸_牛客网 (nowcoder.com) 3. 2956.…

分享两个性价比极高的SSR方案

最近总监提出我们公司运营的一个网站运营数据有点差&#xff0c;亟待提升该网站的SEO&#xff08;搜索引擎优化&#xff09;体验。不然自然流量着实有点少&#xff0c;全靠氪金买百度付费流量&#xff0c;成本太高&#xff0c;显然不太现实。但是当时技术选型的时候并未考虑到S…

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

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

解析 Mira :基于 Web3,让先进的 AI 技术易于访问和使用

“Mira 平台正在以 Web3 的方式解决当前 AI 开发面临的复杂性问题&#xff0c;同时保护 AI 贡献者的权益&#xff0c;让他们可以自主拥有并货币化自己的模型、数据和应用&#xff0c;以使先进的 AI 技术更加易于访问和使用。” AI 代表着一种先进的生产力&#xff0c;它通过深…

UE4-初见虚幻引擎

一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目&#xff0c;但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…

mindspore打卡第24天之LSTM+CRF序列标注

LSTMCRF序列标注 概述 序列标注指给定输入序列&#xff0c;给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取&#xff0c;包括分词(Word Segmentation)、词性标注(Position Tagging)、命名实体识别(Named Entity Recognition, NER)等。以命名实…

Host碰撞实验

目录 Host碰撞原理 Host碰撞判断技巧 Host碰撞检测方法 Host碰撞实验步骤 从攻击者的视角来进行资产的梳理&#xff0c;采用全端口扫描子域名收集的方式&#xff0c;识别所有的企业资产暴露面。但即使是这样&#xff0c;往往会因为配置错误或是未及时回收等原因&#xff0c…

C++ std::lock_guard和 std::unique_lock

二者都是 C 标准库中用于管理互斥锁&#xff08;mutex&#xff09;的 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;机制的类。这些类可以确保互斥锁在构造时被获取&#xff0c;在析构时被释放&#xff0c;从而避免死锁和资源泄漏问题。不过&#xff0c…

【数据结构取经之路】二叉搜索树的实现

目录 前言 二叉搜索树 概念 性质 二叉搜索树的实现 结点的定义 插入 查找 删除 二叉搜索树完整代码 前言 首先&#xff0c;二叉搜索树是一种数据结构&#xff0c;了解二叉搜素树有助于理解map和set的特性。 二叉搜索树 概念 二叉搜索树又称二叉排序树&#xff0c…

服务器操作集合

服务器使用PC作为代理访问外网 1、PC上启动代理&#xff0c;比如nginx 下载nginx&#xff1a;http://nginx.org/en/download.html 修改配置文件&#xff0c;在conf下&#xff1a; http {include mime.types;default_type application/octet-stream; sendfile …

C++深度解析教程笔记12ok-继承,继承的构造与析构,同名覆盖

C深度解析教程笔记12 第43课 - 继承的概念和意义实验-类的组合实验-类的继承实验-子类与父类的构造顺序小结 第44课 - 继承中的访问级别实验-子类直接访问父类非公成员&#xff08;error&#xff09;实验-子类访问父类非公成员protected实验-复杂的例子bug 小结 第45课 - 不同的…

如何构建全生命周期的安全体系架构来确保容器的安全?

容器技术在云原生应用和微服务架构中得到了广泛应用&#xff0c;其轻量、灵活和高效的特点使其成为现代IT环境中的重要工具。然而&#xff0c;尽管容器带来了许多优势&#xff0c;但其安全性问题也不容忽视。接下来跟随博主一起探索如何构建全生命周期的安全体系架构以确保容器…

《算法笔记》总结No.7——二分(多例题详解版)

一.二分查找 目前有一个有序数列&#xff0c;举个例子&#xff0c;假设是1~1000&#xff0c;让我们去查找931这个数字&#xff0c;浅显且暴力的做法就是直接从头到尾遍历一遍&#xff0c;直到找到931为止。当n非常大&#xff0c;比如达到100w时&#xff0c;这是一个非常大的量级…

经纬恒润底盘控制产品R-EPS成功量产

近日&#xff0c;经纬恒润开发的齿条式电动助力转向系统R-EPS&#xff08;Rack-Electronic Power Steering&#xff09;搭载某新能源车企中高端MPV车型&#xff0c;成功量产落地。 该产品采用恒润Double Pinion/Rack平台级的软硬件方案&#xff0c;模块复用程度更高&#xff0c…

5.4 软件工程-系统设计

系统设计 - 概述 设计软件系统总体结构 数据结构及数据库设计 编写概要设计文档、评审 详细设计的基本任务 真题

DHCP服务、FTP服务

一、DHCP 1.1 DHCP是什么 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…

pc端注册页面 密码校验规则

1.密码校验规则 格应包含大小写字母、数字和特殊符号,长度为8-20 var validateRetrievePassword (rule, value, callback) > {let reg /^(?.*[A-Za-z])(?.*\d)(?.*[~!#$%^&*()_<>?:"{},.\/\\;[\]])[A-Za-z\d~!#$%^&*()_<>?:"{},.\/\\;…