1.最强干货|ROS与RPLIDAR结合使用说明及问题汇总
2.Cartographer ROS编译安装及相关可执行文件理解
3.ROS2测试源码编译安装cartographer
4.Cartographer源码详解|(2)Cartographer_ros
5.因子图优化 SLAM 研究方向归纳
6.PX4 视觉定位设置及多种定位数据获取方法(T265为例)
最强干货|ROS与RPLIDAR结合使用说明及问题汇总
ROS作为机器人软件平台,源码提供类似操作系统功能,源码对于机器人行走研究至关重要。源码Llidar作为机器人定位导航的源码核心传感器,在自主行走、源码定位导航方面起到关键作用。源码dubbo模型源码大全结合使用,源码使机器人自主定位导航效果更优。源码
RPLIDAR产品简介:SLAMTEC思岚科技自主研发激光雷达,源码有A1和A2两款成熟商业产品。源码A1测距范围0.2~6米,源码每秒2K个点,源码扫描频率5~hz可调;A2测距范围0.~8米,源码每秒4K个点,源码扫描频率5~ hz可调。源码官方提供SDK和开发指导文档。
具体操作流程:设备管理器找到串口,打开frame_grabe,选择对应端口查看,进入frame_grabber界面。
RPLIDAR的ROS包rplidar_ros:面向全球ROS开发者推出,价格低廉,推动激光雷达在ROS中的应用,促进服务机器人移动导航、避障技术发展和人才储备。建立通用通讯框架,让开发者遵循通讯协议,关注数据接口,完成模块功能。
rplidar_ros wiki:包含产品功能、接口、参数说明和使用流程、支持版本信息。
rplidar_ros github:包含源码、版本管理、开发者问题讨论。
消息机制:/scan话题、stop_motor和start_motor服务。/scan用于发送雷达数据消息,消息格式为sensor_msgs/LaserScan,避障或SLAM功能模块调用。stop_motor和start_motor用于客户端调用服务器关闭和启动雷达。
坐标系说明:rplidar顺时针旋转,SDK左手系数据转化为右手坐标系输出。
启动说明:查看端口权限,执行相应脚本赋予固定权限,启动节点,显示雷达数据。
搭建机器人系统:关注topic/service和TF帧协调,通过模型、静态变换、TF查看TF树。
利用RPLIDAR建图:开源2D激光雷达SLAM ROS包有gmapping、Hector、karto、cartographer等。构建效果取决于算法实现,参数设置和内部代码。
问题汇总:树莓派等系统无法启动检查供电、设置端口权限、原始数据输出形式、ntenstity数据无效、固定角度需求添加滤波节点、财务程序源码检查端口、tf_tree和rqt_graph、发送问题至支持邮箱。
Cartographer ROS编译安装及相关可执行文件理解
一、编译安装Cartographer ROS
为了安装 Cartographer ROS,首先需要确保ROS版本为kinetic,操作系统为Ubuntu.,并创建一个名为catkin_ws的工作空间。
安装所需的工具和依赖项,包括wstool、rosdep、ninja。然后,通过catkin_make工具构建并安装cartographer_ros。
加载数据包进行测试,运行launch和rosbag,最终可以生成slam图。
二、编译方法
编译Cartographer ROS时,使用catkin_make命令,这简化了catkin的标准工作流程,依次调用cmake、make和make install。
编译后的工作空间内将有src、build_isolated、devel_isolated、install_isolated等文件夹,分别用于源代码、孤立编译、开发和安装。
三、install_isolated内可执行文件
在install_isolated文件夹内,有多种可执行文件,如cartographer_assets_writer、cartographer_autogenerate_ground_truth、cartographer_compute_relations_metrics、cartographer_dev_rosbag_publisher等。
cartographer_assets_writer用于保存和使用有效资源;cartographer_autogenerate_ground_truth自动生成期望的真实输出;cartographer_compute_relations_metrics计算相关指标。
cartographer_dev_rosbag_publisher发布rosbag信息,用于数据收集与分析;cartographer_dev_trajectory_comparison进行轨迹比较;cartographer_migrate_serialization_format迁移序列化格式。
cartographer_node为ROS中的核心节点,负责实时SLAM;cartographer_occupancy_grid_node构建并发布ROS的occupancy_grid地图;cartographer_offline_node进行离线SLAM。
cartographer_pbstream_map_publisher创建静态占据栅格;cartographer_pbstream_to_ros_map将pbstream格式转换为标准ROS格式地图;cartographer_rosbag_validate验证rosbag数据。
cartographer_start_trajectory用于在本地化模式中设置起始位姿。
通过这些工具和节点,Cartographer ROS提供了一个全面的SLAM解决方案,包括数据收集、处理、验证和应用。
ROS2测试源码编译安装cartographer
Cartographer是一个跨平台、传感器配置提供实时同步定位和绘图(SLAM)的系统,具有回环检测优势,资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。
若国内访问github受限,可选择Gitee上的备份仓库进行下载。尝试多个版本,确认在Ubuntu humble版本下能够成功下载和安装。
在安装过程中,数据排列源码需要下载依赖项。在Ubuntu上,首先安装libabsl-dev、libceres-dev以及liblua5.3-dev等包。对于ceres-solver,需确保CUDA、显卡加速和TBB指令集优化选项已配置。
在开发板上,通过源码编译安装三方依赖。确保所有依赖包均正确安装,包括protobuf版本为v3.4.1分支。
完成所有依赖安装后,开始编译Cartographer源码。首先下载官方数据集,注意ROS2格式的rosbag转换,使用rosbags工具进行转换。
介绍ROSbag格式,ROS1的.rosbag文件为二进制存储格式,而ROS2使用SQLite数据库格式,支持跨平台和扩展性。两种格式转换方法,推荐使用rosbags工具,无需依赖ROS环境。
测试Cartographer时,使用ros2命令启动示例launch文件,输入特定的bag文件名以加载数据集。测试3D数据集时,使用相应的launch文件和bag文件名。
资源占用情况分析将后续进行。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,对里程计数据进行处理。pm源码修改首先将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。
因子图优化 SLAM 研究方向归纳
因子图优化在SLAM研究中扮演着关键角色,但选择正确的路径至关重要。经过作者近半年的探索,我们看到了他的摸索历程和教训。以下是关键点的归纳:错误的学习路径
作者起初被cartographer论文引入,尝试了平方根SAM和isam2,以及GTSAM框架,但陷入论文、教材与框架的循环,未能深入理解。错误的方法包括直接阅读源代码、依赖可视化教程而非底层原理,以及频繁切换学习材料。正确的入门路径
建议从实际应用GTSAM库开始,通过理解isam1中的因子图构建,尤其是用Matlab实现基础概念。重点在于掌握因子图的基本思想和增量优化,包括QR分解和Givens旋转。之后理解因子图转贝叶斯网的过程,并研究Bayes tree的构建和更新。研究方向与挖掘点
- 算法改进:isam1的优化策略、isam2的树转换简化,以及贝叶斯树的深度调整。
- 新应用:如LOAM的增量优化应用,可以寻找新的机器人应用场景,比如高精度实时地图需求。
避开的陷阱
- 避免陷入代码细节,保持理论核心,注意GTSAM的工程性质。
- 不要一开始就追求贝叶斯树,关键在于因子图和信息矩阵的增量优化。
作者的困惑
- 寻找实时全局优化的平衡,以及技术应用与现实需求的结合。
总的来说,因子图优化的源码笔记参数研究方向包括算法优化和新应用的探索,同时需要明确定位,避免陷入细节,保持理论与实践的结合。希望这些建议能帮助后来者避免作者的弯路,找到自己的研究方向。
PX4 视觉定位设置及多种定位数据获取方法(T为例)
本文详细介绍了将视觉定位数据传递给PX4飞控的方法,并以T为例演示了视觉定位的相关设置及效果。主要有三种方法:通过向指定的mavros话题发送定位数据;将定位数据发布为tf变换,使px4订阅该tf变换;以及修改px4_config.yaml文件,将listen设置为true。T是四旋翼视觉定位常用的定位方案,然而关于其原理的讲解较少。本文包括详细的视频讲解,总计时长超过分钟。通过本文,读者可以轻松学习如何将T应用在PX4实机上。
目前已知的将视觉定位数据传递给PX4飞控的方法包括:通过向“/mavros/odometry/out”话题发送T数据;通过向“/mavros/vision_pose/pose”话题发送数据;以及修改px4_config.yaml文件,将listen设置为true,以实现tf变换的订阅。其中,修改px4_config.yaml文件的方法会导致通过topic发送定位数据的两种方法失效,而frame_id和child_frame_id之间的tf变换即为定位数据。对于cartographer而言,通过修改frame_id就可以将cartgrapher发布的tf定位数据传输给PX4飞控。
在使用EKF2进行融合定位时,需要设置相关的参数。常用的参数包括EKF2_AID_MASK的数值设置,以及EKF2_EV_DELAY参数的设置,后者对高度估计和转向的影响尤为重要(当前为作者的个人猜测)。参数设置完成后,系统需要重启才能生效。
在使用Realsense驱动时,可能遇到的疑难杂症包括:AGX Orin配置时的问题,T插着开机需要插拔,电脑无法检测T,以及Dxx相机深度点云频率低等。关于Realsense驱动的安装步骤,以Ubuntu.为例,通常有两种方式:源码安装或二进制包安装。在具体的系统环境下,读者应根据实际情况选择合适的安装方式。
从零开始一起学习SLAM | SLAM有什么用?
SLAM,即Simultaneous Localization And Mapping,是一个在移动设备上同时进行定位和地图构建的过程。我们可以通过一个日常例子来理解它,比如家用的智能扫地机器人。 早期的扫地机器人在工作时,只能简单地避开障碍物,随机游走清扫,导致效率低下且清扫不彻底。然而,随着SLAM技术的引入,现在的扫地机器人能够通过传感器扫描环境,建立地图,并根据自身的定位进行高效的清扫路径规划,包括自动回充、断点续扫等高级功能。这要求机器人具备三大能力:定位(Localization)、建图(Mapping)和路径规划(Route Planning)。 具体来说,定位是机器人需要知道自己在房间的准确位置;建图是机器人需要构建出对周围环境的详细地图;路径规划是机器人需要找到从当前位置到指定目标的最短路径。这些能力相辅相成,使得扫地机器人能够智能地完成清扫任务。 SLAM技术不仅在扫地机器人中得到应用,还在自动驾驶、无人机、AR、智能机器人等领域发挥了重要作用。传感器主要分为激光雷达和视觉两大类。激光雷达在早期SLAM研究中较为常用,因其高精度和成熟的解决方案,但价格高、体积大、信息较少的缺点也明显。而视觉SLAM则使用摄像头作为主传感器,广泛应用于AR、自动驾驶等前沿领域。 定位相关应用中,SLAM技术在自动驾驶中主要用于更精确地确定汽车的位置。在室外导航方面,尽管地图类App已经做得很好,但它们在车道识别、GPS失效区域的定位等方面仍有局限性。通过SLAM技术,可以实现更精准的室内定位,如在电商仓库的AGV机器人、移动机器人等场景。 建图相关应用中,SLAM可以用于生成物体的三维模型或对较大场景进行三维重建。这在室内场景的三维重建、增强现实游戏、三维漫游等方面有广泛应用。 关于SFM(结构从运动)和SLAM的区别,它们讨论的是相似的问题,但起源和应用领域不同。SFM强调实时性,通常离线处理,而SLAM更注重实时定位与地图构建。SFM处理的图像通常为同一场景在不同时间、不同相机拍摄的,而SLAM一般要求同一相机的序列图像或连续视频。SFM使用相机作为传感器,而SLAM除了相机外,还会集成惯导、激光雷达等传感器。 对于快速对自由女神像进行3D重建,考虑到没有特殊硬件的情况下,选择SLAM可能是一个更合适的方式,因为它可以实时处理动态环境,而SFM通常更适合静态场景的重建。 为了深入学习SLAM,可以参考以下资源:基于LiDAR的多传感器融合SLAM系列教程:LOAM、LeGO-LOAM、LIO-SAM
系统全面的相机标定课程:单目/鱼眼/双目/阵列相机标定:原理与实战
视觉SLAM必备基础课程:视觉SLAM必学基础:ORB-SLAM2源码详解
深度学习三维重建课程:基于深度学习的三维重建学习路线
激光定位+建图课程:激光SLAM怎么学?手把手教你Cartographer从入门到精通!
视觉+IMU定位课程:视觉惯性里程计讲教程全部上线!IMU预积分/残差雅克比推导、边缘化约束、滑窗BA!
手把手图像三维重建课程:系统学三维重建讲全部上线!掌握稠密匹配、点云融合、网格重建、纹理贴图!
通过这些课程和资源,你可以快速入门SLAM,并在实践中掌握相关技能。ROS开源项目:(一)中文语音交互系统ROSECHO (二)教学级别无人车Tianracer
开发之路永无止境,往往在最后期限的白板上写着的计划,往往只是一份空想。年初时,我定下了两个目标,计划在年末完成,然而时间在拖延中流逝,直到如今,我才发现,真正的开源精神并非一个人的单打独斗,而是众人协作的火焰。
记得一年前,我四处奔波,从开源社区汲取养分,同时也渴望贡献出自己的力量。然而,回顾过去,我却发现并没有做出任何贡献。这次,我希望能够集结各路伙伴,如果有志于参与开源项目,我们能共同打造一个GitHub上的百星、千星项目。几位资深程序员已经搭建好了基础,硬件改进较多,但程序完善程度未达预期。我们期望有更多的年轻朋友加入我们,与我们一起学习软件的版本控制、代码规范和团队协作,共同完成复杂的机器人项目,实现成长与蜕变。
(一)中文语音交互系统ROSECHO
ROSECHO的GitHub源码库已准备好,欢迎先star再深入阅读。此代码遵循BSD开源协议。
详细中文介绍文档
面对智能音箱市场,许多人或许会质疑我们的团队为何要涉足这个领域。然而,故事并非如此简单。在年,我们计划为一个大型展厅打造讲解机器人,采用流行于Android系统的接待引导机器人,其语音交互功能本无问题,但当时的挑战在于,尚未有集成cartographer在数千平米展厅中进行建图导航的方案。因此,我们决定打造一款完全基于ROS的讲解机器人。市场上虽然有众多智能音箱,但缺乏适用于ROS二次开发的产品。在科大讯飞一位大佬的介绍下,我们选择了AIUI方案,虽然开发难度大,但高度定制化,非常适合我们这样的开发团队。于是,我们主要任务转变为开发一款能够在ROS下驱动的智能音箱,ROSECHO便由此诞生。
第一版智能音箱在年4月问世,包含W的大喇叭、6环麦克风,以及ROS主控制器,下方控制了一个云迹科技的水滴底盘。了解过ROS星火计划进阶课程的朋友大概知道,课程中的大作业之一是语音命令移动机器人端茶倒水,而我们的任务相当于完成了一个加强版的大作业。
整个机器人在年7月完成,音箱分散到身体各个部分,环麦位于头顶,喇叭置于身体两侧。其他传感器、执行机构、决策、定位导航均基于ROS,定制了条特定问答,调试的机器人在场馆中行走上下坡不抖动,定位准确,7*小时工作稳定。音箱在大机器人上使用效果出色,主要得益于讯飞的降噪和回声消除技术,使得远场对话和全双工对话得以实现。社区中许多小伙伴也尝试了软核解决方案,但由于环境限制较大。于是,我们决定将音箱从大家伙改为普通智能音箱大小,通电即为智能音箱,USB接入ROS后,只需启动launch,即可接收语音识别结果,发送TTS语料,配置网络、接收唤醒角度等。
这次体验深刻地让我认识到,做大容易做小难。过完春节后,年8月ROS暑期夏令营期间,我们做了N款外壳,测试了M种喇叭,贴了P版外围电路,程序则改动不大。主要是由于时间有限,无法进行更多改进。样品均为手工制作,音质上,7w的喇叭配有一个无源辐射板,对于从森海HD入门的人来说,音质虽有瑕疵,但足以满足日常使用。
之前在想法中发布了一个使用视频,大家可参考运行效果。
ROSECHO基本情况介绍完毕,如何开始呢?
从零开始:推荐给手中已有讯飞AIUI评估板的小伙伴,记住,评估板而非麦克风降噪板(外观相似,简单区分是评估板售价元,降噪板元)。手头的评估板可通过3.5mm接口连接普通电脑音箱,再准备一根USB转转换头连接评估板DB9接口。后面需要根据实际串口修改udev规则,理论上可配合ROSECHO软件使用。硬件工作量较大,还需包含移动机器人所需机械设计、电气改造等。好处是拥有AIUI后台,可以定制云端语料和技能,但这又是另一个领域的能力,也不是三下五除二能完成的。
从ROSECHO开始:直接购买ROSECHO,首发的十台会附赠ROS2GO,只需连接自带电源并用USB线连接电脑,配置无线SSID和密码即可。连接方便,我们维护云端语料,人设为智能机器人管家,大家只需关注如何利用识别后的词句控制机器人和进行应答。云端问答AIUI处理,一些自定义问答可在本地程序中处理,务必联网,因为语音识别本身需要网络。具体软件启动和简单demo请查看GitHub软件库的说明。
然后做什么:要实现智能语音交互功能的移动机器人,需要对ROS中的actionlib非常熟悉。我们提供了简单的demo,可以控制机器人在turtlebot stage仿真环境中根据语音指令在两点之间移动,也可以根据唤醒方位进行旋转。之后还需增加音箱的TF变换。
大机器人中的状态机采用层次状态机(Hierarchical state machines),适用于移动机器人的编程,框架准备开源,方便大家开发自己的智能移动机器人策略。参考下面链接,希望深入了解也可以购买译本,肯定是比ROS By Example中的Smach状态机更适合商用级产品开发。
还计划做一套简单的语音遥控指令集,机器人问答库,在iflyos中构建适合机器人的技能库。何时能完成尚不确定,大家一起加油!
(二)教学级别无人车Tianracer
GitHub源码库已准备就绪,欢迎先star再深入阅读。遵循Hypha Racecar的GPLv3协议。
这是最近更新的详细使用手册。相比ROSECHO,Tianracer的基本功能均已完成,至少可以拿来学习建图导航,了解SLAM。
Tianracer是一个经过长时间准备的开源项目,年从林浩鋕手中接过Hypha Racecar后,希望将项目发扬光大。这两年改进了软件框架、周边硬件、机械结构,并增加了新的建图算法,但仍有大量工作待完成。这两个月在知乎想法和微信朋友圈分享了项目的进展,经历了多次迭代,现在大致分为入门、标准、高配三个版本。三个版本的软件统一,可通过环境变量更改设置。
最近整个项目从Tianbot Racecar更名为TianRacer,经过长时间探索,终于实现了合理的传感器与处理器配置。相比Hypha Racecar,处理器从Odroid XU4更改为NVIDIA在上半年推出的Jetson Nano,车前方增加了广角摄像头,利用Nano的深度学习加速,可以接近实时处理图像数据。相比之前的单线激光,广角摄像头大大扩展了后续可实现的功能。
TianRacer基本使用Python编写,从底层驱动到遥控等,目的是方便大家学习和二次开发。同时集成了cartographer和vins-fusion启动文件,可以尝试新的激光与视觉SLAM,基于Nano的深度学习物体识别等也是可以直接运行的。但目前功能尚未有机整合。
从零开始搭建:TianRacer搭建可能难度较大,不仅需要RC竞速车的老玩家进行机械电子改装,还需要对ROS熟悉并修改软件以进行适配,同时可能需要嵌入式程序员的帮助。对于主要关心搭建的朋友,可以参考小林的Hypha Racecar和JetRacer Tamiya版本的搭建指南。
从TianRacer开始:这批开发版本的无人竞速车附赠搭好环境的ROS2GO,TianRacer本身有开机自启功能,利用ROS2GO加上USB线对车体进行网络配置,就可以远程编程和调试。仔细参考提供的TianRacer看云文档(文档积极更新),大部分车体自带的功能都可以实现,包括但不限于建图、定位、导航、识别等。
然后做什么:利用TianRacer学习无人车的基础框架,还可以通过JupyterLab学习Jetson Nano的深度学习算法。未来计划将交通标识识别、行人和车辆检测、车道线检测等无人车基础功能融合,但不确定Jetson Nano的算力是否足够。目标是在校园内进行低成本的无人车竞速比赛,希望像CMU的Mobot室外巡线比赛一样持续发展,至今已举办届。
这个视频是搬运自YouTube。大家可深入了解非结构环境下的导航。对于不清楚结构化环境与非结构化环境的朋友,CMU和恩智浦的比赛完美诠释了两者之间的区别。
一起来玩耍吧!
在开源社区协作方面,我们也是第一次尝试,对于松散的协同开发经验不足,希望参与或组织过大型开源项目的朋友们加入我们,一起努力。有兴趣的朋友可以留言或私信。
前几日与朋友们闲聊时,想起几年前高翔博士赞助一锅粥(orb-ygz-slam)1万元时,我也只能提供支持。这次真心希望可以贡献出代码,实现实实在在的贡献。
年年底发布了开发者申请价格,但数量有限,早已连送带卖售罄。年又有几十位爱好者填写了问卷,忘记查阅。每年的双十一双十二我们都会有优惠活动,感谢大家的关注。