1.《动手学ROS2》第4章扩展阅读:ROS2原始数据类型与接口
2.关于Excel表中分行
3.tf2系列教程(十六):了解ROS 2中的码行tf2和时间(C++)
4.ROS学习笔记-roslaunch(启动)文件解析
5.ROS博客基于ROS的自动驾驶数据集可视化项目(附源代码)
《动手学ROS2》第4章扩展阅读:ROS2原始数据类型与接口
本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群: 教学视频地址: 小鱼的B站 完整文档地址: 鱼香ROS官网 版权声明:如非允许禁止转载与商业用途。
扩展阅读:ROS2原始数据类型与接口
在ROS2中定义接口,码行需要编写一个接口文件,码行该文件后缀为msg、码行srv、码行action。码行系统源码出售协议
在接口文件中定义通信过程中所使用的码行数据类型和数据名称,那可用的码行数据类型和数据名称有哪些呢?今天小鱼就带你详细了解一下ROS2接口文件中的数据类型和数据名称。
1.数据名称
数据名称就是码行一个字符串,没啥好说的码行,符合编程语言变量的码行命名规则就行(比如不能是数字开头)
2.数据类型
2.1 数据类型有哪些呢?
这里小鱼可以告诉你,原始的码行数据类型只有九类。其中每一个都可以在后面加上[]将其变成数组形式(从一个变成多个)
上面这九类中,码行官方也在考虑新增一些和删除一些,码行目前还是码行支持的,后续小鱼会根据资料再更新一下本文。
2.2 类型扩展(套娃)
2.2.1 第一层套娃
ROS2基于上面的九类基础数据类型,为我们定义出了很多拿来就用的数据类型,比如我们在前面章节中用到的图像数据类型sensor_msgs/Image,我们可以使用下面的命令来看一下其组成:
去掉单行的注释后的样子如下:
我们可以看到,除了第一行std_msgs/Header header之外的其他部分都是由基础类型组成。
2.2.2 第二层套娃
那std_msgs/Header由什么组成呢?我们再次使用下面的遮天斩源码指令查看一下:
结果如下:
2.2.3 第三层套娃
看完上面的结果,除了基本类型string和我们发现还有一层builtin_interfaces/Time,我们再查看一下这个接口类型。
结果如下:
我们发现结果全都是基本类型了,终于我们把套娃给解开了。
3.接口类型总结
通过基本类型的组合,可以构成一个新的数据类型,而新的数据类型又可以和基本类型或者另外一个数据类型互相组成另一个数据类型。所以我们可以说ROS2中的数据类型有无数种。
4.总结
相信看完这篇文章,以后再也不会遇到看不懂的数据类型了。
关于Excel表中分行
分别在单元格A,A,A,A输入,,,
就可以了。
或者你的意思是这些数都已经在A1单元格,那么,选中A1,layuiAdmin开源码数据,分列,按符号分列,分隔符为逗号(如果不行,在其他符号处输入中文逗号),确定。这样所有数据都在第一行了。选中这些数据,右键,复制;选中A2,右键,选择性粘贴,右下角的“转置”,就可以了。
tf2系列教程(十六):了解ROS 2中的tf2和时间(C++)
在ROS 2中,tf2是一个核心组件,用于管理坐标系变换树,跟踪和传播不同坐标系之间的变换信息。在本教程中,我们将探讨如何在lookupTransform()函数中使用超时设置以等待tf2坐标变换树上的源码科技投资坐标变换可用。
理解tf2的时间机制非常重要。每个坐标系变换都保存了一个时间快照,默认最多秒。使用lookupTransform()函数时,我们获取最新的坐标变换,但并不知道该变换的确切时间。本教程将指导你如何获取特定时间的坐标变换。
具体步骤如下:
1. 打开学习tf2的C++软件包中的src/turtle_tf2_listener.cpp源代码文件。在回调函数on_timer()中,我们关注to_frame_rel参数的定义,即在FrameListener类的构造函数中。将to_frame_rel参数设置为turtle1,让第二只小乌龟跟随第一只小乌龟。
2. 移除或注释掉启动文件中设置target_frame参数的代码行,这将让turtle2跟随turtle1,而不是固定坐标系“胡萝卜(carrot1)”。
3. 更改tf2::TimePoint()为this->now(),这指定了查找当前时刻的坐标变换,并移除超时参数。这导致lookupTransform()函数失败,溯源码刮了输出消息提示坐标变换不可用。
4. 使用tf2提供的等待工具,通过在lookupTransform()函数中添加Duration参数来解决此问题。在本例中,等待ms,或者使用以下代码。该函数有四个参数:目标坐标系、源坐标系、查找的时刻以及可选的等待超时时长。设置超时时长后,lookupTransform()将阻塞直到坐标变换可用,或在超时时长内无法获取时引发异常。
5. 超时参数的设置至关重要。如果未设置,系统可能会报错坐标系不存在或坐标变换消息在将来。但也不能设置过长,否则会导致系统阻塞。
6. 重新编译并运行软件包,现在可以正常运行了。
通过本教程,你将了解到如何在ROS 2环境中通过设置超时等待来确保tf2坐标变换的可用性,从而在实时系统中实现稳定的坐标系跟踪。
ROS学习笔记-roslaunch(启动)文件解析
理解使用罗氏启动命令可同步启动多个节点,无需手动逐一启动,极大便利了操作,同时自动启动 ROSMaster 管理节点。罗氏启动文件采用 XML 格式编写,遵循特定规则和标签,支持启动与关闭节点,具备丰富配置能力,确保多个节点协同工作。
基本规则方面,roslaunch 通过行序的方式浏览 XML 文件,并按深度优先遍历处理标签。文件中的所有内容都必须嵌套在根标签中。
基本元素主要包括:定义根节点的 pkg、type 和 name 属性,此外还有输出类型控制、节点复位功能、节点命名空间、参数传递等重要属性。其中,输出控制提供 screen 或 log 选项,用于决定是否将输出内容显示在终端或日志文件中。节点复位功能允许在检测到节点终止时自动重启。
常用的主要标签涉及启动节点、节点间依赖和参数管理。参数管理功能允许在启动文件中加载和修改参数,提供丰富的参数配置选项,包括文本文件、二进制文件和命令执行等方式。
参数配置方面,参数服务器允许存储、读取和访问参数,支持类型声明、文件读取、命令输出等功能。参数可以被全局或局部化以适应不同需求。对于复杂配置,还提供 YAML 文件加载和参数删除功能。
为了减少手动配置,launch 文件支持嵌套机制,允许在启动文件中嵌入其他启动文件以实现模块化和重用。同时,重映射机制简化了接口兼容性问题,通过重命名主题,使不同系统能够识别和使用相同的数据格式。
此外,launch 文件支持替代参数功能,在文件加载前解析参数,提供了动态配置的灵活性。
总结而言,通过合理构建和配置启动文件,用户可以有效控制 ROS 系统的启动过程和节点间的交互,极大地提高了开发效率和系统可维护性。这使得 ROS 成为一个强大而灵活的机器人系统框架,广泛应用于学术和工业研究中。
ROS博客基于ROS的自动驾驶数据集可视化项目(附源代码)
项目简介
基于加州大学伯克利分校 MSC Lab的自动驾驶数据集,本项目旨在进行数据集的可视化。项目源代码已上传至 GitHub,英文版文章与演示视频也已准备就绪。
数据集展示
左侧展示了GPS信号的可视化,通过 Mapviz 工具,将行驶过程中走过的路径显示出来,左上角则呈现了车前摄像头的视角。右侧是自定义的可视化,利用绿色代表 y 轴正方向,蓝色表示 x 轴正方向。紫色圆点表示汽车行驶过程中各个方向的加速度信息,天蓝色箭头指示汽车前进方向,绿色则代表不同强度的加速度。
问题与解决方案
在使用 Mapviz 可视化 GPS 信号时,遇到了数据格式不匹配的问题。通过在自定义的 package 中编写 `trans_GPS.cpp` 文件,成功实现了数据格式转换,解决了数据可视化的问题。同时,还撰写了关于 Mapviz 的基础使用教程。
加速度信息的可视化涉及确定坐标轴方向、避免信息跳动以及直观显示加速度大小。通过在 RVIZ 中绘制 x 和 y 轴,并使用平滑器处理频繁读取的 IMU 数据,成功解决了这些问题。极坐标系的引入使得加速度大小的显示更为直观。
汽车前进方向的可视化涉及到姿态信息的获取与 RVIZ 显示角度的调整。通过分析 IMU 的 orientation 数据,并设置 marker 的 orientation 值,实现了方向的正确显示。
相机信息的可视化面临格式转换问题。通过使用 `image_transport` 包装解决了传感器数据格式不兼容的问题。
总结
在本项目中,通过学习与实践 ROS 相关知识,成功实现了自动驾驶数据集的可视化。接下来,将集中精力深入学习 OSM 的使用,并着手进行 GPS 定位与搜索的小项目开发。