前言
最近想加深ROS仿真机械臂的理解,所以笔者参考一些资料与博客,在ROS下搭个简单的三轴机械臂,在Rviz下实现各轴关节转动,如果后续有时间的话,可能会更新下Gazebo下仿真,如果时间不够的话,大家也可以看我之前配置ur10e配置夹爪及Gazebo仿真,上面有详细的配置过程。
创建工作空间
在ROS下创建一个叫my_robot的工作空间
mkdir my_robot
cd my_robot
mkdir src
cd src
catkin_create_pkg three_axis_robot roscpp rospy urdf
cd ~/my_robot
catkin_make
echo "source ~/my_robot/devel/setup.bash" >> ~/.bashrc
source devel/setup.bash
机械臂建模讲解
机械臂的模型如下图所示
从图上可以看到机械臂有4个连杆和3个关节,每个关节连接一个父节点和一个子节点。
然后,确定机械臂的位置与偏移信息,位置采用的都是相对偏移量。其中关节有不同的类型,这里关节0为固定关节(fixed),关节1、2均为无限位旋转关节(continuous)。
机械臂URDF文件及launch文件
cd three_axis_robot/
mkdir urdf
在three_axis_robot文件夹下创建一个robot.urdf文件
<robot name="robot">
<link name="base">
<visual>
<geometry>
<box size="2 2 2"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 1"/>
</visual>
</link>
<link name="link1">
<visual>
<geometry>
<box size="0.5 0.5 3"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 1.5"/>
</visual>
</link>
<link name="link2">
<visual>
<geometry>
<box size="0.5 0.5 3"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 1.5"/>
</visual>
</link>
<link name="link3">
<visual>
<geometry>
<box size="0.5 0.5 3"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 1.5"/>
</visual>
</link>
<joint name="joint0" type="continuous">
<parent link="base"/>
<child link="link1"/>
<origin rpy="0 0 0" xyz="0 0 2"/>
<axis xyz="1 0 0" />
</joint>
<joint name="joint1" type="continuous">
<parent link="link1"/>
<child link="link2"/>
<origin rpy="0 0 0" xyz="0 0 3"/>
<axis xyz="1 0 0" />
</joint>
<joint name="joint2" type="continuous">
<parent link="link2"/>
<child link="link3"/>
<origin rpy="0 0 0" xyz="0 0 3"/>
<axis xyz="1 0 0" />
</joint>
</robot>
为了能使模型在Rviz界面下显示,所以需要一个启动Rviz文件,创建一个名为launch的文件。在launch文件夹下新建robot.launch文件。这将启动joint_state_publisher和robot_state_publisher节点。joint_state_publisher节点将发布所有的联合状态。它有gui界面,您可以更改每个关节角度。robot_state_publisher节点将以机器人的关节角度为输入,发布各个连杆的三维姿态,代码如下。
<launch>
<arg name="model" />
<param name="robot_description" textfile="$(find three_axis_robot)/urdf/robot.urdf" />
<param name="use_gui" value="true"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find three_axis_robot)/urdf/rviz.rviz" required="true" />
</launch>
Rivz可视化显示
现在,做好上面的工作后,你再一次编译下工作空间,然后用下列指令启动界面
roslaunch three_axis_robot robot.launch
启动后,你会发现有报错,显示内容如下,且关节控制器GUi并不能控制机械臂运动。
别慌,关闭Rviz界面,点击保存该界面,然后你会看到生成一个rviz.rviz的文件,我们只需要修改下这个文件里的内容就行
修改内容如下
改为Class: rviz/RobotModel,下面还有一处也要改Class类别。
然后继续启动launch文件
roslaunch three_axis_robot robot.launch
这样就可以加载机械臂的模型,并且操控关节控制器Gui去玩转机械臂了。