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值、長度 、高度和寬度:

<xacro:property name="deg_to_rad" value="0.01745329251994329577"/>
<xacro:property name="M_PI" value="3.14159"/>
 <xacro:property name="elbow_pitch_len" value="0.22" />
<xacro:property name="elbow_pitch_width" value="0.04" />
 <xacro:property name="elbow_pitch_height" value="0.04" />

 

2.使用宏

在以下代碼中定義了宏,避免重復並使代碼更加簡短。如下:

 85    <xacro:macro name="inertial_matrix" params="mass">
 86       <inertial>
 87         <mass value="${mass}" />
 88         <inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="0.5" iyz="0.0" izz="1.    0" />
 89       </inertial>
 90    </xacro:macro>

 這是慣性矩陣宏的定義,其中我們用mass作為參數。

92    <xacro:macro name="transmission_block" params="joint_name">
 93       <transmission name="tran1">
 94         <type>transmission_interface/SimpleTransmission</type>
 95         <joint name="${joint_name}">
 96           <hardwareInterface>hardware_interface/PositionJointInterface</ha    rdwareInterface>
 97         </joint>
 98         <actuator name="motor1">
 99           <hardwareInterface>hardware_interface/PositionJointInterface</ha    rdwareInterface>
100           <mechanicalReduction>1</mechanicalReduction>
101         </actuator>
102       </transmission>
103    </xacro:macro>

 在這段代碼中我們可以看到使用transmission(傳動)標簽的定義。

transmission標簽將關節與執行機構相關聯。它定義了我們在某一關節中使用的傳動類型,馬達的類型即參數。

它還定義了我們與ROS控制器通信時使用的硬件接口的類型。

 

3.包含其他xacro文件

我們可以通過使用xacro : include標簽包含傳感器的xacro定義來擴展xacro的功能。下面代碼片段展示了如何在機器人xacro中包含傳感器定義:

 <xacro:include filename="$(find mastering_ros_robot_description_pkg)/urd    f/sensors/xtion_pro_live.urdf.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   <joint name="finger_joint1" type="prismatic">
441     <parent link="gripper_roll_link"/>
442     <child link="gripper_finger_link1"/>
443     <origin xyz="0.0 0 0" />
444     <axis xyz="0 1 0" />
445       <limit effort="100" lower="0" upper="0.03" velocity="1.0"/>
446 
447 
448       <safety_controller k_position="20"
449                          k_velocity="20"
450                          soft_lower_limit="${-0.15 }"
451                          soft_upper_limit="${ 0.0 }"/>
452 
453 
454     <dynamics damping="50" friction="1"/>
455   </joint>                      

 

 在這里,夾爪的第一個關節由gripper_roll_link和gripper_finger_link1構成,第二個關節由gripper_roll_link和gripper_finger_link2構成。

連接結構如圖所示:

 

 

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

建立好機器人的模型后,我們可以在RViz中查看設計好的xacro文件,並使用關節狀態發布者(joint state publisher)節點控制每個關節,使用機器人狀態發布者(robot state publisher)節點發布機器人狀態。

可以使用名為view_arm.launch的啟動文件去啟動機器人仿真,代碼如下:

 1 <launch>
 2     <arg name="model" />
 3     <!-- Parsing xacro and setting robot_description parameter -->
 4 
 5     <param name="robot_description" command="$(find xacro)/xacro --inorder    $(find mastering_ros_robot_description_pkg)/urdf/seven_dof_arm.xacro" />
 6 
 7 
 8     <!-- Setting gui parameter to true for display joint slider -->
 9     <param name="use_gui" value="true"/>
10 
11     <!-- Starting Joint state publisher node which will publish the joint v   alues -->
12     <node name="joint_state_publisher" pkg="joint_state_publisher" type="jo   int_state_publisher" />
13 
14     <!-- Starting robot state publish which will publish tf -->            
15     <node name="robot_state_publisher" pkg="robot_state_publisher" type="st   ate_publisher" />
16 
17     <!-- Launch visualization in rviz -->
18     <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mastering_ros_   robot_description_pkg)/urdf.rviz" required="true" />
19 
20 </launch>

 使用以下命令啟動URDF:

$ roslaunch mastering_ros_robot_description_pkg view_arm.launch

 該機器人將在RViz上顯示,且同時打開了關節狀態發布者(joint state publisher)的GUI

如圖所示:

 

 

理解關節狀態發布者
關節狀態發布者(joint state publisher)是一個ROS軟件包,常用於與機器人的每個關節進行交互。該軟件包包含joint_state_publisher節點,該節點將從URDF模型中找到非固定關節,

並以sersor_msgs/JointState的消息格式發布每一個關節的關節狀態值。

在前面的啟動文件view_arm.launsh中,我們啟動了joint_state_publisher節點並將一個命名為use_gui的參數設置為true,如下所示:

 

 9     <param name="use_gui" value="true"/>                     
10                               
11     <!-- Starting Joint state publisher node which will publish the joint values    -->
12     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_st   ate_publisher" />

 

 如果我們將use_gui設置為true,那么joint_state_publisher節點將顯示一個基於滑動條控件的窗口來控制每個關節。

關節的下限位值和上限位值將取自joint標簽內的limit標簽相關聯的上下限位數據。

 

理解機器人狀態發布者

機器人狀態發布者(robot state publisher)軟件包可以將機器人的狀態發布到tf,此軟件包訂閱了機器人的關節狀態,使用URDF模型的運動表示來發布

每個連桿的3D姿態,我們可以在啟動文件中使用以下代碼來實現機器人狀態發布者節點:

14     <!-- Starting robot state publish which will publish tf -->              
15     <node name="robot_state_publisher" pkg="robot_state_publisher" type="stat   e_publisher" />

 在前面的啟動文件view_arm.launch中,我們啟動了這個節點來發布機械臂的tf,我們可以通過點擊RViz上的tf選項可視化機器人的變換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM