ROS2Foxy功能包不断完善,Gazebo新版Ignition Robotics功能也更加丰富!
这里参考GSoC 2020 Ignition gazebo:
(ROS2课程将更新为Foxy Ignition) 旧版课程专栏:https://blog.csdn.net/zhangrelay/category_9327597.html
以下内容为机器翻译学习笔记
新增Ignition Gazebo演示
这些教程如下:
建立自己的机器人
使用SDF 1.7构建两轮机器人
移动机器人
本教程说明了如何使用键盘箭头移动上一教程中构建的机器人。我们使用了Diff Drive插件,Triggered Publisher插件和KeyPublisher插件。
SDF世界
本教程说明了如何使用SDF构建我们的世界,以及如何向其中添加模型。
传感器演示
本教程说明了如何向我们的机器人以及世界上的其他模型添加传感器。我们引入了三种不同的传感器:IMU传感器,接触传感器和激光雷达传感器。
ROS 2集成
本教程说明了如何使用ros_bridge将ROS 2与Ignition集成在一起
演员演示
本教程说明如何将演员添加到我们的世界以及如何创建脚本动画
光学触觉传感器插件
触觉传感器是一种测量信息的设备,这些信息来自与周围环境的物理交互,例如手指或皮肤。我们不再关注市场上可用的触觉传感器的特定品牌和型号并对其进行仿真,而是将我们的目标和工作转向实现一种特定的传感器技术,例如光学触觉传感器。这些传感器通常由光源,可变形表面,镜头和照相机组成。使它们非常受欢迎的方面之一是,您可以应用现有的计算机视觉算法,以便从该数据中提取信息。
本教程的上一个屏幕截图中所见,我们使用了接触传感器和深度摄像头来模拟这种行为。当对象与前者接触时,表面法线将根据后者返回的值进行计算。重要的是要注意,来自接触传感器的值当前并未用于进行任何计算,而只是用于可视化接触,以作为一种快速的方法来检查插件是否正常工作。由于时间不足,我们无法合并来自这两个不同传感器的信息,无法提供更实际的测量结果。
以下是显示插件如何与模拟中不同模型交互的中间工作。请注意,插件如何能够可视化其所指向的对象的表面法线:
该插件还为表面法线变化很大的对象提供了丰富的信息,例如下面的电钻。它当前通过一个主题输出表面法线,可以使用该主题来推断信息,例如最佳抓握,要触摸的对象的哪一部分,甚至可以尝试猜测传感器正在触摸的内容!
但是,最终的实现只输出接触表面内部的法线,因此必须像触摸传感器那样实际触摸物体。与之前的屏幕截图不同,在下图中,使用更简单的几何体显示法线,以降低消息传输和标记渲染成本,从而提高性能。
过程
由于Ignition没有可用的相关工作,因此这也是一个探索性项目,我们不得不尝试新事物,提出想法并迭代设计。我们留下了一些我们认为可行的想法,但最终没有成功,不幸的是某些细节无法完成。
为了交流工作的最新进展,即使需要时电子邮件和Slack总是在那儿,我们每周召开一次会议。我相信导师和学生之间的交流确实很流畅,这无疑使该项目实现了其最重要的目标。
结论
触觉传感器能够感知与环境的物理相互作用。该GSoC项目旨在实现使用深度相机和接触传感器模拟光学触觉传感器的第一步。该插件可以:
- 测量接触物体的表面法线。
- 在IgnitionGazebo中可视化它们。
- 通过主题访问它们。
- 使用分辨率,可视化等参数调整插件。
- 通过服务打开和关闭插件。
在Linux,macOS和Windows上提供跨平台支持,从而使仿真更易于访问。
传感器数据可视化项目涉及到将一种新型的传感器可视化添加到点火渲染库中。该视觉图像用于渲染从模拟激光雷达传感器收集的数据。它扩展了凉亭中存在的LaserVisual的功能,并为其添加了新功能。Ogre1和Ogre2中都存在可视化的实现。
一个新功能被添加到视觉上,用户可以选择是否只想看到射向特定障碍物的光线。这意味着用户可以在视觉上看到机器人所感知到的环境的相关信息,并避免了由于可视化激光雷达数据而造成的混乱,这对机器人毫无用处。之所以这样做,是因为当传感器光线显示得太靠近时,用户很难理解数据。
除了原始的Triangle-Strips,还添加了新的视觉类型,包括Ray-Lines和Points。添加这些内容的目的是使用户可以根据自己的应用程序选择想要查看的视觉效果。点的添加还增加了可视化模拟中的点的能力。光线线和点的渲染和更新速度比“三角形条纹”视觉类型要快。
另外,已经以面向用户的平面正方形的形式创建了新材料。这已在Ogre1中实现,并且Ogre2实现正在进行中。该材料用于表示点。用户可以使用API为每个点设置独立的颜色。它与RViz中PointCloud视觉的平面正方形视觉类型相同。
开发的视觉效果与ign-gazebo集成为可加载的GUI插件。用户可以从GUI中选择要显示的传感器消息并设置视觉属性。下图显示了该插件的简要指南:
演示版
以下GIF演示了Lidar Visual的实现和使用。
可视类型可以在“三角带”,“射线”和“点”之间进行更改,如下所示。该应用程序有助于可视化模拟中传感器看到的点。
以下GIF演示了用于可视化数据的主题更改。更改主题后,视觉对象的坐标系也将更改,并且视觉对象的原点设置类似于传感器的原点。
当激光雷达视觉系统安装在移动底座上时,其行为如下所示。取消选中“显示不击中射线”复选框将删除激光雷达中未检测到任何障碍物的数据视觉。结果,它使用户更容易看到传感器在其视场中检测到的障碍物而没有额外的混乱。
结论和未来计划
在项目期间,能够实现大多数目标。但是,仍然存在诸如将PointCloud添加到渲染库之类的拉伸目标。
我非常感谢社区提供的改进功能,解决错误或实施新功能的反馈,这些功能将使用户可以轻松使用插件或库。
项目概况
绘图可视化工具
因此用户可以可视化来自模拟的各种类型的数据,例如“ 模拟物理数据”和“ 传输网络数据”,因此用户可以在模拟过程中绘制实体的组成以及当前已发布的运输主题的运输消息及其嵌套字段。
绘制UI
与2个插件交互使用“绘图”工具:
- 用于传输绘图的Topic Viewer插件
- 用于物理数据绘图的组件检查器插件
开发插件
- Ign-gazebo插件,用于物理数据绘图
- Ign-gui插件,用于绘制UI和传输图
- Ign-gui插件到模型运输主题
物理数据绘图
- Ign-gazebo插件,可以访问模拟物理数据
- 用户通过EntityTree和ComponentInspector插件拖动特定的组件元素,并将其拖放到绘图工具中
主题查看器插件
- Topic Viewer插件是ign-gui插件,它列出了所有当前发布的主题并为每个主题的结构建模,因此用户可以访问其字段和嵌套字段。
- 可绘图字段可拖动以在绘图工具中使用
- 实时动态更新主题
运输绘图和UI
- Transport Plotting插件是一个ign-gui插件,它使用点火运输库来处理运输图
- 用户从“ 主题查看器”插件中拖动要绘制的主题字段,并将其拖放到要绘制的绘图工具中
- 用户可以为每个图表拥有许多图表和许多绘图元素(字段或组件)
- 用户可以在运行时删除绘图元素
- 用户可以在绘图视图上滚动和缩放
- 用户可以将每个图形导出为CSV格式
CSV导出
二次开发技术
- C
- ign-gui / ign-gazebo/ ign-transport
- Qt和QML
- gtest用于单元测试
未来的工作
- 支持重复字段绘制
- 导出为PDF和SVG格式
结论
绘图工具是一种可视化工具,用于绘制模拟物理数据和传输网络数据,与Ignition Simulator中的Topic Viewer和Component Inspector插件一起使用。
关于该项目
RViz 是针对使用ROS的机器人的3D可视化工具,无可否认,它是每个ROS开发人员在其机器人开发过程中的关键组成部分。随着ROS2的最新发展以及Gazebo将其重构为模块化库(即Ign库),现在正是为RViz提供当之无愧的改造的绝佳时机。
链接到项目;https://github.com/ignitionrobotics/ign-rviz 13
ign-RViz是使用ign库(主要是ign-rendering和ign-gui)构建的。该应用程序继承了ign-gui库的材料设计和易于使用的用户界面,因此达到了现代应用程序的标准。所有插件都是使用GUI库提供的小部件框架开发的。Scene3D小部件用作由ign渲染库提供动力的主视口。渲染库提供了用于创建图形的统一API,同时为不同的渲染引擎提供了抽象。这与RViz的当前实现有所不同,后者使用自己的渲染抽象仅支持OGRE。通过使用点火库,维护变得更加容易,因为它可以确保将诸如错误修复或功能之类的所有更新从底层库传播到ignition-rviz。
可以通过显示类型或主题来加载插件。在上面的演示中,可以看到RobotModel及其TF。通过按主题加载插件,可以看到LaserScan数据。可以取消停靠,在所有插件的配置面板中移动以及更改其背景颜色以提高可见性。全局选项插件用于更改固定框架。
ign-rviz和显示插件系统的体系结构的详细说明可以在项目Wiki中找到:https://github.com/ignitionrobotics/ign-rviz/wiki
以下显示插件是为ign-rviz开发的:
显示插件
开发了以下显示插件
Name | Description |
---|---|
Global Options | Configure global options like changing fixed frame and scene background color. |
Axes | Renders an axis at the origin of the target frame |
Image | Displays Image received as sensor_msgs::msg::Image ROS message |
LaserScan | Renders data from sensor_msgs::msg::LaserScan message as points in the world, drawn as points, rays and triangles |
Path | Renders data from nav_msgs::msg::Path message as lines, arrows or axes |
PointStamped | Renders data from geometry_msgs::msg::PointStamped message as spheres |
Polygon | Renders data from geometry_msgs::msg::PolygonStamped message as lines |
Pose | Renders data from geometry_msgs::msg::PoseStamped message as arrows or axes |
PoseArray | Renders data from geometry_msgs::msg::PoseArray message as arrows or axes |
RobotModel | RobotModelDisplay plugin renders robot model in the correct pose as defined by current TF transforms |
TF | Displays the robot TF transform hierarchy |
演示版
在这里,我们可以看到所有正在运行的可视化插件,它们的配置面板已正确拆分。可视化的数据为PoseArray(红色箭头),PoseStamped(像素),PointStamped(球体),PolygonStamped(球体),旋转青色环,Path(路径)为背面的绿线。
这是Turtlebot3的演示 1个航点模式下的模拟和Navigation2。摄像机的提要可以在左上方看到。可视化了RobotModel,LaserScan,机器人足迹为Polygon和机器人计划为Path。
结论和未来计划 在GSoC的学习过程中,我能够实现大部分目标,并且开发了一些常用的显示插件,但是还有一些重要的东西(如PointCloud和Costmap)尚不可用。除了增加对默认插件的支持之外,我还计划开发一些插件,例如机器人伸缩,绘图和原始主题数据显示。
ign-rviz将在不久的将来以二进制形式下载。直到您好奇的时候,您可以通过从源代码构建它来进行尝试。我非常感谢社区提供的任何反馈,并将解决所有出现的问题或错误。
我计划继续在社区中活跃起来,继续开发ign-rviz,同时为点火库和其他ROS程序包做出贡献。我要再次感谢我的导师@ahcorde以及Open Robotics的每个人都为我提供了这个难得的机会。这是一次很棒的学习经历,我期待继续与他们合作。