1.【ROS2机器人入门到实战】Cartographer介绍与安装
2.cartographer_ros定位功能位姿获取与重定位设置
3.因子图优化 SLAM 研究方向归纳
4.Cartographer源码详解|(2)Cartographer_ros
5.Cartographer ROS编译安装及相关可执行文件理解
6.最强干货|ROS与RPLIDAR结合使用说明及问题汇总
【ROS2机器人入门到实战】Cartographer介绍与安装
Cartographer是算法算法Google开源的实时SLAM系统,适用于2D和3D环境。源码原理在机器人领域,算法算法因其优越性被广泛采用。源码原理该系统具有多种输入选项,算法算法如深度信息、源码原理php源码基本里程计信息、算法算法IMU数据等。源码原理对于有兴趣深入研究SLAM的算法算法人来说,理解其系统架构很有帮助。源码原理
安装Cartographer有两种方式:一种是算法算法通过apt安装,另一种是源码原理源码安装。小鱼推荐使用源码安装,算法算法以便于学习。源码原理首先,算法算法将源码克隆到工作空间的src目录下。接着,使用rosdepc或一键安装命令来安装依赖。之后,通过特定命令进行编译。最后,通过指令检查安装是否成功。
Cartographer提供了丰富的配置选项,包括前端和后端参数。前端参数用于轨迹构建,主要在trajectory_builder_2d.lua文件中设定。后端参数则在pose_graph.lua文件中管理地图构建过程。此外,还需要配置与ROS2的通信参数,如从哪些话题读取数据,这些参数在backpack_2d.lua文件中设定。
总结来说,通过上述步骤可以成功安装和配置Cartographer,为机器人建图工作奠定基础。接下来,将为fishbot配置Cartographer,并使用fishbot进行建图实践。希望以上内容能帮助您更好地理解并应用Cartographer。
cartographer_ros定位功能位姿获取与重定位设置
小白在机器人定位项目中使用cartographer进行定位,面临位姿获取频率低的问题,测试显示激光频率~hz时,获取位姿频率仅为5hz。为解决此问题,尝试了以下方法:
首先,对cartographer进行源码安装。
接着,运行cartographer_rosd的demo,参考.launch运行文件和.lua配置文件,并开启pure localization功能。
尝试通过tf变换获取位姿坐标,但发现频率受限于5hz左右。为解决此问题,建立tf变换节点,发布2D位姿topic,实现高频率的位姿获取。
深入源码修改,添加::ros::Publisher _pose_pub,对 node.cc进行调整,长短通吃源码从而获取高频率的位姿topic。
在rviz中,利用“2D Pose Estimate”功能,发布/initialpose话题,并根据机器人当前位置进行重定位设置。通过点击地图位置,发布包括x,y和theta的topic进行重定位。
总结流程,通过源码修改和rviz重定位设置,实现了高频率的位姿获取及重定位功能。若有疑问,欢迎交流,共同学习。
因子图优化 SLAM 研究方向归纳
因子图优化在SLAM研究中扮演着关键角色,但选择正确的路径至关重要。经过作者近半年的探索,我们看到了他的摸索历程和教训。以下是关键点的归纳:错误的学习路径
作者起初被cartographer论文引入,尝试了平方根SAM和isam2,以及GTSAM框架,但陷入论文、教材与框架的循环,未能深入理解。错误的方法包括直接阅读源代码、依赖可视化教程而非底层原理,以及频繁切换学习材料。正确的入门路径
建议从实际应用GTSAM库开始,通过理解isam1中的因子图构建,尤其是用Matlab实现基础概念。重点在于掌握因子图的基本思想和增量优化,包括QR分解和Givens旋转。之后理解因子图转贝叶斯网的过程,并研究Bayes tree的构建和更新。研究方向与挖掘点
- 算法改进:isam1的优化策略、isam2的树转换简化,以及贝叶斯树的深度调整。
- 新应用:如LOAM的增量优化应用,可以寻找新的机器人应用场景,比如高精度实时地图需求。
避开的陷阱
- 避免陷入代码细节,保持理论核心,注意GTSAM的工程性质。
- 不要一开始就追求贝叶斯树,关键在于因子图和信息矩阵的增量优化。
作者的困惑
- 寻找实时全局优化的平衡,以及技术应用与现实需求的结合。
总的来说,因子图优化的研究方向包括算法优化和新应用的探索,同时需要明确定位,避免陷入细节,保持理论与实践的结合。希望这些建议能帮助后来者避免作者的弯路,找到自己的研究方向。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的spu商品源码坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(Rotation matrix),该矩阵的各分量由两组基之间的内积组成,反映了旋转前后同一向量坐标的变化关系。平移则通过向旋转后的坐标中加入平移向量t实现。通过旋转矩阵R和平移向量t,我们可以完整描述欧氏空间中的坐标变换关系。
为了简化变换过程,引入齐次坐标和变换矩阵。在三维向量末尾添加1形成四维向量,进行线性变换。变换矩阵T能够将两次变换叠加简化为一个操作,便于后续计算。
Cartographer的坐标转换程序位于transform文件夹下的rigid_transform中,用于求解变换矩阵的逆。
在sensor_bridge类中,构造函数将传入配置参数,对里程计数据进行处理。首先将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。
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解决方案,包括数据收集、处理、验证和应用。
最强干货|ROS与RPLIDAR结合使用说明及问题汇总
ROS作为机器人软件平台,提供类似操作系统功能,对于机器人行走研究至关重要。Llidar作为机器人定位导航的核心传感器,在自主行走、定位导航方面起到关键作用。结合使用,使机器人自主定位导航效果更优。
RPLIDAR产品简介:SLAMTEC思岚科技自主研发激光雷达,有A1和A2两款成熟商业产品。A1测距范围0.2~6米,每秒2K个点,file源码分析扫描频率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、发送问题至支持邮箱。
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文件名。
资源占用情况分析将后续进行。
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万元时,我也只能提供支持。这次真心希望可以贡献出代码,实现实实在在的贡献。
年年底发布了开发者申请价格,但数量有限,早已连送带卖售罄。年又有几十位爱好者填写了问卷,忘记查阅。每年的双十一双十二我们都会有优惠活动,感谢大家的关注。