1.1.3 编写一个简单的编编译ROS2 Qt Demo(笔记)
2.ROS2测试源码编译安装cartographer
3.Cartographer ROS编译安装及相关可执行文件理解
4.简述ros系统从创建工作目录到运行节点程序运行的步骤
5.å¦ä½ç¼årosçpythonç¨åº
6.ROS中MPC局部路径规划器使用方法及源码流程解读
1.3 编写一个简单的ROS2 Qt Demo(笔记)
本文详细记录了创建一个简单的ROS2 Qt Demo的全过程。在开始之前,辑源我们参考了"古月居"课程,源码根据学习内容进行笔记整理。编编译
首先,辑源在ROS2功能包的源码智能温控风扇源码项目中,新建了名为rclcomm的编编译通信类。具体操作为进入项目目录,辑源选择新建C++类,源码命名为rclcomm。编编译
将rclcomm.h文件放置在项目的辑源include目录下,rclcomm.cpp文件放在src目录中。源码完成创建后,编编译检查是辑源否需要自动加载,选择不自动加载,源码因为cmake配置中已包含相关文件。
编写rclcomm.h文件定义通信类的接口,rclcomm.cpp实现类的具体功能。此外,通过CMakeLists.txt文件管理项目的构建。
实现过程中,我们使用了QThread通信类,通过ROS的方式导入节点。针对发布和订阅话题,我们分别实现相应的功能。
遇到的金叉共振源码指标主要问题在于发布话题和消息订阅接受编译时出现错误。解决方法是导入std_msgs包,并确保在CMakeLists.txt中正确声明updateTopicinfo函数。
总结整个项目,我们通过按钮成功发布话题,但如何在按钮操作后停止话题发布仍需进一步研究。源码包括CMakeLists.txt、mainwindow.cpp、rclcomm.h、main.cpp和mainwindow.cpp、rclcomm.cpp等文件。
通过此项目,我们不仅掌握了ROS2和Qt的集成方法,还深入了解了ROS2消息通信机制,为后续更复杂的项目打下了坚实的基础。
ROS2测试源码编译安装cartographer
Cartographer是一个跨平台、传感器配置提供实时同步定位和绘图(SLAM)的系统,具有回环检测优势,资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。
若国内访问github受限,可选择Gitee上的备份仓库进行下载。尝试多个版本,半小时k线源码确认在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 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系统从创建工作目录到运行节点程序运行的步骤
简述ROS系统从创建工作目录到运行节点程序的步骤: 一、创建ROS工作目录 1. 选择合适的位置,创建一个新的文件夹作为ROS工作空间。 2. 在该工作目录中,进一步创建src文件夹,用于存放ROS相关的源代码。 二、配置工作环境 1. 初始化工作空间,通过catkin工具进行构建。 2. 配置ROS环境变量,确保系统能够识别ROS安装路径及相关依赖。 三、编写节点程序 1. 在src文件夹中,根据功能需求编写ROS节点程序。 2. 节点程序可以是C++、Python或其他支持的语言。 四、编译节点程序 1. 在工作目录的根目录下,创建Catkin构建文件(如CMakeLists.txt和package.xml)。 2. 使用catkin_make命令进行编译,生成可执行文件。 五、运行节点程序 1. 通过source命令加载ROS环境。 2. 使用rosrun命令或roslaunch文件启动节点程序。 3. 在ROS系统中,节点之间通过发布/订阅、服务等方式进行通信。 详细解释: 创建ROS工作目录:这是ROS项目的基础,选择一个合适的位置创建一个新文件夹,并在其中创建src文件夹用于存放源代码。 配置工作环境:通过catkin工具对工作空间进行初始化,配置ROS环境变量,确保系统能够识别ROS的安装路径及相关依赖。这是确保后续编译和运行节点程序的基础。 编写节点程序:根据项目的功能需求,在src文件夹中编写ROS节点程序。这些程序可以是C++、Python或其他支持的语言。节点是ROS系统中的基本运行单元,负责实现特定的功能。 编译节点程序:在工作目录的根目录下创建Catkin构建文件,如CMakeLists.txt和package.xml。使用catkin_make命令进行编译,生成可执行文件。这一步是将源代码转化为可执行的二进制文件。 运行节点程序:首先通过source命令加载ROS环境,然后使用rosrun命令或roslaunch文件启动节点程序。在ROS系统中,各个节点之间通过发布/订阅、服务等方式进行通信,共同完成复杂的任务。å¦ä½ç¼årosçpythonç¨åº
ROS Indigo beginner_Tutorials- ç¼å ROS è¯é¢çç Hello World ç¨åºï¼Pythonçï¼æ使ç¨çèææºè½¯ä»¶ï¼VMware Workstation
使ç¨çUbuntuç³»ç»ï¼Ubuntu ..4 LTS
ROS çæ¬ï¼ROS Indigo
1. åè¨ ï¼
Hello world ç¨åºï¼å¨æ们ç¼ç¨çï¼ä»£è¡¨å¦ä¹ æç§è¯è¨ç¼åç第ä¸ä¸ªç¨åºãå¯¹äº ROS æºå¨äººæä½ç³»ç»æ¥è¯´ï¼è¿ä¸ª Hello World ç¨åºå°±æ¯ ï¼ åä¸ä¸ªç®åçæ¶æ¯åå¸å¨(åé) å 订é å¨(æ¥æ¶)ã
2. åå¤å·¥ä½ ï¼
C++ çç¨åºé½ä¼åæ¾å¨æ¯ä¸ªç¨åºå ç src æ件夹éã Python ä¸åï¼Python ç¨åºé½åæ¾å¨ scripts æ件夹ä¸ï¼ åæ£ææé½æ¯ æºæ件 å ã
Step 1 . æ以ï¼å å¨ beginner_tutorials 软件å ä¸å建ä¸ä¸ª scripts æ件夹ï¼
$ roscd beginner_tutorials$ mkdir scripts$ cd scripts
3. ç¼åæ¶æ¯åå¸å¨èç¹ç¨åºï¼
å¦æä½ æå¾å»åçè¯ï¼ä½ å¯ä»¥ä½¿ç¨ wget å½ä»¤ï¼ å¨ github ä¸è·åä¸ä¸ª talker.py æºä»£ç ãå¦ä½è·åå¢ ?
Step 2 . å¼ä¸ä¸ªç»ç«¯ï¼è¾å ¥ä¸é¢çå½ä»¤å°±å¯ä»¥è·å talker.py ï¼
$ wget
-devel/rospy_tutorials/_talker_listener/talker.py$ ls
talker.py
ä½æ¯æå»ºè®®ä½ äº²èªå¨æï¼åä¸åï¼æå¨å建ä¸ä¸ª talker.py æä»¶å¨ /scripys æ件夹éï¼
$ roscd beginner_tutorials/scripts$ gedit talker.py
å°è¿ä¸é¢é¾æ¥éç代ç æå¨è¾å ¥å° talker.py æ件ä¸ãï¼æå°±ä¸å°ä»£ç è´´ä¸æ¥äºï¼
ä¸é¢ææ¥è®²è§£ä¸ä¸ä»£ç ï¼
Step 3 . æåä¸æ¥ï¼ç»è¿ä¸ª talker.py æ件å ä¸å¯æ§è¡æéï¼
$ chmod +x talker.py1
è¿æ ·ï¼ä¸ä¸ªåå¸å¨å°±ç¼åå®äºãæ们ä¸è¦æ¥çå»è¿è¡å®ï¼ç°å¨æ们ç¼åä¸ä¸ªè®¢é å¨ï¼æ¥æ¥æ¶è¿ä¸ªåå¸å¨åå¸çè¯é¢ï¼
4. ç¼åæ¶æ¯è®¢é å¨èç¹ç¨åºï¼
Step 4 . ååå¸å¨ä¸æ ·ï¼æ们使ç¨wgetå½ä»¤è·å订é å¨çæºä»£ç listener.pyï¼
$ roscd beginner_tutorials/scripts/$ wget
ials/indigo-devel/rospy_tutorials/_talker_listener/listener.py$ ls
listener.py talker.py
ä½æ¯ï¼æè¿æ¯å»ºè®®ä½ èªå·±å¨æåä¸ä¸ã
好å§ï¼ä¸é¢æ们å¼å§è®²è§£ listener.py éé¢ç代ç ï¼è¿ä¸ªlistener.pyç¨åºç代ç ç®åï¼
Step 5 . æåä¸è¦å¿äºç»è¿ä¸ªlistener.py å å¯æ§è¡æéï¼
$ chmod +x listener.py1
5. è¿è¡ ï¼
对äºpython æ¥è¯´ï¼æ们ä¸éè¦ä½¿ç¨ catkin_make å½ä»¤å¯¹ ~/catkin_ws å·¥ä½ç©ºé´è¿è¡ç¼è¯ãå 为pythonæ件æ¬èº«å°±æ¯å¯æ§è¡æ件ï¼åææ¯æ们ç»å®æ·»å å¯æ§è¡æéï¼ã
OKï¼åå¸å¨ å 订é å¨ é½å建å®äºãä¸é¢æ们è¿è¡å®ä»¬ï¼ççææï¼
Step 6 . æ°æå¼ä¸ä¸ªç»ç«¯ï¼å æ§è¡ roscore å½ä»¤ï¼
$ roscore1
Step 7 . æ°æå¼ä¸ä¸ªç»ç«¯ï¼å¯å¨ åå¸å¨ ï¼
$ rosrun beginner_tutorials talker.py 1
Step 8 . æ°æå¼ä¸ä¸ªç»ç«¯ï¼å¯å¨ 订é å¨ ï¼
$ rosrun beginner_tutorials listener.py 1
è¿è¡ææï¼
Step 9 . æ们æ¥ä½¿ç¨ rostopic list ï¼ççå½åçè¯é¢æåªäºï¼
$ rostopic list
/chatter
/rosout
/rosout_agg
å ¶ä¸ /chatter å°±æ¯æ们å¨åå¸å¨éé¢åå¸ç ROSè¯é¢ã
6. æ©å±ï¼ç¼åä¸ä¸ªå¯å¨èæ¬æ件 ï¼
è¿è®°å¾ä¸ä¸èï¼æ们讲çROSçå¯å¨èæ¬æ件å§ï¼ä¸é¢æ们æ¥ç¼åä¸ä¸ªlaunchæ件ï¼æ¥å° talker.py ålistener.py æ件çå¯å¨å·¥ä½äº¤ä¸ªè¿ä¸ªlaunchæ件æ¥åï¼
Step . æ¥å° beginner_tutorialsç¨åºå ç /launch è·¯å¾ä¸ï¼æ°å»ºä¸ä¸ª hello_world_topic.launch æ件ï¼
$ roscd beginner_tutorials/launch$ gedit hello_world_topic.launch #使ç¨ä½ èªå·±å欢çææ¬ç¼è¾å¨
Step . è¾å ¥ä¸é¢ç代ç ï¼
<launch>
<node pkg="beginner_tutorials" name="talker" type="talker.py" />
<node pkg="beginner_tutorials" name="listener" type="listener.py" /></launch>
Step . ç°å¨ï¼å°ä¹åæå¼çç»ç«¯é½å ³éï¼æ们å¯å¨è¿ä¸ªèæ¬ï¼ ï¼å¼ä¸ä¸ªç»ç«¯ ï¼ Ctrl+Alt+Tï¼
$ roslaunch beginner_tutorials hello_world_topic.launch1
è¿è¡ç»æï¼
ä¸é¢æªå¾çè¾åºæ¾ç¤ºï¼ talker.py å listener.py èæ¬è¿è¡æåãä½æ¯å¹¶æ²¡æåºç°å·å±çç°è±¡ãè¿æ¯ä¸ºä»ä¹ï¼ 为äºè¯æè¿ä¸ªèæ¬ç¨åºççæåçè¿è¡äºï¼æ们æ¥è¯ä¸è¯ï¼
Step . éæ°å¼ä¸ä¸ªç»ç«¯ï¼è¾å ¥ä¸é¢çå½ä»¤ï¼
$ rosrun list$ rostopic list$ rostopic echo /chatter
Step . ç°å¨ Ctrl+C ç»æçå¬ /chatter è¯é¢ãä½¿ç¨ rqt_graph 对å½åå¯å¨çèç¹å¯è§åï¼
$ rqt_graph1
è¿äºè¶³ä»¥è¯´æï¼hello_world_topic.launch å¯å¨èæ¬æ件ï¼å¯å¨æåã
æ»ç»ï¼ åå¸å¨ å 订é å¨ æ¯å¾ç®åç, å°±æ¯ç®åçåå¸ä¸ä¸ª èªå®ä¹çè¯é¢ã
æä¹å使ç¨è¯´è¿ï¼èç¹ä¹é´é讯çæ¹å¼æä¸¤ç§ ï¼ è¯é¢(rostopic) å æå¡(rosservice)
æ以ï¼æ¥ä¸æ¥ï¼æ们ä¼è®²ï¼ä½¿ç¨ROSæå¡æ¥å®æROSç Hello World ç¨åºçä¾åãä½æ¯å¨è¿ä¹åï¼æ们éè¦å¦ä¸å¦ï¼å¦ä½å建èªå®ä¹çROSæ¶æ¯åROSæå¡ï¼ä»¥ä¾¿ ROS æå¡çç Hello World ç¨åºçç¼åã
æ以ä¸ä¸è®²ï¼æ们æ¥å¦ä¹ ï¼å¦ä½å建èªå®ä¹çROSæ¶æ¯åROSæå¡ã
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 定位与搜索的小项目开发。