1.Cartographer源码详解|(2)Cartographer_ros
2.如何从零开始创建一个ROS节点?
3.ROS学习笔记6:launch文件
4.技术分享 | 12个基础ROS常用命令讲解
5.ROS1基本语法学习笔记
6.ROS通信(个人知识积累)
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,仿金蝶web源码以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,objects源码对里程计数据进行处理。首先将ros时间转换为ICU时间,然后利用tf_bridge_.LookupToTracking函数找到tracking坐标系与里程计child_frame_id之间的坐标变换。在ToOdometryData函数中,将里程计的footprint的pose转换为tracking_frame的pose,并最终将结果转换为carto::sensor::OdometryData的数据类型。
HandleOdometryMessage函数将传感器数据类型与坐标系转换完成后,调用trajectory_builder_->AddSensorData进行数据处理。对于雷达数据,首先转换为点云格式,然后对点云进行坐标变换,并调用trajectory_builder_->AddSensorData进行数据处理。
IMU数据处理中,要求平移分量小于1e-5,然后调用trajectory_builder_->AddSensorData对数据进行处理。
在雷达数据处理部分,首先将点云数据分段,然后传给HandleRangefinder处理,将点云坐标变换到tracking_frame坐标系下,调用trajectory_builder_->AddSensorData函数进行数据处理。
总结本章内容,我们详细解析了SensorBridge类,对传感器数据进行了转换和传输。通过Node类、MapBuilderBridge类和SensorBridge类,我们对Cartographer_ros部分的代码有了基本了解。接下来,我们将深入学习cartographer。
如何从零开始创建一个ROS节点?
创建ROS节点从零开始并非难事,本文将逐步指导你完成这一过程,以Topic通信的agplay源码GPS消息节点为例。首先,确保你已理解ROS的基本文件结构,特别是package和节点的构成。 1. 创建工作空间(可选):初始化或确认你已拥有ROS工作空间,它包含src, build和devel文件夹。 2. 新建工作包:使用catkin_create_pkg命令创建新的工作包,如"test_pkg",并指定依赖项。 3. 自定义消息:对于GPS,需要定义自定义消息类型(msg文件),相当于定义数据结构,如C语言中的结构体。 4. 修改CMakeLists.txt和package.xml:确保msg文件能编译为头文件,便于其他节点使用。 5. 编译与生成头文件:编译后会在devel/include中生成对应头文件,如gps.h。 6. 编写节点源文件:开始编写发送(talker)和接收(listener)GPS消息的节点代码。 7. 修改CMakeLists.txt:为节点添加编译指令,如添加依赖和链接库。 8. 编译与刷新:使用catkin_make编译,并在新终端中刷新ROS环境设置。 9. 启动节点:启动Master节点,随后启动talker和listener。 . 检查节点运行:通过rosnode list确保节点已成功启动。 总结起来,从零开始创建ROS节点涉及个关键步骤,尤其要注意CMakeLists.txt的配置和节点代码编写。参考书籍《ROS机器人高效编程》将助你更好地理解和实践。现在,你已经掌握了创建节点的基本流程。ROS学习笔记6:launch文件
学习ROS,lastic源码撰写笔记,目标篇,已完成6篇,环境Ubuntu.、ROS1:noetic。遵循Autolabor初级教程进行配置,一次成功。学习资料:ROS机器人入门课程《ROS理论与实践》。主要使用Python语言。
本期重点:launch文件。
在launch文件中设置`respawn="true"`,让节点在关闭后自动重启。例如:
python
node -pkg turtlesim -ns "/turtlesim" -exec "turtlesim_node" respawn="true"
运行此launch文件后,关闭乌龟显示界面,节点将自动重启。重要特性:`required`确保节点必需在launch文件中存在,否则启动失败。
`ns="名称"`用于添加私有命名空间前缀,避免节点名称冲突,例如:
python
node -pkg turtlesim -ns "my_namespace/turtlesim" -exec "turtlesim_node"
执行后,使用`rosnode list`查看节点列表,确认节点已正确启动并附带前缀。
launch文件中的`include`用于引入其他launch文件,实现复杂配置。
`remap`功能允许在运行时重命名节点,例如:
python
include "path/to/other.launch"
python
arg "var_name" "default_value"
使用`rosparam`进行参数管理,`group`为参数分类,`param`用于设定具体参数值:
python
param "param_name" "param_value"
至此,对launch文件的基础应用概述完毕。通过合理配置,提高ROS程序的javapartition源码灵活性与可维护性。
技术分享 | 个基础ROS常用命令讲解
启动ros主节点的命令是roscore,所有节点启动的前提都是必须存在主节点。
rosrun命令用于启动ros节点,使用方法为 rosrun 功能包名 可执行文件名。可执行文件名由两种途径产生,一种是cpp文件经编译后生成可执行文件,另一种是编写的python文件名,但需要给文件添加可执行权限。
roslaunch命令启动launch文件,使用方法为roslaunch 功能包名 launch文件名。它可以启动多个节点,设置参数变量、配置文件等内容。
rostopic命令与ROS话题相关,可以查看所有话题列表,查看某个话题发布的数据,查看某个话题的消息,向某个话题发布数据。
rosmsg命令与ROS消息相关,可以查看所有消息列表,查看消息的数据类型,查看某个功能包内的自定义消息。
rosservice命令与ROS服务相关,可以查看所有服务列表,查看服务的消息,调用某个服务。
rossrv命令与ROS服务消息相关,可以查看所有消息列表,查看消息的数据类型,查看某个功能包内的自定义消息。
rosnode命令与ROS节点相关,可以查看所有节点列表,查看某个节点运行的设备名,查看某个节点的信息,查看节点数据的延时,关闭某个节点。
rosls命令查看本地位置下,某个功能包以及元功能包的内容。
roscd命令进入某个功能包的文件夹位置,可以检测系统是否能找到功能包,找到目标功能包位置。
rosclean命令与ROS日志相关,可以查看保存的日志数据大小,删除日志数据,一般超过1个G时会报错提示日志数据量过大。
rviz是ros系统中的可视化工具,可图形化显示各种数据,帮助理解数据情况,可以通过rosrun rviz rviz形式启动。
本文介绍了常用的ROS指令,有兴趣的朋友们可以进一步了解ROS下的其他命令。下期内容敬请期待!
ROS1基本语法学习笔记
ROS是一个软件工具集,涵盖了分布式、进程管理、进程间通信,通过使用Node代替进程。它还包括仿真、数据可视化、图形界面、数据记录等工具。同时,ROS支持控制、规划、视觉、建图等功能,并拥有一个强大的社区,提供软件包管理、文档、教程。社区资源包括ROS Wiki、Github、官网等。
在Linux中,命令行操作是基础技能,包括使用终端快捷键如CTRL+AIT+T快速打开终端,使用tab键自动补全命令或文件名。查看当前路径使用`pwd`命令,列出当前路径下文件的命令是`ls`,隐藏文件显示的命令是`ls -A`或在文件浏览器中按Ctrl+h。创建新文件夹使用`mkdir 文件夹名`命令,进入文件夹使用`cd 文件夹名称/`,创建新文件使用`touch 文件名`,删除文件使用`rm 文件名`,递归删除文件夹使用`rm -R`,返回上一级目录使用`cd ..`。安装应用使用`sudo apt install 库名称`,安装.deb文件则使用`sudo dpkg -i 文件全称`。
使用`rospack`命令可获取软件包信息,`roscd`命令允许切换到特定软件包或软件包集目录,同时支持切换子目录。`roscd log`则可进入存储ROS日志文件的目录。`rosls`命令在不输入绝对路径的情况下执行ls操作。`Tab补全`功能支持快速补全命令或文件名,提高效率。
节点是ROS软件包中的可执行文件,用于与其它节点通信,可发布或订阅话题,提供或使用服务。`roscore`命令是运行所有ROS程序前的第一步,若不能初始化,可能需要检查网络配置。`rosnode`命令用于查看运行中的ROS节点信息,`rosnode list`列出活动节点,`rosnode info`返回指定节点信息。
`rosrun`命令允许直接运行软件包内的节点,无需知道包的路径。`rqt_graph`动态显示系统中正在发生的情况,`rostopic`命令用于获取话题信息,`rostopic echo`显示在特定话题上发布的数据,`rostopic list`列出所有话题,`rostopic type`查看话题的消息类型,`rostopic pub`发布数据,`rostopic hz`报告数据发布速率。
服务(Services)是节点之间通信的另一种方式,允许节点发送请求并获得响应。`rosservice`命令用于服务操作,`rosparam`则在参数服务器上存储和操作数据,支持整型、浮点、布尔、字典和列表等数据类型。使用`rqt_console`和`rqt_logger_level`可连接日志框架以显示节点输出,调整输出信息详细级别。`日志记录器级别`从高到低排列为Fatal、Error、Warn、Info、Debug,通过设置可获得所需级别的日志消息。
`roslaunch`命令启动定义在launch文件中的节点,`rosed`是编辑包中文件的工具,无需输入完整路径。若出现错误,可能需要在工作区的devel路径下source setup.bash文件。`msg`命令在使用后可能会提示找不到安装包,解决方法是先source setup.bash文件,然后重新运行相关命令。
ROS通信(个人知识积累)
ROS架构中,其文件系统管理是至关重要的,通过一系列命令实现包的创建、安装、删除、查找和文件操作。首先,使用catkin_create_pkg创建新的ROS功能包,并通过sudo apt安装所需的依赖。删除包时,用sudo apt purge,而列出所有包和查找特定包则分别通过rospack list和rospack find。进入和查看包内文件,roscd和rosls是必不可少的,同时apt search用于搜索特定包。
在ROS计算图方面,rqt_graph工具能动态展示系统运行状态,以可视化的方式呈现进程间的交互。无需重新安装,直接在终端运行rqt_graph即可。而ROS通信机制则包括话题通信、服务通信和参数服务器。话题通信以发布和订阅模式实现实时数据交换,适用于频繁更新的数据传输;服务通信则以请求响应形式,适合有逻辑处理需求的场景;参数服务器提供共享数据存储,类似全局变量。
在通信机制中,话题通信通过std_msgs简单数据类型进行,但复杂数据需自定义msg;服务通信则通过srv文件,以请求响应的方式进行。参数服务器支持数据的增删改查,通过C++或Python API实现。常用的命令如rosnode、rostopic、rosmsg、rosservice、rossrv和rosparam提供了丰富的功能,使用时注意工作空间路径的配置。
至于头文件和源文件的调用,自定义的头文件和源文件需要遵循特定的流程进行编译和引用,以确保系统的正确运行。