做网站专业的公司,网站重新安装,百家号权重查询,有域名了网站怎么建设机械手URDF文件的编写
我们用urdf文件来描述我们的机械手的外观以及物理性能。这里为了简便#xff0c;就只用了基本的圆柱、立方体了。追求美观的朋友#xff0c;还可以用dae文件来描述机械手的外形。
import re
def remove_comments(text):pattern r!--(.*?)--…
机械手URDF文件的编写
我们用urdf文件来描述我们的机械手的外观以及物理性能。这里为了简便就只用了基本的圆柱、立方体了。追求美观的朋友还可以用dae文件来描述机械手的外形。
import re
def remove_comments(text):pattern r!--(.*?)--return re.sub(pattern, , text, flagsre.DOTALL)
文件six_arm.urdf
?xml version1.0?
robot namesix_arm!-- Base link --link namebase_linkvisualgeometrybox size0.1 0.1 0.1//geometryorigin rpy0 0 0 xyz0 0 0.05/material namebluecolor rgba0 0 1.0 1//material/visualcollisiongeometrybox size0.1 0.1 0.1//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value10/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Link 1 --link namelink1visualgeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05/material namegreencolor rgba0 0.8 0 1//material/visualcollisiongeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 1: rotation around X-axis --joint namejoint1 typecontinuousparent linkbase_link/child linklink1/axis xyz0 0 1/origin xyz0 0 0.1 rpy0 0 0//joint!-- Link 2 --link namelink2visualgeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05/material nameredcolor rgba0.8 0 0 1//material/visualcollisiongeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 2: rotation around Y-axis --joint namejoint2 typecontinuousparent linklink1/child linklink2/axis xyz1 0 0/origin xyz0 0 0.1//joint!-- Link 3 --link namelink3visualgeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05/material nameyellowcolor rgba0.8 0.8 0 1//material/visualcollisiongeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 3: rotation around x-axis --joint namejoint3 typecontinuousparent linklink2/child linklink3/axis xyz1 0 0/origin xyz0 0 0.1//joint!-- Link 4 --link namelink4visualgeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05/material namegreencolor rgba0 0.8 0 1//material/visualcollisiongeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 4: rotation around X-axis --joint namejoint4 typecontinuousparent linklink3/child linklink4/axis xyz0 1 0/origin xyz0 0 0.1//joint!-- Link 5 --link namelink5visualgeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05/material namepurplecolor rgba0.8 0 0.8 1//material/visualcollisiongeometrycylinder length0.1 radius0.03//geometryorigin rpy0 0 0 xyz0 0 0.05//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 5: rotation around Y-axis --joint namejoint5 typecontinuousparent linklink4/child linklink5/axis xyz1 0 0/origin xyz0 0 0.1//joint!-- Link 6 --link namelink6visualgeometrybox size0.1 0.1 0.2//geometryorigin rpy0 0 0 xyz0 0 0.1/material namepinkcolor rgba0.8 0.4 0.8 1//material/visualcollisiongeometrybox size0.1 0.1 0.2//geometryorigin rpy0 0 0 xyz0 0 0.1//collisioninertialmass value0.2/inertia ixx0 ixy0 ixz0 iyy0 iyz0 izz0//inertial/link!-- Joint 6: rotation around Z-axis --joint namejoint6 typecontinuousparent linklink5/child linklink6/axis xyz0 0 1/origin xyz0 0 0.1//joint!-- Used for fixing robot to Gazebo base_link 将机械手的基座固定在世界坐标上--link nameworld/joint namefixed typefixedparent linkworld/child linkbase_link//jointgazebo referencebase_linkmaterialGazebo/Black/materialgravitytrue/gravityselfCollidefalse/selfCollide/gazebogazebo referencelink1materialGazebo/Gray/materialselfCollidefalse/selfCollide/gazebogazebo referencelink2materialGazebo/Red/materialselfCollidefalse/selfCollide/gazebogazebo referencelink3materialGazebo/Blue/material/gazebogazebo referencelink4materialGazebo/Green/material/gazebogazebo referencelink5materialGazebo/Yellow/material/gazebogazebo referencelink6materialGazebo/Orange/material/gazebo!-- 在运行demo.launch.py时需要注释这个ros2_control节点因为它使用了xxx.ros2_control.xacro来生成了ros2_control节点--ros2_control nameGazeboSystem typesystemhardwareplugingazebo_ros2_control/GazeboSystem/plugin/hardwarejoint namejoint1command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//jointjoint namejoint2command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//jointjoint namejoint3command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//jointjoint namejoint4command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//jointjoint namejoint5command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//jointjoint namejoint6command_interface namepositionparam namemin-1/paramparam namemax1/param/command_interfacestate_interface namepositionparam nameinitial_value0.0/param/state_interfacestate_interface namevelocity//joint/ros2_controlgazeboplugin filenamelibgazebo_ros2_control.so namegazebo_ros2_controlparameters$(find mybot)/config/ros2_controllers.yaml/parametersrobot_param_noderobot_state_publisher/robot_param_node/plugin/gazebo/robot机械手的外型
可以在vscode中打开这个文件然后用插件就可以看到这个机械手的外形。 有同学不知道如何在vscode中查看urdf模型这里介绍一下 先安装vscode的ROS拓展 然后可以在urdf文件中右键–》command palette–》ROS:Preview URDF 机械手link的inertial的设置
真正设置的话有公式自己可以参考一下。 urdf里面的link必须要有旋转惯量矩阵‘intertial’的否则在gazebo里面导入模型urdf时会报下面的错。 [gazebo-1] [Err] [Model.cc:123] Error Code 23 Msg: FrameAttachedToGraph error, Non-LINK vertex with name [model] is disconnected; it should have 1 outgoing edge in MODEL attached_to graph.
ros2_control插件
该插件是在gazbo导入该模型文件时创建与Ros2交互的接口。 上面这个是之前的我现在更新成这样了主要是parameter节点不一样。用了$(find mybot)就方便一点。但是相应地launch文件中就要用xacro了。 上面的ros2_controllers.yaml文件是在下一步创建出来的先不用管。 同时ros2_control这个节点下的内容也是要和ros2_controllers.yaml对应的也可以先不管。 这个节点在开始阶段先注释掉否则会与通过moveit_setup_assistant创建的一个 fake_system 的 ros2_control冲突。 机械手与MoveIt的关联
通过前面的操作我们拥有了一个描述机械手的文件 six_arm.urdf接下来我们利用该文件创建一个可以利用MoveIt进行路径规划的“工程”。
建立一个文件夹myRobot然后再在此文件夹中建立一个src文件夹 然后进入src文件夹路径创建包
ros2 pkg create mybot_description --build-type ament_python 在 src/mybot_description文件夹下创建urdf文件夹然后把six_arm.urdf放进去如下图所示。 返回myRobot目录然后编译一下
colcon build from setuptools import setupfrom glob import glob #这里
import os #这里package_name mybot_descriptionsetup(namepackage_name,version0.0.0,packages[package_name],data_files[(share/ament_index/resource_index/packages,[resource/ package_name]),(share/ package_name, [package.xml]),(os.path.join(share, package_name, urdf), glob(urdf/**)), #这里],install_requires[setuptools],zip_safeTrue,maintaineryong,maintainer_emailyongtodo.todo,descriptionTODO: Package description,licenseTODO: License declaration,tests_require[pytest],entry_points{console_scripts: [],},
)最后启动一下