欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

1.Moveit 创建六轴机械臂模型

发布时间:2024/3/24 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 1.Moveit 创建六轴机械臂模型 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、从URDF到XACRO

1.声明xml与xacro

<?xml version="1.0"?> <robot name="arm" xmlns:xacro="http://ros.org/wiki/xacro">

2.声明模型所需要的宏,今后便于修改。通过修改对应宏的参数即可对全局参数进行修改。

<!-- Defining the colors used in this robot --><material name="Black"><color rgba="0 0 0 1"/></material><material name="White"><color rgba="1 1 1 1"/></material><material name="Blue"><color rgba="0 0 1 1"/></material><material name="Red"><color rgba="1 0 0 1"/></material><!-- Constants --><xacro:property name="M_PI" value="3.14159"/><!-- link1 properties --><xacro:property name="link1_width" value="0.03" /><xacro:property name="link1_len" value="0.10" /><!-- link2 properties --><xacro:property name="link2_width" value="0.03" /><xacro:property name="link2_len" value="0.14" /><!-- link3 properties --><xacro:property name="link3_width" value="0.03" /><xacro:property name="link3_len" value="0.22" /><!-- link4 properties --><xacro:property name="link4_width" value="0.025" /><xacro:property name="link4_len" value="0.06" /><!-- link5 properties --><xacro:property name="link5_width" value="0.03" /><xacro:property name="link5_len" value="0.06" /><!-- link6 properties --><xacro:property name="link6_width" value="0.04" /><xacro:property name="link6_len" value="0.02" /><!-- Left gripper --><xacro:property name="left_gripper_len" value="0.08" /><xacro:property name="left_gripper_width" value="0.01" /><xacro:property name="left_gripper_height" value="0.01" /><!-- Right gripper --><xacro:property name="right_gripper_len" value="0.08" /><xacro:property name="right_gripper_width" value="0.01" /><xacro:property name="right_gripper_height" value="0.01" /><!-- Gripper frame --><xacro:property name="grasp_frame_radius" value="0.001" /><!-- Inertial matrix --><xacro:macro name="inertial_matrix" params="mass"><inertial><mass value="${mass}" /><inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="0.5" iyz="0.0" izz="1.0" /></inertial></xacro:macro>

(1)颜色宏。

(2)机器人尺寸。

(3)其中注意惯性矩阵的宏,惯性矩阵通过网上查询,mass为质量大小,单位为kg。

3.关节与杆,六个关节,7个杆(多个base_link)

<!-- /// bottom_joint // --><joint name="bottom_joint" type="fixed"><origin xyz="0 0 0" rpy="0 0 0" /><parent link="base_link"/><child link="bottom_link"/></joint><link name="bottom_link"><visual><origin xyz=" 0 0 -0.02" rpy="0 0 0"/><geometry><box size="1 1 0.02" /></geometry><material name="Brown" /></visual><collision><origin xyz=" 0 0 -0.02" rpy="0 0 0"/><geometry><box size="1 1 0.02" /></geometry></collision><xacro:inertial_matrix mass="500"/></link><!-- / BASE LINK // --><link name="base_link"><visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.1 0.1 0.04" /></geometry><material name="White" /></visual><collision><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="0.1 0.1 0.04" /></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint1" type="revolute"><parent link="base_link"/><child link="link1"/><origin xyz="0 0 0.02" rpy="0 ${M_PI/2} 0" /><axis xyz="-1 0 0" /><limit effort="300" velocity="1" lower="-2.96" upper="2.96"/><dynamics damping="50" friction="1"/></joint><!-- / LINK1 // --><link name="link1" ><visual><origin xyz="-${link1_len/2} 0 0" rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link1_width}" length="${link1_len}"/></geometry><material name="Blue" /></visual><collision><origin xyz="-${link1_len/2} 0 0" rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link1_width}" length="${link1_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint2" type="revolute"><parent link="link1"/><child link="link2"/><origin xyz="-${link1_len} 0 0.0" rpy="-${M_PI/2} 0 ${M_PI/2}" /><axis xyz="1 0 0" /><limit effort="300" velocity="1" lower="-2.35" upper="2.35" /><dynamics damping="50" friction="1"/></joint><!-- /// LINK2 // --><link name="link2" ><visual><origin xyz="0 0 ${link2_len/2}" rpy="0 0 0" /><geometry><cylinder radius="${link2_width}" length="${link2_len}"/></geometry><material name="White" /></visual><collision><origin xyz="0 0 ${link2_len/2}" rpy="0 0 0" /><geometry><cylinder radius="${link2_width}" length="${link2_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint3" type="revolute"><parent link="link2"/><child link="link3"/><origin xyz="0 0 ${link2_len}" rpy="0 ${M_PI} 0" /><axis xyz="-1 0 0" /><limit effort="300" velocity="1" lower="-2.62" upper="2.62" /><dynamics damping="50" friction="1"/></joint><!-- / LINK3 / --><link name="link3" ><visual><origin xyz="0 0 -${link3_len/2}" rpy="0 0 0" /><geometry><cylinder radius="${link3_width}" length="${link3_len}"/></geometry><material name="Blue" /></visual><collision><origin xyz="0 0 -${link3_len/2}" rpy="0 0 0" /><geometry><cylinder radius="${link3_width}" length="${link3_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint4" type="revolute"><parent link="link3"/><child link="link4"/><origin xyz="0.0 0.0 -${link3_len}" rpy="0 ${M_PI/2} ${M_PI}" /><axis xyz="1 0 0" /><limit effort="300" velocity="1" lower="-2.62" upper="2.62" /><dynamics damping="50" friction="1"/></joint><!-- /// LINK4 --><link name="link4" ><visual><origin xyz="${link4_len/2} 0 0" rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link4_width}" length="${link4_len}"/></geometry><material name="Black" /></visual><collision><origin xyz="${link4_len/2} 0 0" rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link4_width}" length="${link4_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint5" type="revolute"><parent link="link4"/><child link="link5"/><origin xyz="${link4_len} 0.0 0.0" rpy="0 ${M_PI/2} 0" /><axis xyz="1 0 0" /><limit effort="300" velocity="1" lower="-2.62" upper="2.62" /><dynamics damping="50" friction="1"/></joint><!-- // LINK5 / --><link name="link5"><visual><origin xyz="0 0 ${link4_len/2}" rpy="0 0 0" /><geometry><cylinder radius="${link5_width}" length="${link5_len}"/></geometry><material name="White" /></visual><collision><origin xyz="0 0 ${link4_len/2} " rpy="0 0 0" /><geometry><cylinder radius="${link5_width}" length="${link5_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="joint6" type="revolute"><parent link="link5"/><child link="link6"/><origin xyz="0 0 ${link4_len}" rpy="${1.5*M_PI} -${M_PI/2} 0" /><axis xyz="1 0 0" /><limit effort="300" velocity="1" lower="-6.28" upper="6.28" /><dynamics damping="50" friction="1"/></joint><!-- LINK6 / --><link name="link6"><visual><origin xyz="${link6_len/2} 0 0 " rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link6_width}" length="${link6_len}"/></geometry><material name="Blue" /></visual><collision><origin xyz="${link6_len/2} 0 0" rpy="0 ${M_PI/2} 0" /><geometry><cylinder radius="${link6_width}" length="${link6_len}"/></geometry></collision><xacro:inertial_matrix mass="1"/></link><joint name="finger_joint1" type="prismatic"><parent link="link6"/><child link="gripper_finger_link1"/><origin xyz="0.0 0 0" /><axis xyz="0 1 0" /><limit effort="100" lower="0" upper="0.06" velocity="1.0"/><dynamics damping="50" friction="1"/></joint>

(1)<joint>: 定义joint的名字、定义joint的类别、定义joint的起始位姿,定义所连接杆的父子关系。<axis xyz=" ">对旋转轴方向进行了定义。通过<limit>对力、速度、角度的限制(弧度制)。通过<dynamics>对动力学参数阻尼与摩擦进行了定义。

(2)<link>:分<visual>可视化部分与<collision>碰撞部分。其中可视化部分定义了杆模型建立的起始位置、几何形状与颜色(gazebo需要重新定义)。其中碰撞部分定义了碰撞包围盒的起始位置与几何形状。同时此处的碰撞矩阵<inertial>部分通过宏定义的方式只对质量mass(kg)进行了修改。

4.加入gazebo属性

<!-- / Gazebo // --><gazebo reference="bottom_link"><material>Gazebo/White</material></gazebo><gazebo reference="base_link"><material>Gazebo/White</material></gazebo><gazebo reference="link1"><material>Gazebo/Blue</material></gazebo><gazebo reference="link2"><material>Gazebo/White</material></gazebo><gazebo reference="link3"><material>Gazebo/Blue</material></gazebo><gazebo reference="link4"><material>Gazebo/Black</material></gazebo><gazebo reference="link5"><material>Gazebo/White</material></gazebo><gazebo reference="link6"><material>Gazebo/Blue</material></gazebo><gazebo reference="gripper_finger_link1"><material>Gazebo/White</material></gazebo><gazebo reference="gripper_finger_link2"><material>Gazebo/White</material></gazebo><!-- Transmissions for ROS Control --><xacro:macro name="transmission_block" params="joint_name"><transmission name="tran1"><type>transmission_interface/SimpleTransmission</type><joint name="${joint_name}"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface></joint><actuator name="motor1"><hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface><mechanicalReduction>1</mechanicalReduction></actuator></transmission></xacro:macro><xacro:transmission_block joint_name="joint1"/><xacro:transmission_block joint_name="joint2"/><xacro:transmission_block joint_name="joint3"/><xacro:transmission_block joint_name="joint4"/><xacro:transmission_block joint_name="joint5"/><xacro:transmission_block joint_name="joint6"/><xacro:transmission_block joint_name="finger_joint1"/><!-- ros_control plugin --><gazebo><plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"><robotNamespace>/arm</robotNamespace></plugin></gazebo>

(1)gazebo需要重新定义材料颜色。

(2)通过编写宏与使用宏,为每个joint提供传动装置,注意硬件抽象的接口。

(3)调用ros_control插件,并再机器人命名空间对机器人进行命名。ros_control插件是libgazebo_ros_control.so。

5.机械臂模型可视化

通过rviz可视化显示。首先编写launch文件,依次完成

(1)加载机器人模型参数,在相应位置添加正确的路径。

(2)关节控制器GUI调用,小工具——滑动条。

(3)joint_state_publisher,注意加上_gui,其作用是发布关节状态(除了fixed),关节状态发布者。robot_state_publisher,作用是将机器人各个link和joint之间关系通过TF形式整理成三维姿态信息并发布。

(4)运行rviz。

launch><arg name="model" /><!-- 加载机器人模型参数 --><param name="robot_description" command="$(find xacro)/xacro --inorder $(find marm_description)/urdf/arm.xacro" /><!-- 设置GUI参数,显示关节控制插件 --><param name="use_gui" value="true"/><!-- 运行joint_state_publisher节点,发布机器人的关节状态 --><node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" /><!-- 运行robot_state_publisher节点,发布tf --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" /><!-- 运行rviz可视化界面 --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find marm_description)/urdf.rviz" required="true" /> </launch>

原书基于ubuntu16.04版本kinetic版本,需要小改。

6.运行launch文件

出现警告,但rviz仍正常运行:
 

[ WARN] [1652365357.956639182]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.

(1)robot_state_publisher通过TF方式发布link与joint的三维位姿。勾选TF。 

 (2)GUI界面的使用

拖动条调整除fixed以外的关节的角度。

Randomize随机位姿。

Center初始位姿。

总结

以上是生活随笔为你收集整理的1.Moveit 创建六轴机械臂模型的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。