ROS中3D机器人建模(四)

一.创建一个7-DOF机械臂机器人

创建一个名为seven_dof_arm.xacro的文件,写入相应的代码,其关节名称如下:

bottom_joint

shoulder_pan_joint

shoulder_pitch_joint

elbow_roll_joint

elbow_pitch_joint

wrist_roll_joint

wrist_pitch_joint

gripper_roll_joint

finger_joint1

finger_joint2

 

二.解析7-DOF机械臂的xacro模型

我们将在这个机器人上定义10个连杆和9个关节,在机器人夹爪中定义2个连杆和2个关节。

1.使用常量

在xacro中使用常量可以让机器人的描述更简短、更可读。我们定义了每个连杆的角度-弧度换系数、PI值、长度 、高度和宽度:



 

 

 

2.使用宏

在以下代码中定义了宏,避免重复并使代码更加简短。如下:

 85    
 86       
 87         
 88         
 89       
 90    

 这是惯性矩阵宏的定义,其中我们用mass作为参数。

92    
 93       
 94         transmission_interface/SimpleTransmission
 95         
 96           hardware_interface/PositionJointInterface
 97         
 98         
 99           hardware_interface/PositionJointInterface
100           1
101         
102       
103    

 在这段代码中我们可以看到使用transmission(传动)标签的定义。

transmission标签将关节与执行机构相关联。它定义了我们在某一关节中使用的传动类型,马达的类型即参数。

它还定义了我们与ROS控制器通信时使用的硬件接口的类型。

 

3.包含其他xacro文件

我们可以通过使用xacro : include标签包含传感器的xacro定义来扩展xacro的功能。下面代码片段展示了如何在机器人xacro中包含传感器定义:

 
在这里我们包含了一个叫做Asus Xtion pro的传感器的xacro定义,当解析xacro文件时,这个定义被展开

使用"$(find mastering_ros_robot_description_pkg)/urd    f/sensors/xtion_pro_live.urdf.xacro"/>我们就可以访问传感器的xacro定义,

其中find是查找当前mastering_ros_robot_description_pkg软件包的位置。

 

4.使用机器人夹爪

机器人夹爪用于抓取和放置物体,夹爪属于简单的连接类型,他有2个关节,每个关节都是滑动关节,以下是一个夹爪关节的joint定义:

 

440   
441     
442     
443     
444     
445       
446 
447 
448       
452 
453 
454     
455                         

 

 在这里,夹爪的第一个关节由gripper_roll_link和gripper_finger_link1构成,第二个关节由gripper_roll_link和gripper_finger_link2构成。

连接结构如图所示:

ROS中3D机器人建模(四)_第1张图片

 

 

5.在RViz中查看7-DOF机械臂

建立好机器人的模型后,我们可以在RViz中查看设计好的xacro文件,并使用关节状态发布者(joint state publisher)节点控制每个关节,使用机器人状态发布者(robot state publisher)节点发布机器人状态。

可以使用名为view_arm.launch的启动文件去启动机器人仿真,代码如下:

 1 
 2     
 3     
 4 
 5     
 6 
 7 
 8     
 9     
10 
11     
12     
13 
14                 
15     
16 
17     
18     
19 
20 

 使用以下命令启动URDF:

$ roslaunch mastering_ros_robot_description_pkg view_arm.launch

 该机器人将在RViz上显示,且同时打开了关节状态发布者(joint state publisher)的GUI

如图所示:

ROS中3D机器人建模(四)_第2张图片

 

 

理解关节状态发布者
关节状态发布者(joint state publisher)是一个ROS软件包,常用于与机器人的每个关节进行交互。该软件包包含joint_state_publisher节点,该节点将从URDF模型中找到非固定关节,

并以sersor_msgs/JointState的消息格式发布每一个关节的关节状态值。

在前面的启动文件view_arm.launsh中,我们启动了joint_state_publisher节点并将一个命名为use_gui的参数设置为true,如下所示:

 

 9                          
10                               
11     
12     

 

 如果我们将use_gui设置为true,那么joint_state_publisher节点将显示一个基于滑动条控件的窗口来控制每个关节。

关节的下限位值和上限位值将取自joint标签内的limit标签相关联的上下限位数据。

 

理解机器人状态发布者

机器人状态发布者(robot state publisher)软件包可以将机器人的状态发布到tf,此软件包订阅了机器人的关节状态,使用URDF模型的运动表示来发布

每个连杆的3D姿态,我们可以在启动文件中使用以下代码来实现机器人状态发布者节点:

14                   
15     

 在前面的启动文件view_arm.launch中,我们启动了这个节点来发布机械臂的tf,我们可以通过点击RViz上的tf选项可视化机器人的变换。

 

你可能感兴趣的:(ROS中3D机器人建模(四))