在某宝上买了个机械臂,想用来和ros系统通讯玩一玩。我简单学习了一下硬件,现在开始软件方面的学习。第一步先在ros系统中对机械臂进行虚拟仿真,因此需要导入模型。手写六自由度机械臂的urdf或者xacro文件太费劲,好在SolidWorks出了一款sw_urdf_exporter插件,可以自动生成urdf及展示用的launch文件,非常方便。
sw_urdf_exporter插件
下载链接及安装详情可以看官方文档。
安装完成后,进入sw界面加载该插件
点选SW2URDF插件选项框并点击确定,插件即可成功加载。
给机械臂添加坐标系和旋转轴
机械臂如图所示
第一步,添加点,该点作为后面坐标原点的位置参考点。参考几何体->点,然后根据几何关系选定点的位置。
第二步,添加轴,该轴即为joint的转轴,与即将建立的坐标系的z轴重合。参考几何体->基准轴,同样根据几何关系选定基准轴位置。
第三步,添加坐标系。参考几何体->坐标系,坐标系原点位置为第一步添加的点的位置,z轴与第二步添加的基准轴重合。
最终建立的坐标系如图所示,其中坐标系3是base_link上的坐标系,z轴的方向需要与机械臂直立的方向一致,否则会在rviz中倒立显示。坐标系4、5、6、8、9为机械臂连杆上的五个旋转joint坐标系,坐标系10为旋转的finger坐标系。
在URDF界面设置坐标系和旋转轴
工具->File->Export as Urdf,下面是具体界面。其中,Link Components部分选择该link部分包含的零件,Number of Child links即为子连杆的数量,这里每个link的子连杆均为1。
各关节类型均为revolute,各选项点选完毕后,点击“preview and export”
在点击“preview and export”后,会出现如下界面,按图示填写每个关节的限位值,注意是弧度。该界面中的内容可以后期在生成的urdf文件中修改。
生成package包
注意该包文件需要是小写字母命名。
将生成的包复制到工作空间内,新建myrobot_description.urdf.xacro文件,内容如下:
<?xml version="1.0"?>
<robot name="myrobot_description" xmlns:xacro="http://www.ros.org/wiki/xacro">
……
原myrobot_description.urdf文件的内容
……
<!--/// 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="base_link_to_link_02"/>
<xacro:transmission_block joint_name="link_02_to_link_03"/>
<xacro:transmission_block joint_name="link_03_to_link_04"/>
<xacro:transmission_block joint_name="link_04_to_link_05"/>
<xacro:transmission_block joint_name="link_05_to_link_06"/>
<xacro:transmission_block joint_name="finger_joint"/>
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/myrobot_description</robotNamespace>
</plugin>
</gazebo>
</robot>
display.launch内容如下:
<launch>
<arg
name="urdf_file" default="$(find xacro)/xacro.py '$(find myrobot_description)/urdf/myrobot_description.urdf.xacro'" />
<arg
name="gui"
default="True" />
<param
name="robot_description"
command="$(arg urdf_file)" />
<param
name="use_gui"
value="$(arg gui)" />
<node
name="joint_state_publisher"
pkg="joint_state_publisher"
type="joint_state_publisher" />
<node
name="robot_state_publisher"
pkg="robot_state_publisher"
type="state_publisher" />
<node
name="rviz"
pkg="rviz"
type="rviz"
args="-d $(find myrobot_description)/urdf.rviz" />
</launch>
测试
使用命令
roslaunch display.launch
图纸我已经上传了,下面是链接供大家下载使用~
另外提醒一点,这个模型在ros中建模tf树会出现问题,后面我是1:1按照图纸的尺寸,用SolidWorks重新建了个机械臂。如果可能大家还是自己建一个,很简单,知道每个轴尺寸即可~