1.rosbag相关源码解析
2.ROS入门笔记(七):详解ROS文件系统
3.ROS开源项目:(一)中文语音交互系统ROSECHO (二)教学级别无人车Tianracer
4.怎么在github上找到对应ros版本的码查Gmapping源代码?
5.ROS中MPC局部路径规划器使用方法及源码流程解读
6.ROS博客基于ROS的自动驾驶数据集可视化项目(附源代码)
rosbag相关源码解析
rosbag核心功能解析
rosbag主要由rosbag包和rosbag_storage包构成,其常用功能包括play、码查record和view。码查下面逐一探讨它们的码查实现流程。Record功能
记录过程如下:指定要订阅的码查topic,通过subscribe函数进行订阅。码查proudnet源码下载
subscribe函数关联doQueue回调,码查关键代码如下:
... (doQueue函数内容省略)执行doRecord函数保存数据,码查涉及doWrite函数,码查主要调用writeMessageDataRecord:
... (doWrite和writeMessageDataRecord函数内容省略)Play功能
播放过程包括:通过Bag类打开并解析.bag文件。码查
初始化view对象,码查用于有条件地显示数据。码查
发布bag内消息并进行广告。码查
消息的码查发布。
Bag类与View类
Bag类用于打开并解析.bag文件,码查解析工作主要在startReadingVersion函数内进行。而View类在Bag类的基础上,对解析结果进行筛选和展示,它负责迭代bag内消息数据,流程如下:构造View类时,通过updateQueries函数处理消息迭代器。
初始化iters_,根据消息时间进行排序。
每次输出时间最早的message_instance_并补充后续消息,保持时间顺序。
对iters_内的实体持续更新并排序。
ROS入门笔记(七):详解ROS文件系统
ROS入门笔记(七):详细解析ROS文件系统 理解ROS工程的基础架构是关键。本章深入探讨了ROS的工程结构,特别是catkin编译系统、工作空间的创建与组织、package的构建以及常见文件的作用。这些内容有助于我们正确地建立和管理ROS项目。Catkin编译系统
ROS项目采用Catkin编译系统,它是基于CMake的高效工具,用于大型项目的编译与管理。早期的rosbuild已不适用,Catkin在Groovy版本中引入,提供了简化编译、更好的可移植性和跨平台支持,如今大部分核心软件包已切换至Catkin。工作空间结构
Catkin工作空间就像一个仓库,包含src、build和devel三个核心路径。src存放源代码,build用于编译,而devel则管理环境变量。创建和编译工作空间是ROS开发的基础步骤。Package的fsolve源码组织
Package是工作空间的基本单元,包含CMakeLists.txt和package.xml等文件。CMakeLists.txt定义编译规则,而package.xml则是包的详细描述,如依赖和许可信息。其他常见文件
launch文件:打包并启动程序,指定参数和控制指令。
msg/srv/action文件:自定义数据结构,用于消息、服务和动作的交互。
urdf/xacro:描述机器人模型的物理结构。
yaml文件:存储参数配置。
3D模型文件:dae/stl,用于3D模型展示。
rviz文件:配置RViz视窗的显示设置。
掌握这些基础文件和结构,是ROS开发和调试的基础。建议初学者从Catkin系统开始学习,逐步构建和管理项目。ROS开源项目:(一)中文语音交互系统ROSECHO (二)教学级别无人车Tianracer
开发之路永无止境,往往在最后期限的白板上写着的计划,往往只是一份空想。年初时,我定下了两个目标,计划在年末完成,然而时间在拖延中流逝,直到如今,我才发现,真正的开源精神并非一个人的单打独斗,而是众人协作的火焰。
记得一年前,我四处奔波,从开源社区汲取养分,同时也渴望贡献出自己的力量。然而,回顾过去,我却发现并没有做出任何贡献。这次,我希望能够集结各路伙伴,如果有志于参与开源项目,我们能共同打造一个GitHub上的百星、千星项目。几位资深程序员已经搭建好了基础,硬件改进较多,但程序完善程度未达预期。我们期望有更多的年轻朋友加入我们,与我们一起学习软件的版本控制、代码规范和团队协作,ranameto源码共同完成复杂的机器人项目,实现成长与蜕变。
(一)中文语音交互系统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后台,可以定制云端语料和技能,uc 源码但这又是另一个领域的能力,也不是三下五除二能完成的。
从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万元时,我也只能提供支持。这次真心希望可以贡献出代码,实现实实在在的贡献。
年年底发布了开发者申请价格,但数量有限,早已连送带卖售罄。年又有几十位爱好者填写了问卷,忘记查阅。每年的双十一双十二我们都会有优惠活动,感谢大家的关注。
怎么在github上找到对应ros版本的Gmapping源代码?
在 GitHub 上找到对应 ROS 版本的 Gmapping 源代码,可以按照以下步骤进行操作:打开 GitHub 网站,并在搜索栏中输入 "Gmapping",按下回车键进行搜索。
在搜索结果中,找到 Gmapping 的官方仓库,通常是 "ros-gmapping/gmapping"。
打开 Gmapping 仓库页面后,找到 "Releases" 或者 "Tags" 选项,通常在仓库的右侧。
在 "Releases" 或 "Tags" 页面中,可以看到 Gmapping 的版本列表。找到与你使用的 ROS 版本相对应的 Gmapping 版本。
点击所需版本的标签或链接,进入该版本的源代码页面。
在该页面中,你可以浏览 Gmapping 的源代码,包括 package.xml、CMakeLists.txt、src 目录等。
如果你需要下载源代码,可以点击 "Clone or download" 按钮,并选择 "Download ZIP" 选项来下载整个仓库的源代码。
请注意,不同版本的 ROS 可能对应不同的 Gmapping 版本。在查找 Gmapping 源代码时,请确保选择与你使用的 ROS 版本兼容的 Gmapping 版本。
ROS中MPC局部路径规划器使用方法及源码流程解读
本文主要解析ROS Navigation框架中的MPC局部路径规划器mpc_local_planner的使用方法和源码流程。MPC模型预测控制算法是关键环节,它处理复杂环境,优化性能,但计算复杂度较高。以下是mpc_local_planner的详细步骤:
1. 首先,将mpc_local_planner从GitHub或其他源代码库下载至ROS工作空间的src文件夹。
2. 环境配置需安装依赖和环境,可通过rosdep或参考相关博客解决安装问题。链接:[ROS Noetic版本 rosdep找不到命令 不能使用的解决方法]。
3. 通过catkin_make编译mpc_local_planner包,并通过其自带示例测试其功能,如阿克曼模型小车的动态演示。
4. 在move_base的launch文件中,将局部路径规划器设置为mpc_local_planner/MpcLocalPlannerROS,并根据机器人特性调整clearing_rotation_allowed参数,如阿克曼车型机器人禁止原地旋转。
5. 配置参数文件mpc_local_planner_params.yaml,确保路径符合机器人实际情况。
6. 完成配置后,进行实际路径规划测试,并根据测试结果调整参数,以优化路径规划性能。
以上步骤详尽介绍了在ROS中使用MPC局部路径规划器mpc_local_planner的步骤,通过这些操作,你将能更好地将其应用到你的机器人项目中。详情请参考《ROS中MPC局部路径规划器使用方法及源码流程解读》。
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 定位与搜索的小项目开发。
Cartographer源码详解|(2)Cartographer_ros
上一篇文章深入分析了传感器数据的流向,接下来让我们继续探讨传感器格式的转换与类型变换。这部分内容在sensor_bridge.cc文件中。在处理传感器的坐标变换时,我们需要运用三维空间刚体运动的知识,先进行简要回顾,以助于理解代码。
三维空间刚体运动涉及向量内积与外积。向量内积的计算公式如下,表示两个向量的点乘。向量外积则是一个向量,其方向垂直于两个向量,大小为两向量张成四边形的有向面积,计算公式如下。
旋转和平移是欧氏变换的两个关键部分。旋转涉及单位正交基的变换,形成旋转矩阵(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。