首页 > Udacity机器人软件工程师课程笔记(十六)-机械臂仿真控制实例(其一)-Gazebo、RViz和Moveit!

Udacity机器人软件工程师课程笔记(十六)-机械臂仿真控制实例(其一)-Gazebo、RViz和Moveit!

机械臂仿真控制实例

目录

  1. 环境设置
  2. 项目工具介绍
  3. Gazebo

    (1)Gazebo组件

    (2)Gazebo界面
  4. 统一机器人描述格式(URDF)
  5. RViz
  6. Moveit!

1.环境设置

对于此项目,使用的是 robo-nd 虚拟机映像,或者在本地安装了 Ubuntu + ROS

关于安装虚拟机映像问题,可以参考之前的文章。

对于此设置的其余部分,活动的ROS工作区的名称设置为catkin_ws。

如果没有活动的ROS工作空间,则可以通过以下方法创建:

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make

建立了工作区之后,将项目存储库克隆或下载到工作区的src目录中:

$ cd ~/catkin_ws/src
$ git clone https://github.com/udacity/RoboND-Kinematics-Project.git

使用全能的 $ rosdep install命令安装缺少的依赖项:

$ cd ~/catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

接下来,更改脚本文件的权限以使其变为可执行文件:

$ cd ~/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/scripts
$ sudo chmod u+x target_spawn.py
$ sudo chmod u+x IK_server.py
$ sudo chmod u+x safe_spawner.sh

现在一切就绪,现在可以构建项目了。

在工作空间中,可以运行catkin_make来构建项目:

$ cd ~/catkin_ws
$ catkin_make

由于拾取和放置模拟器会在单独的终端中旋转不同的节点,因此需要将以下内容添加到 .bashrc 文件中以进行自动采购:

$ source ~/catkin_ws/devel/setup.bash

由于此项目使用自定义3D模型,因此需要告知Gazebo(仿真软件)在哪里寻找它们。由于环境变量,只需在 .bashrc 中添加一行即可轻松实现

打开一个终端窗口,然后输入以下内容:

$ echo "export GAZEBO_MODEL_PATH=~/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/models" >> ~/.bashrc

对于演示模式,请确保在 ~/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/launch/ 位置的 inverse_kinematics.launch 文件中将 demo 标志设置为true

此外,还可以控制架子上目标对象的生成位置。为此,在下面的 target_description.launch 文件中修改 spawn_location 参数。文件在~/catkin_ws/src/RoboND-Kinematics-Project/kuka_arm/launch/中。

0-9是 spawn_location 的有效值,0是随机模式。

这样就已经成功构建了我们的项目。

2.项目工具介绍

(1)Gazebo

Gazebo是一种基于物理学的3D仿真器,广泛用于机器人世界。在之前的测试ROS节点的时候我们已经使用过了。

在这里插入图片描述(2)RViz

RViz,用于传感器数据分析和机器人状态可视化的3D可视化器,强调把已有的数据可视化显示。

在这里插入图片描述

(3)Moveit !

Moveit !,基于ROS的运动计划,运动学和机器人控制软件框架。

在这里插入图片描述

3.Gazebo

Gazebo是用于机器人技术的基于物理的高保真3D仿真器。Gazebo提供了在复杂的室内和室外环境中准确模拟一个或多个机器人的功能,该环境充满了静态和动态对象,逼真的照明和可编程的交互。

Gazebo有助于机器人设计,快速成型和测试以及真实场景的仿真。虽然Gazebo与平台无关,并且支持Windows,Mac和Linux,但它通常与ROS一起在Linux系统上与机器人系统一起使用。

简而言之,它是每个机器人专家必备库中必不可少的工具。有关Gazebo历史的详细信息和全面的功能列表,请访问他们的网站。

(1)Gazebo组件

运行Gazebo仿真实例所涉及的两个主要组件是 gzservergzclient

gzserver完成了Gazebo的大部分繁重任务。它负责解析与我们要模拟的场景以及其中的对象相关的描述文件,然后使用物理和传感器引擎模拟整个场景。

通过在终端中使用以下命令可以独立启动服务器:

$ gzserver

它没有任何GUI组件。在某些情况下,以所谓的“无头模式” 运行gzserver可能会派上用场,但是在以后的课程中,我们将进一步讨论。

另一方面,gzclient提供了非常重要的图形客户端,该客户端可连接到gzserver并渲染仿真场景以及有用的交互工具。尽管可以使用以下命令从技术上本身运行gzclient:

$ gzclient

它根本不执行任何操作(消耗计算资源除外),因为它没有可连接的gzserver

通常的做法是先运行gzserver,然后运行gzclient,在渲染模拟场景之前,先花一些时间初始化模拟场景,其中的对象以及相关的参数。为了使我们的生活更轻松,有一个直观的命令可以按顺序启动两个组件:

$ gazebo

(2)Gazebo界面

输入以下内容即可从终端启动Gazebo

$ gazebo

需要注意的是,有时候Gazebo会陷入一个看似无限的加载循环,如果Gazebo在一分钟内没有完全加载完,可以考虑在Gazebo终端处于活动状态时按Ctrl+C关闭它,然后重新启动它。

Gazebo gui分为4个主要部分:

  1. 场景
  2. 侧板
  3. 工具栏
  4. 菜单

场景

场景是您将花费大部分时间的地方,无论是创建仿真还是运行仿真。虽然可以使用触摸板在场景中导航,但强烈建议使用鼠标。您可以通过按下LMB并拖动来平移场景。如果你按住SHIFT键,你现在可以旋转视图。您可以使用鼠标滚轮或按下和拖动RMB来放大和缩小。

在这里插入图片描述

侧板

左侧的侧面板由三个选项卡组成:“World”,“Insert”和“Layers”。

  • World

    此选项卡显示场景中当前的灯光和模型。通过单击单个模型,可以查看或编辑其基本参数,例如位置和方向。此外,您还可以通过“Physics”选项更改场景的物理场,例如重力和磁场。GUI选项提供对默认摄像机视角和姿势的访问。
  • Insert

    在这里可以找到要添加到模拟场景中的对象(模型)。左键单击以展开或折叠模型列表/目录。要将对象放置在场景中,只需在“插入”选项卡下单击感兴趣的对象即可;这会将对象绑定到鼠标光标,可以通过在该位置单击鼠标左键将该对象放置在场景中的任何位置。
  • Layers

    这是一项可选功能,因此在大多数情况下此选项卡将为空。要了解有关图层的更多信息,请单击此处。

顶部工具栏

在顶部有一个工具栏,它可以快速访问某些光标类型,几何形状和视图。

  • Select mode

    最常用的光标模式,可用于浏览场景。
  • Translate mode

    更改对象位置的一种方法是在侧面板上的世界选项卡中选择对象,然后通过属性更改其姿势。这既麻烦又不自然,转换模式光标允许更改场景中任何模型的位置。只需选择光标模式,然后使用适当的轴来拖动对象直到满意为止。
  • Rotate mode

    类似于翻译模式,此光标模式允许更改任何给定模型的方向。

    Scale mode

    比例模式允许更改比例,从而更改任何模型的整体大小。
  • Undo/Redo

    由于人类最擅长犯错误,因此撤消工具可以帮助我们隐藏错误。另一方面,如果您撤消了您不想要的操作,请重做工具以进行撤销。
  • Simple shapes

    可以将诸如立方体,球体或圆柱体之类的基本3D模型插入场景。
  • Lights

    向场景添加聚光灯,点光源或定向光等不同的光源。
  • Copy/Paste

    这些工具可以在场景中复制/粘贴模型。另一方面,只需按Ctlr + C复制并按Ctrl + V粘贴任何模型。
  • Align

    该工具可以沿着三个主轴之一将一个模型与另一个模型对齐。
  • Change view

    使用该工具可从不同角度(例如俯视图,侧视图,正视图,仰视图)查看场景。

底部工具栏

底部工具栏有一个简洁的播放/暂停按钮。这使您可以暂停模拟以方便地移动对象。该工具栏还显示有关模拟的数据,例如模拟时间及其与实际时间的关系。您可以在此处找到FPS计数器,以评估任何给定场景的系统性能。

4.统一机器人描述格式(URDF)

统一机器人描述格式或urdf是ROS中用于表示机器人模型的XML格式。我们可以使用urdf文件来定义机器人模型,其动力学特性,视觉元素,甚至是机器人的模型传感器。URDF只能描述具有通过链节或树状结构的关节连接的刚性链接的机器人。它无法描述具有灵活链接或并行链接的机器人。


<robot name="two_link_robot"><link name="link_1"><visual><geometry><cylinder length="0.5" radius="0.2"/>geometry>visual>link><link name="link_2"><visual><geometry><box size="0.6 0.1 0.2"/>geometry>visual>link><joint name="joint_1" type="continuous"><parent link="link_1"/><child link="link_2"/>joint>
robot>

以上是使用URDF描述具有两个连接和一个关节的简单机器人。

由于我们使用urdf文件描述了几种机器人和环境属性,因此阅读起来往往很长且乏味。这就是为什么我们使用Xacro(XML宏)将单个urdf文件分成多个xacro文件的原因。虽然语法保持不变,但是我们现在可以将机器人描述分为较小的子系统。对于此项目,我们仅将urdf分为两个xacro文件:

  • kr210.urdf.xacro-该文件包含所有机器人特定的信息,例如链接,关节,执行器等。
  • kr210.gazebo.xacro 该文件包含Gazebo特定的信息,例如机器人材料,摩擦常数以及在Gazebo中控制机器人的插件

由于kr210.urdf.xacro包含机器人特定的信息(如链接长度和关节偏移),因此它是唯一需要导出DH参数并创建变换矩阵的文件。由于urdf(和Xacro)文件基本上是XML,因此它们使用标记来定义机器人的几何形状和属性。最重要且最常用的标签及其元素如下所述:




这是顶层标签,其中包含与给定机器人相关的所有其他标签。



机械手中的每个刚性链接都必须与此标签关联。

属性(Attributes)

name:需要唯一的链接名称属性。

元素(Elements)



该元素指定对象的外观以用于可视化目的。

名称描述
视觉元素的参考框架相对于链接的参考框架。
视觉对象的形状。
视觉元素的材料。
连接的碰撞属性。请注意,这可能与连接的视觉属性不同,例如,通常使用更简单的碰撞模型来减少计算时间。
名称描述
碰撞元素的参考框架,相对于链接的参考框架。
请参阅以上视觉元素中的几何描述。
连接的惯性属性在此标签中描述。
名称描述
这是惯性参考系相对于连杆参考系的姿势。惯性参考系的原点必须位于重心。
链接的质量由该元素的value属性表示。
在惯性框架中表示的3x3旋转惯性矩阵。由于旋转惯量矩阵是对称的,因此在此处仅使用属性ixx,ixy,ixz,iyy,iyz,izz指定该矩阵的6个对角线以上的元素。

具有重要元素的代码示例片段:

  <link name="link_1"><inertial><origin xyz="0 0 0.4" rpy="0 0 0"/><mass value="${mass1}"/><inertia ixx="30" ixy="0" ixz="0" iyy="50" iyz="0" izz="50"/>inertial><visual><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="package://kuka_arm/meshes/kr210l150/visual/link_1.dae"/>geometry><material name=""><color rgba="0.75294 0.75294 0.75294 1"/>material>visual><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><mesh filename="package://kuka_arm/meshes/kr210l150/collision/link_1.stl"/>geometry>collision>link>

标签有许多可选元素,可以用来定义其他属性,如颜色、材质、纹理等。有关这些标记的详细信息,请参考此链接。




该标签通常定义机器人中两个链接之间的单个关节。可以使用此标签定义的关节类型包括:

名称描述
固定没有自由度的刚性接头。用于将链接焊接在一起。
旋转绕轴旋转的范围有限的关节。
棱柱沿轴滑动的限位关节
连续与“ 旋转关节” 相似,但没有限制。它可以绕轴连续旋转。
平面2D 棱镜关节,允许在垂直于轴的平面中运动。
漂浮具有6个自由度的关节,通常用于四旋翼和无人机

属性(Attributes)

name: 唯一的联合名称

type: 关节类型

元素(Elements)

要定义关节,我们需要声明旋转/平移轴以及形成关节的两个连接之间的关系。

名称描述
这是从父链接到子链接的转换。关节位于子链接的原点。
各个关节的父级链接的名称。
各个关节的子链接的名称。
定义旋转关节的旋转轴,棱柱形关节的平移轴和平面关节的表面法线。固定关节和浮动关节不使用轴字段。

具有重要元素的代码示例片段:

<joint name="joint_2" type="revolute"><origin xyz="0.35 0 0.42" rpy="0 0 0"/><parent link="link_1"/><child link="link_2"/><axis xyz="0 1 0"/>
joint>

标签下的其他可选元素可以在此处找到。

还有更多可选标签和属性,可帮助定义机器人以及传感器和执行器的各种动态和运动学特性。参考此链接以获取关于这些的更多详细信息。

5.RViz

RViz(或RViz)代表ROS可视化工具或ROS可视化器。RViz是一站式工具,可以可视化机器人的三个核心方面:感知、决策和驱动。

使用rviz,我们可以可视化发布在ROS主题上的任何类型的传感器数据,如相机图像、点云、超声波测量、激光雷达数据、惯性测量等。这些数据可以是直接来自传感器的实时流,也可以是作为bagfile存储的预记录数据。

通过RViz还可以可视化机器人的活关节角度值,从而构建任何机器人的实时三维表示。尽管如此,rviz并不是一个模拟器,也不与物理引擎接口,换句话说,没有碰撞和动力学。RViz并不是Gazebo的替代品,而是一个辅助工具,可以监视机器人系统下的运动每一个过程。

由于rviz是ROS软件包,因此需要运行roscore才能启动rviz。

$ roscore

在另一个终端中,运行rviz:

$ rosrun rviz 

正确启动后,rviz窗口应如下所示:

在这里插入图片描述

中间的空白窗口称为3D视图(3D view),在其中来观察机器人模型,传感器可视化和其他元数据。

左侧的面板是已加载的显示(Displays)的列表,而右侧的面板显示了可用的不同视图(Views)。

在顶部,我们提供了许多有用的工具(tools),底部的栏显示了有用的信息,例如经过的时间,fps计数以及所选工具的一些方便的说明/细节。


(1) 显示(Displays)

要使任何内容都显示在3D视图中,首先需要加载正确的显示(Displays)。

显示(Displays)还可以用于可视化传感器数据流,例如3D点云,激光雷达扫描,深度图像等。

默认情况下,Rviz以两个无法删除的固定属性字段启动- 全局选项和全局状态。虽然不显示这些内容,但一个管理简单的全局设置,而另一个则检测并显示有用的状态通知。

让我们来看看一些基本的显示(Displays)。我们已经加载并启用了网格显示。要添加机器人模型显示,首先需要将机器人描述(urdf)加载到参数服务器中,并在所有机器人链接之间发布转换。幸运的是,我们有一个方便的启动文件,可以为我们完成所有这些工作,打开一个新终端,然后键入以下命令:

$ roslaunch kuka_arm load_urdf.launch

如果提示找不到文件,则添加一下环境变量,之后继续运行上面的命令就可以了:

source ~/catkin_ws/devel/setup.bash

现在,让我们回到rviz窗口并通过单击Add 底部的按钮添加显示。这将打开一个带有显示类型的新窗口,选择RobotModel并点击Ok。接下来,在Displays中将“ Fixed Frame”下的“ Global Options” 从world(或map)更改为base_link

<

更多相关:

  • MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言:英语+中英文字幕(根据原英文字幕机译更准确) |时长:44节课(10h 52m) |大小解压后:9.9 GB 含课程素材 如何使用Blender 2.8和Substance Painter制作真实的机器人 Create Star Wa...

  • 现在制作个人网页越来越流行,你会发现很多设计师、媒体人、职场人都建立了自己的网站,用来积累粉丝、展示作品、或者找工作。那么不懂技术知识、也没有太多资金的学生,可以建立自己的网站吗?当然也是可以的!其实个人网站建立的原理都差不多,不懂技术的情况下,可以使用自助建站系统,快速生成个人网站。个人网页制作教程如下:进入「上线了」官网,注册账号...

  • 在plugin.config中添加 stats_over_http.so 然后重启服务器,在浏览器中输入下面的地址查询 http://host:port/_stats 这里host是ATS所在的hostname或是ip,port就是侦听http连接的端口,按照配置我这里分别是10.10.110.162和8081 http:/...

  • 改动信息 详情可以查看ceph官网nautilus Dashboard功能 增加的新功能 支持多用户使用SSO的用户验证模式支持审计模式新的登录页,可以展示更多的集群健康指标使用swagger api的rest api文档 增加的新的管理特性 对于OSD的管理(将osd标记为down,out,修改osd的config ,恢复...

  • 1.Proteus中添加组件后双击引脚可以快速生成一个最近的端口。 2.按A调出设置界面 3.在String中写:net=H#,"H"可以换成自定义前缀。count为起始值,increment为增量。 4.依次点击想要编号的引脚。 转载于:https://www.cnblogs.com/viaduct/p/5842429.html...

  • 1.Goto Anything-快速查找(ctrl + P)   输入@+函数名可以快速找到函数输入#+文本可以快速进行文件内文本匹配2.命令模式Ctrl+Shift+P:打开命令面板    Ctrl+P:搜索项目中的文件   Ctrl+W:关闭当前打开文件  Ctrl+Shift+W:关闭所有打开文件 Ctrl+Shift+V:粘贴...

  • 完整课程,涵盖所有关于Adobe Photoshop CC的基本课程 你会学到什么 课程获取:从头开始学习Adobe Photoshop CC图像编辑-云桥网 Photoshop用户界面之旅 转型导论 项目管理 图层面板简介 基本图层属性 混合模式 不可或缺的层效果 投影、内部发光和外部发光 颜色叠加和渐变叠加 油画效果 选择技...

  • blender硬表面建模渲染终极教程 Gumroad - The ULTIMATE Guide to Hard Ops and Boxcutter Gumroad-硬操作和切箱机的终极指南 教程大小 6G  1920X1080分辨率  语言:英语+中文字幕  含案例源文件 云桥网络 平台获取教程 本教程共包含两大部分 第一部...

  • Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ 中文字幕(机译)+原英文字幕 |大小:33.0 GB | 145节课程| (36h 18m) 你会学到什...

  • 3dmax2021入门学习教程 MP4 | h264,1280x720 |语言:英语+中文字幕(根据原英文字幕机译)+原英文字幕 | 4h 23m | 3.55 GB 含课程素材工程文件 云桥网络 平台获取素材 你将学到什么 3DS MAX中的样条线和多边形建模 纹理、照明和渲染 使用Corona渲染器渲染 用Pho...

  • 文章目录内部工具包含头文件接口使用核心指标Perf ContextIOStats Context外部工具Systemtap 工具Perf工具Ftrace 工具...