1.【学习笔记】ROS2纯小白 - MoveIt!(humble)安装、源码初识与C++实现运动规划
2.四足机器人雷达-视觉导航2:Elevation mapping局部高程图测试
3.ROS 2中发布和可视化传感器数据实战系列之四:kitti公开数据集IMU数据的编译发布及在RViz2中的显示
4.cruise-automation Webviz 简介
5.Autoware.universe 源码解读(一)
6.ROS博客基于ROS的自动驾驶数据集可视化项目(附源代码)
【学习笔记】ROS2纯小白 - MoveIt!(humble)安装、初识与C++实现运动规划
文章内容
前言
在本系列第四篇学习笔记中,源码我们重点介绍如何安装MoveIt、编译如何在RViz中使用MoveIt,源码以及如何通过C++程序加入障碍物并进行运动规划。编译tcp 源码发包流程经过一番波折,源码终于开始与机器人相关任务,编译尤其是源码RViz的可视化功能,让这一过程变得更为直观。编译在尝试配置环境时,源码由于系统误操作导致Ubuntu无法正常开机,编译最终花费半天时间重装系统,源码尽管过程坎坷,编译但这一经历让我们的源码技术积累更加坚实。
前作后续
在安装ROS 2和Colcon后,确保系统为最新版本并安装mixin Colcon和vsctool。接下来,创建一个Colcon工作空间并下载教程和剩余MoveIt源代码。由于网络环境因素,这一过程可能较为不稳定,需要反复尝试和优化配置。完成依赖项的控制后,使用Concol工作空间并进行相应的build和setup操作。将默认ROS 2中间件(RMW)更改为Cyclone DDS,以确保环境的兼容性。
使用Docker容器快速建立MoveIt环境,为后续机器人开发提供方便。
在RViz中使用MoveIt插件进行运动规划,通过交互设置机器人状态,测试规划器并进行可视化输出。在RViz中引入机器人模型,配置固定坐标系,进行机器人插件的详细配置。
在模拟环境中,与可视化机器人交互,调整姿态和运动轨迹。演示如何通过规划实现机器人从起始到目标位姿的运动,同时利用RViz工具可视化路径和操作流程。
通过C++程序实现MoveIt的运动规划功能,首先创建一个ROS节点和执行器,实现机器人运动控制。插入代码段,cj木木源码完成规划与执行,并在RViz中实时反馈。
进一步,实现视觉化功能,通过moveit_visual_tools插件增强机器人开发的可视化体验。在程序中添加依赖项,构建并初始化MoveItVisualTools,实现与RViz的交互。
在RViz中实现路径的可视化,通过封装函数处理视觉化信息,确保代码的简洁和高效。最后,通过配置和运行程序,观察RViz中的实时反馈,完成整个工作流程。
总结
通过本系列的学习笔记,我们系统地掌握了ROS 2环境的搭建、MoveIt的安装与使用、C++实现运动规划以及RViz的可视化技巧。尽管过程中遇到了挑战,如系统配置问题和网络环境的不稳定,但通过坚持不懈的努力,成功实现了从理论到实践的转变。这不仅加深了对机器人开发技术的理解,也锻炼了问题解决和调试能力。未来,我们将在实践中继续深化对这些技术的理解,为更复杂的机器人应用奠定坚实的基础。
四足机器人雷达-视觉导航2:Elevation mapping局部高程图测试
为了四足机器人实现高效的局部高程图构建,结合视觉与雷达技术,确保导航的准确性和稳定性,本文将详细阐述这一过程。四足机器人相较于自动驾驶,需要主动选择落足点,因此局部高程图尤为重要。获取高程图,视觉与雷达传感器各有优劣,例如视觉传感器易受光照、遮挡等因素影响,而雷达传感器在噪声、死区和点云稀疏等问题上则有所欠缺。因此,触控终端 源码融合视觉与雷达数据,形成互补,成为目前较为稳定的解决方案。
雷达提供长期可靠的里程计信息,而深度视觉则用于获取局部深度数据,从而建立高程图。这种方案分为实时高程图与全局高程图两种。实时高程图基于深度信息快速构建,实现简便,速度较快,甚至可能无需全局定位数据。然而,视角和深度图质量问题可能导致噪声和空洞。全局高程图则先建立整个环境的地图,然后基于里程计信息提取局部信息,这种方案需要全局定位信息,但通过利用机器人多视角下的数据采集,不断优化修正全局高程地图,最终提取的局部高程图质量更高。
实现高程图建立的项目,以ETH开源的“elevation mapping”为代表。本文提供了一个从最初下载、编译到最终基于Gazebo仿真运行简单Demo的过程,旨在帮助快速部署项目。首先,确保ROS的正确安装与更新,采用melodic版本。其次,安装Grid Map、kindr、pcl点云库等依赖库,注意在编译过程中可能遇到的内存不足等问题,确保编译环境的资源充足。在进行PCL库编译时,遇到的“error: ‘PCL_MAKE_ALIGNED_OPERATOR_NEW’ does not name a type”问题,可以通过修改为“EIGEN_MAKE_ALIGNED_OPERATOR_NEW”解决。在下载和编译kindr_ros与elevation mapping后,通过catkin_make进行编译,可能遇到的编译错误如“fatal error”问题,需要找到并修正hpp文件中的错误。
在完成安装与编译后,通过下载turtlebot3与相关ROS包,诺克游戏源码建立新的catkin工作空间,下载源码并编译。在编译过程中,可能需要解决与python版本匹配、文件路径等细节问题。运行Demo,基于turtlebot3和RealSense的示例,注意可能需要对脚本进行修改以适应特定的环境或系统配置,如Python版本匹配问题,以及修改地图文件路径。在运行中,通过Rviz观察点云和高程图数据,验证高程图构建的实时性和准确性。
然而,在实际应用中,还存在一些挑战。例如,运算速度可能无法满足实时需求,尤其是不采用GPU的情况下,刷新频率可能较低。真实世界中的传感器噪声相比仿真环境更大,地图构建效果可能不如预期。此外,需要进一步开发代码以提取局部高程图,并通过UDP或共享内存等方式将其发送给步态控制器。随着机器人运动,全局地图的构建与维护对于计算资源的要求较高,尤其是使用低成本处理器时。面对这些问题,可能需要优化算法、改进资源管理,或直接构建局部地图以适应不同环境与设备的性能限制。
综上所述,结合视觉与雷达技术构建的高程图,对于四足机器人的局部导航具有重要价值。通过合理利用开源资源与技术工具,可以实现从环境感知到高程图构建的全流程,为机器人的自主导航提供坚实的支撑。面对实际应用中的挑战,持续的技术优化与创新将推动四足机器人在复杂环境下的高效导航与操作能力。
ROS 2中发布和可视化传感器数据实战系列之四:kitti公开数据集IMU数据的发布及在RViz2中的显示
在ROS 2中发布和可视化传感器数据实战系列之四:kitti公开数据集IMU数据的发布及在RViz2中的显示
本文将指导您如何在ROS 2中发布kitti公开数据集的IMU数据,并在RViz2中进行可视化显示。iphone看网站源码在ROS 2中,RViz2默认不支持IMU数据的可视化。因此,我们将通过添加Github网站上的imu_tools开源存储库中的rviz_imu_plugin插件软件包,将IMU数据中的线性加速度、角速度、方位等数据在RViz2中进行可视化显示。以下是详细步骤:
1. **发布IMU数据**:使用Python编写一个ROS 2发布者节点,读取kitti数据集中oxts/data子目录中的.txt文件,从中提取方位、角速度和线性加速度数据,转换为sensor_msgs/Imu消息类型进行发布。确保在发布消息时仅包含方位、角速度和线性加速度数据及其协方差矩阵。
2. **安装rviz_imu_plugin插件**:从imu_tools存储库中获取rviz_imu_plugin插件,按照自述文档中的指示进行二进制包安装或源代码编译安装,并设置环境变量。
3. **在RViz2中显示IMU数据**:在RViz2中添加(rviz_imu_plugin)插件后,可以将发布到话题上的IMU消息数据进行可视化显示。
注意,RViz2在ROS 2中对于IMU消息的直接支持不足,因此需要通过上述步骤进行自定义配置。通过这些步骤,您可以有效地在RViz2中展示kitti数据集中的IMU数据。
**IMU简介**:
- IMU(Inertial Measurement Unit)是测量物体三轴角速度和加速度的设备,内部包含三轴陀螺仪和三轴加速度计。
- IMU数据包含线性加速度、角速度、方位等信息,可用于自动驾驶、机器人和工业自动化等领域。
- IMU传感器在定位领域的地位不容忽视,尤其与全球导航卫星系统(GNSS)结合使用时,能提供高度准确的定位信息。
**IMU在ROS 2中的应用**:
- ROS 2中发布IMU数据并利用rviz_imu_plugin插件进行可视化显示,是实现自动驾驶、机器人应用中定位与姿态控制的关键步骤。
- 本文通过具体示例和代码指导,帮助开发者在ROS 2环境中实现IMU数据的发布与可视化,为相关应用提供技术支持。
**总结**:
- 通过本实战系列之四,您将掌握如何在ROS 2中发布kitti公开数据集的IMU数据,并在RViz2中进行可视化显示。
- 了解IMU及其在ROS 2中的应用,对于自动驾驶、机器人和工业自动化领域的开发人员而言,是一次宝贵的学习经验。
cruise-automation Webviz 简介
cruise-automation项目旨在开发一系列与现有开源工具如rviz、rqt console、rqt_runtime_monitor、rostopic echo和rqt_plot相呼应的可视化面板。通过进一步的开发,添加了针对Cruise特定需求的自定义面板,远离传统工具,以更精细地满足工程师解决问题的需要,并保持对开放源代码机器人社区的实用性。随着定制化和对过时工具逐渐迁移,这些面板功能日益精进。 项目目标是替代ROS中的可视化工具,如rviz、rqt等。Webviz实现这一目标,提供直观且功能丰富的界面。在试用过程中,发现其稳定性高、加载速度快、使用便捷。以下是Webviz的安装和运行步骤,假设操作系统为Ubuntu .。 Webviz与ROS数据传递通过rosbridge_suite进行。对于实时显示数据(而非使用bag文件),需要安装rosbridge_suite。 Webviz启动默认使用websocket端口,无需调整,连接时会自动使用该端口。 安装nodejs时,遵循github.com/nodesource/d...指南,选择较旧版本(如v.x,避免新版本编译问题)。 接下是Webviz编译过程: 下载代码。 执行编译命令,确保根目录下安装了所有依赖。 再次执行编译。 运行编译好的程序,浏览器将直接打开预览界面(推荐使用Chrome浏览器)。 测试Webviz效果时,可使用两个示例topic:速腾的lidar数据和gnss定位信息(默认时间坐标,也可切换为xy坐标形式)。实测效果如图所示,展示了Webviz在可视化数据方面的强大能力。Autoware.universe 源码解读(一)
在Autoware的自动驾驶仿真软件中,launch文件起着至关重要的作用。autoware.launch.xml是其中一个基础的launch文件,它使用XML语言编写,以定义启动ROS节点、参数和设置默认值。这个文件的核心结构包括version="1.0"(XML 1.0版本)和encoding="UTF-8"(UTF-8编码)。
文件的前半部分侧重于参数定义和设置,包括地图路径、车辆模型、传感器模型和点云容器,这些都可以通过传递参数进行灵活调整。例如,vehicle_id和launch_vehicle_interface是两个全局参数,vehicle_id默认值为环境变量VEHICLE_ID的值,而launch_vehicle_interface默认为true,表示是否启动车辆接口。
参数check_external_emergency_heartbeat控制外部紧急停车功能,当不需要时需将其设为false。system_run_mode和launch_system_monitor等参数分别定义了系统的运行模式和是否启动系统监视器。此外,rviz可视化工具的启用、rviz配置文件路径,以及感知模式的选择等也被详细定义。
launch文件中还包括一个include标签,引入了global_params.launch.py,该文件通过arg标签传递参数,以进行更精细的配置。例如,如果launch_vehicle设置为true,它将启动vehicle.launch.xml,并传递参数。
总的来说,autoware.launch.xml通过巧妙地定义和传递参数,灵活地控制和配置Autoware的各个子系统,以实现自动驾驶的模拟和测试。
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 定位与搜索的小项目开发。
单目USB摄像和Intel Realsense Di 头+ Apriltag_ros配置和实现对相机姿态的估计
配置平台:ROS版本:noetic/melodic,Ubuntu:.LTS/.LTS
一:AprilTag_ros的配置
1.1 usb摄像头的安装和使用
1.1.1下载源码
1.1.2编译工作空间
1.1.3添加usb_cam属性文件
1.1.4编译usb_cam源码
回到工作空间的src文件中,再去usb_cam中进行编译
5.测试USB摄像头
1)运行ROS
回到usb_cam的launch文件夹中,运行usb_cam的功能包
1.2 AprilTag_ros包的安装
安装依赖库apriltag
编译依赖库apriltag
进入 apriltag 文件夹中,然后新建文件夹build
安装AprilTag_ros包
将源码拷贝到你的工作空间中的src工作目录下
回到工作空间进行编译
1.3 单目摄像机的标定
摄像机标定是通过寻找对象在图像与现实世界的转换数学关系,找出其定量的联系,从而实现从图像中测量出现实中实际数据的目的,基于此才能实现后面的位姿检测。
1.3.1安装标定功能包
1.3.2打开摄像头进行标定
第二条命令参数说明:size:棋盘内交叉点的个数,行*列square:一个格子的边长,单位是mimage:订阅摄像头发布的图像话题(ROS topic)camera:寻找相应的设备相机名(现实情况应该是/dev,仿真的话,不清楚)
摄像机的校准是以一个由黑白方块组成的棋盘为基准进行的,如图8-8所示。从下面的地址下载8x6国际象棋棋盘,并打印出来后将其贴到一个平坦的纸箱。有时也会打印成超过1米的棋盘,但这里用的是A4纸。作为参考,8x6棋盘横向有9个方块,所以有8个交叉点,而竖向有7个方块,有6个交叉点,所以它被称为8x6棋盘。
/AprilRobotic... Tag Size Definition 部分可以看到并排的6个二维码,下面的字符串(如:“Tagh” 和 “TagCircleh7”)就是二维码类型,直接替换即可。其他参数使用默认值即可。
2.配置 tags.yaml
这个文件只有两个标签可以编写。
这里面写要使用多少个二维码,apriltag_ros 允许一张中出现多个二维码,但一定要明确每个二维码类型,如果想要添加的话这样写就可以,但记得两个标签都要添加:
standalone_tags解释:
id:你给每个二维码的编号,可以从任意数字开始,只要你自己能区分哪个号是哪个二维码就好;
size:二维码的长度。这个值是需要手动测量出来的,不同类型的二维码测量方式不同,具体可以看他的链接 github.com/AprilRobotic... Tag Size Definition 部分,红色箭头就是你需要手动侧脸的二维码长度,单位是米,然后填写到这里;
name:和id一样,这是为了更好地区分可以任起;
tag_bundles注释:
修改 continuous_detection.launch 文件
打开 apriltag_ros/launch/continuous_detection.launch 文件。
需要修改的主要有两个标签:
这两个值是在 rostopic list中查看相机发布的话题中看见,如果你用的不是realsense,那么需要按照相机包发布出来的话题名修改,这里用的是默认设置的 realsense 相机话题。
注意:“camera_name” 一定只能用前缀,如果多加了 “/” 会导致算法订阅到的话题变成了 “/camera/color//image_raw” 这样是不会出数据的,因为后面其实是做了一个字符串拼接:
最终修改如下:
4.启动 apriltag_ros 算法
如果没有出现红色的报错说明启动成功了,如果有则检查 yaml 文件有没有出现多一个逗号或者省略号之类的。
然后再开一个窗口就可以订阅推算出来的话题:
正确检测到的应该会有下面的信息:
hdl_graph_slam|后端优化|hdl_graph_slam_nodelet.cpp|源码解读(四)
hdl_graph_slam源码解读(八):后端优化后端概率图构建核心:hdl_graph_slam_nodelet.cpp
整体介绍 这是整个系统建图的核心,综合所有信息进行优化。所有的信息都会发送到这个节点并加入概率图中。 包含信息 1)前端里程计传入的位姿和点云 2)gps信息 3)Imu信息 4)平面拟合的参数信息 处理信息步骤 1)在对应的callback函数中接收信息,并放入相应的队列 2)根据时间戳对队列中的信息进行顺序处理,加入概率图 其他内容 1)执行图优化,这是一个定时执行的函数,闭环检测也在这个函数里 2)生成全局地图并定时发送,即把所有关键帧拼一起,得到全局点云地图,然后在一个定时函数里发送到rviz上去 3)在rviz中显示顶点和边,如果运行程序,会看到rviz中把概率图可视化了 关键帧同步与优化 cloud_callback cloud_callback(const nav_msgs::OdometryConstPtr& odom_msg,const sensor_msgs::PointCloud2::ConstPtr& cloud_msg) 该函数主要是odom信息与cloud信息的同步,同步之后检查关键帧是否更新。 关键帧判断:这里主要看关键帧设置的这两个阈值keyframe_delta_trans、keyframe_delta_angle 变成关键帧的要求就是:/hdl_graph_slam/include/hdl_graph_slam/keyframe_updater.hpp 优化函数 optimization_timer_callback(const ros::TimerEvent& event) 函数功能:将所有的位姿放在posegraph中开始优化 loop detection 函数:主要就是将当前帧和历史帧遍历,寻找loop。 闭环匹配与信息矩阵计算 匹配与闭环检测 潜在闭环完成匹配(matching 函数) 不同loop的信息矩阵计算(hdl_graph_slam/information_matrix_calculator.cpp) gps对应的信息矩阵 hdl_graph_slam/graph_slam.cpp 添加地面约束 使用add_se3_plane_edge函数的代码 执行图优化 优化函数optimization_timer_callback 执行图优化,闭环检测检测闭环并加到了概率图中,优化前 生成简化版关键帧,KeyFrameSnapshot用于地图拼接 生成地图并定时发送 生成地图:简化版关键帧拼接 定时发送:src/hdl_graph_slam_nodelet.cpp文件中 系统性能与扩展性 hdl_graph_slam性能问题在于帧间匹配和闭环检测精度不足,系统代码设计好,模块化强,易于扩展多传感器数据融合。 总结 hdl_graph_slam后端优化是关键,涉及大量信息融合与概率图构建。系统设计清晰,扩展性强,但在性能上需改进。