1.【ROS博客】基于ROS的源码s源自动驾驶数据集可视化项目(附源代码)
2.怎么在github上找到对应ros版本的Gmapping源代码?
3.ROS中MPC局部路径规划器使用方法及源码流程解读
4.ROS2测试源码编译安装cartographer
5.å¦ä½ç¼årosçpythonç¨åº
6.ROS自学笔记九:创建并构建ROS功能包
【ROS博客】基于ROS的自动驾驶数据集可视化项目(附源代码)
项目简介
基于加州大学伯克利分校 MSC Lab的自动驾驶数据集,本项目旨在进行数据集的码下可视化。项目源代码已上传至 GitHub,源码s源英文版文章与演示视频也已准备就绪。码下
数据集展示
左侧展示了GPS信号的源码s源可视化,通过 Mapviz 工具,码下vc 源码 用将行驶过程中走过的源码s源路径显示出来,左上角则呈现了车前摄像头的码下视角。右侧是源码s源自定义的可视化,利用绿色代表 y 轴正方向,码下蓝色表示 x 轴正方向。源码s源紫色圆点表示汽车行驶过程中各个方向的码下加速度信息,天蓝色箭头指示汽车前进方向,源码s源绿色则代表不同强度的码下加速度。
问题与解决方案
在使用 Mapviz 可视化 GPS 信号时,源码s源遇到了数据格式不匹配的问题。通过在自定义的 package 中编写 `trans_GPS.cpp` 文件,成功实现了数据格式转换,解决了数据可视化的问题。同时,还撰写了关于 Mapviz 的基础使用教程。
加速度信息的可视化涉及确定坐标轴方向、避免信息跳动以及直观显示加速度大小。通过在 RVIZ 中绘制 x 和 y 轴,并使用平滑器处理频繁读取的 IMU 数据,成功解决了这些问题。bl解析源码极坐标系的引入使得加速度大小的显示更为直观。
汽车前进方向的可视化涉及到姿态信息的获取与 RVIZ 显示角度的调整。通过分析 IMU 的 orientation 数据,并设置 marker 的 orientation 值,实现了方向的正确显示。
相机信息的可视化面临格式转换问题。通过使用 `image_transport` 包装解决了传感器数据格式不兼容的问题。
总结
在本项目中,通过学习与实践 ROS 相关知识,成功实现了自动驾驶数据集的可视化。接下来,将集中精力深入学习 OSM 的使用,并着手进行 GPS 定位与搜索的小项目开发。
怎么在github上找到对应ros版本的Gmapping源代码?
在 GitHub 上找到对应 ROS 版本的 Gmapping 源代码,可以按照以下步骤进行操作:打开 GitHub 网站,并在搜索栏中输入 "Gmapping",按下回车键进行搜索。
在搜索结果中,找到 Gmapping 的官方仓库,通常是 "ros-gmapping/gmapping"。
打开 Gmapping 仓库页面后,找到 "Releases" 或者 "Tags" 选项,通常在仓库的右侧。
在 "Releases" 或 "Tags" 页面中,可以看到 Gmapping 的django源码代码版本列表。找到与你使用的 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局部路径规划器使用方法及源码流程解读》。
ROS2测试源码编译安装cartographer
Cartographer是一个跨平台、传感器配置提供实时同步定位和绘图(SLAM)的系统,具有回环检测优势,资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。tomcat源码框架
若国内访问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çpythonç¨åº
1 å 建ç«å·¥ä½ç©ºé´~/catkin_ws
catkin_create_pkg basic std_msgs rospy
2 å¨å·¥ä½ç©ºé´~/catkin_wsä¸å建å pkgç®å½basic
好å¤æ¯éè¿å建å èªå¨çæpackage.xmlåCMakeLists.txt
3 å¨å·¥ç¨ç®å½ä¸å»ºä¸ä¸ªsrcåç®å½å.pyæ件
æºä»£ç æ件ï¼topic_publisher.py
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#!/usr/bin/env python
import roslib; roslib.load_manifest('basic')
import rospy
from std_msgs.msg import Int
rospy.init_node('topic_publisher')
pub = rospy.Publisher('counter', Int)
rate = rospy.Rate(2)
count = 0
while not rospy.is_shutdown():
pub.publish(count)
count += 1
rate.sleep()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
æä½æ¥éª¤å¦ä¸
liao@liao-eagle:~/catkin_ws$ ls
build devel install src
liao@liao-eagle:~/catkin_ws$ cd src
liao@liao-eagle:~/catkin_ws/src$ ls
basic beginner_tutorials CMakeLists.txt first second
liao@liao-eagle:~/catkin_ws/src$ cd basic/
liao@liao-eagle:~/catkin_ws/src/basic$ ls
CMakeLists.txt package.xml src
liao@liao-eagle:~/catkin_ws/src/basic$ cd src
liao@liao-eagle:~/catkin_ws/src/basic/src$ vi topic_publisher.py
liao@liao-eagle:~/catkin_ws/src/basic/src$ chmod +x topic_publisher.py
4 åå°~/catkin_wsç®å½ä¸ï¼ç¼è¯ç¨åº
$ cd ï½/catkin_ws
liao@liao-eagle:~/catkin_ws$ catkin_make
5 å°å½åå·¥ç¨å å ¥å°shellç¯å¢éå»
liao@liao-eagle:~/catkin_ws$ echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
liao@liao-eagle:~/catkin_ws$ source ~/.bashrc
6 è¿è¡ç¨åºï¼éå¼ä¸¤ä¸ªç»ç«¯ï¼
liao@liao-eagle:~/catkin_ws$ roscore
liao@liao-eagle:~/catkin_ws$ rosrun basic topic_publisher.py
7 éè¿rostopicæ¥çç¸å ³ä¿¡æ¯
liao@liao-eagle:~/catkin_ws$ rostopic list
/counter
/rosout
/rosout_agg
liao@liao-eagle:~/catkin_ws$ rostopic info /counter
Type: std_msgs/Int
Publishers:
* /topic_publisher (m\tools\rosbag_storage目录下,整体结构清晰,便于理解。此目录包含了实现不同功能的文件,大致可归类为三部分,接下来我们将从这三部分逐一进行详细介绍。
首先,我们聚焦于ROS包的结构与格式。一个ROS包以字符串#ROSBAG V2.0开头,随后是多个record。每个record由四部分组成:header_len、header、data_len、data。其中,header是最复杂的部分,它由多个field构成,包括一个必选的op属性field以及可选的field,它们共同定义了record的类型。在六种不同的op field属性中,每种对应一个特定的record类型,每种record除op field外还包含特定的field。
接下来,我们将深入探讨这六种类型。第一种是包头记录,作为第一个record出现,它包含一系列保证在包头记录中出现的字段。包头记录采用特殊的填充方式,以便在写入后续数据后方便修改。接下来是块记录,包含支持的压缩类型“none”和“bz2”,以及块的压缩大小信息。块记录中还可能出现连接记录,它包含与包记录头格式相同的连接头信息,如topic、type、md5sum等字段。消息数据头用于存储ROS序列化消息数据,索引数据头用于存储包的索引信息,而块信息头则包含与块相关的关键信息。
在讨论完记录类型后,我们将目光转向rosbag_storage中用于定义常量的关键文件:constants.h。此文件声明了一系列常量,包括OP字段类型、文件头长度和压缩类型等,为包处理提供了基础支持。
总结而言,rosbag_storage模块不仅提供了ROS包读取和保存的接口,也支持了与发布订阅模式、ROS导航模块等其他关键组件的集成,为ROS系统的高效运行提供了不可或缺的支持。
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。