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>