工具:ubuntu16.04 ros-kinetic anno 机械臂 单个urdf(xacro)文件
1.仿照官网panda的程序,先给一个 world 根节点,并且给出一个长方体作为机械臂大底座,该大底座的父级坐标系为 world 子坐标系为 底座名称 support
<link name="world"/>
<!-- box shaped table as base for the 2 arms -->
<link name="support">
<visual>
<origin xyz="0 0 0.5" rpy="0 0 0" />
<geometry>
<box size="1 2 0.5" />
</geometry>
<material name="White">
<color rgba="1.0 1.0 1.0 0.5" />
</material>
</visual>
<collision>
<origin xyz="0 0 0.5" rpy="0 0 0" />
<geometry>
<box size="1 2 1" />
</geometry>
</collision>
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="10.0"/>
<inertia ixx="0.001" ixy="0.0" ixz="0.001" iyy="0.0" iyz="0.0" izz="0.001"/>
</inertial>
</link>
<joint name="support_to_world" type="fixed">
<parent link="world"/>
<child link="support"/>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
</joint>
2.对原来的机械臂连杆进行优化,编写xacro,以函数的方式封装重复实现(另一个机械臂的连杆和关节)。
<xacro:macro name="宏名称" params="参数列表(多参数之间使用空格分隔)">
.....
参数调用格式: ${参数名}
</xacro:macro>
参照上述格式对机械臂关节和连杆重复命名的部分使用宏定义
<xacro:macro name="arm_robot" params="arm_id flag" >
</xacro:macro>
<xacro:arm_robot arm_id="arm_left" flag="1" />
<xacro:arm_robot arm_id="arm_right" flag="-1" />
将 link 和 joint 中 需要重复用到的部分进行调用,提高代码复用率
<link
name="${arm_id}_base_link">
3.对机械臂自身的base_link部分的xyz 和 rpy中值进行设置,因为前面给出大底座的长为1,要得到两个机械臂在之前定义的大底座上,xyz中y的值有所偏移,故将y的偏移量设置为<1,(次处给0.5)并用flag来给它+0.5或者-0.5,并且将z设置为大于等于大底座的高,
运行后发现两个机械臂是平行的方向,希望两个机械臂对着放置,故将rpy中的y(绕z轴旋转)设置为旋转90°或者-90°,可以根据自己的机械臂进行调整旋转角度,程序中要设置为弧度值(90°≈1.57)。
<joint name="${arm_id}_base_link_to_support" type="fixed">
<parent link="support"/>
<child link="${arm_id}_base_link"/>
<origin xyz="0.0 ${0.5*flag} 0.5" rpy="0.0 0.0 ${(-1)*flag* M_PI / 2}"/>
</joint>
4.修改launch文件
find 后 为功能包名,/robot_description/urdf/double_probot_g602.xacro为.xacro的路径
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find probot_g602_multiple_arms)/robot_description/urdf/double_probot_g602.xacro" />
launch中其他不需要改变
5.运行相关launch文件查看rviz中是否正常显示两个机械臂
roslaunch probot_g602_multiple_arms view_double_probot_g602.launch