一.创建一个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选项可视化机器人的变换。

ROS中3D机器人建模(四)的更多相关文章

  1. ROS中3D机器人建模(五)

    一.创建一个差速驱动移动机器人模型 前面我们已经创建了一个7-DOF机械臂机器人模型,接下来我们将创建一个差速机器人模型,差速轮式机器人在机器人底盘的两端安装两个轮子, 整个底盘由一个或两个脚轮支撑. ...

  2. ROS中3D机器人建模(一)

    一,机器人建模的ROS软件包 *urdf : 机器人建模最重要的ros软件包是urdf软件包.这个软件包包含一个用于统一机器人描述格式(URDF)的C++解析器,它是一个表示机器人模型的XML文件,还 ...

  3. ROS中测试机器人里程计信息

    在移动机器人建图和导航过程中,提供相对准确的里程计信息非常关键,是后续很多工作的基础,因此需要对其进行测试保证没有严重的错误或偏差.实际中最可能发生错误的地方在于机器人运动学公式有误,或者正负号不对, ...

  4. ROS中的3D建模机器人(三)

    一.利用xacro理解机器人建模 当我们创建复杂的机器人模型时,URDF的灵活性将会降低,URDF缺少的主要特性是简单的.可重用性,模块化和可编程性. URDF是一个单独的文件我们不能在它里面包含其他 ...

  5. ROS中的3D机器人建模(二)

    一,创建我们的第一个URDF模型 我们设计的第一个机器人模型是pan-and-tilt机械结构,代码如下 pan_tilt.urdf: 1 <?xml version="1.0&quo ...

  6. 机器人操作系统(ROS)教程22:ROS的3D可视化工具—rviz

    rviz是ROS中的一个3D可视化工具,有了它就可以把你用代码建的机器人模型转化为可视的3D模型. 首先需要安装: rosdep install rviz 然后编译rviz: rosmake rviz ...

  7. ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0

    ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0 ROS kinetic中的gazebo版本是7.0,有很多新的特性. 首先,启动gazebo: ~$ gaz ...

  8. ROS中发布激光扫描消息

    激光雷达工作时会先在当前位置发出激光并接收反射光束,解析得到距离信息,而后激光发射器会转过一个角度分辨率对应的角度再次重复这个过程.限于物理及机械方面的限制,激光雷达通常会有一部分“盲区”.使用激光雷 ...

  9. ROS学习笔记十二:使用gazebo在ROS中仿真

    想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...

随机推荐

  1. $Poj1821\ Fence\ $单调队列优化$DP$

    Poj   Acwing Description 有N块木板等待被M个工匠粉刷,每块木板至多被刷一次.第i个工匠要么不粉刷,要么粉刷包含木块Si的,长度不超过Li的连续的一段木板,每粉刷一块可以得到P ...

  2. Google被墙怎么办?

    Google被墙怎么办? 1 声明 请小伙伴们遵守法律法规,我们只是为了更好的查询学习资料. 想使用Google查询相关资料 想使用Google账号管理收藏夹 想使用Google商店安装软件 == 2 ...

  3. 「洛谷P3469」[POI2008]BLO-Blockade 解题报告

    P3469[POI2008]LO-Blockade 题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个 ...

  4. Java 中级 学习笔记 1 JVM的理解以及新生代GC处理流程

    写在最前 从毕业到现在已经过去了差不多一年的时间,工作还算顺利,但总是离不开CRUD ,我觉得这样下去肯定是不行的,温水煮青蛙,势必有一天,会昏昏沉沉的迷失在温水里.所以,需要将之前学习JAVA 当中 ...

  5. Ant Design Pro路由传值

    Ant Design Pro 路由传值 了解Ant Design Pro组件间通讯原理的小伙伴肯定都知道,两个页面之间可以通过Models进行传值,在以往的传值过程中,我都是直接将需要的值直接一股脑的 ...

  6. C# 使用nuget.exe发布类库及更新类库

    前景:在开发学习阶段希望一些重复使用代码或者算法代码积累.能够在VS中下载安装方便使用. 准备工作: 1.Nuget登录账号(可 Microsoft 账号).Nuget官网 2.Nuget.exe程序 ...

  7. 探究公钥、私钥、对称加密、非对称加密、hash加密、数字签名、数字证书、CA认证、https它们究竟是什么,它们分别解决了通信过程的哪些问题。

    一.准备 1. 角色:小白.美美.小黑. 2. 剧情:小白和美美在谈恋爱:小黑对美美求而不得.心生怨念,所以从中作梗. 3. 需求:小白要与美美需通过网络进行通信,联络感情,所以必须保证通信的安全性. ...

  8. Java 设置Word页边距、页面大小、页面方向、页面边框

    本文将通过Java示例介绍如何设置Word页边距(包括上.下.左.右).页面大小(可设置Letter/A3/A4/A5/A6/B4/B5/B6/Envelop DL/Half Letter/Lette ...

  9. SBT与Play配置文件

    1. 配置文件类JSON格式,符合SCALA语法规范2. :=是最常用的方法,其作用就是将key设置成expression的值,相同的key如果被多次赋值,则后面的值会覆盖掉前面的值.适用于简单类型的 ...

  10. Gitlab应用——系统管理

    ​ 查看linux系统信息 ​ 查看日志 ​ ​ 创建账号 ​ 选择regular,这是一个普通账号,点击“create user”账号创建完成 ​ 点击“User”,然后点击“New user”.使 ...