1.Cartographer ROS编译安装及相关可执行文件理解
2.ROS2测试源码编译安装cartographer
3.怎么在github上找到对应ros版本的Gmapping源代码?
4.rosbag相关源码解析
5.rosaçisourceçä½ç¨
6.ROS 2中级教程——8 使用colcon构建软件包
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等文件夹,分别用于源代码、ssh注解源码孤立编译、开发和安装。
三、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)的系统,具有回环检测优势,jquery回复源码资源占用适中。
选择源码编译安装方式,以适应后期项目修改和移植需求。首先,使用Ubuntu虚拟机测试验证。
若国内访问github受限,可选择Gitee上的备份仓库进行下载。尝试多个版本,确认在Ubuntu humble版本下能够成功下载和安装。
在安装过程中,需要下载依赖项。在Ubuntu上,首先安装libabsl-dev、libceres-dev以及liblua5.3-dev等包。对于ceres-solver,需确保CUDA、显卡加速和TBB指令集优化选项已配置。
在开发板上,通过源码编译安装三方依赖。确保所有依赖包均正确安装,包括protobuf版本为v3.4.1分支。
完成所有依赖安装后,开始编译Cartographer源码。首先下载官方数据集,2.4.3源码编译注意ROS2格式的rosbag转换,使用rosbags工具进行转换。
介绍ROSbag格式,ROS1的.rosbag文件为二进制存储格式,而ROS2使用SQLite数据库格式,支持跨平台和扩展性。两种格式转换方法,推荐使用rosbags工具,无需依赖ROS环境。
测试Cartographer时,使用ros2命令启动示例launch文件,输入特定的bag文件名以加载数据集。测试3D数据集时,使用相应的launch文件和bag文件名。
资源占用情况分析将后续进行。
怎么在github上找到对应ros版本的Gmapping源代码?
在 GitHub 上找到对应 ROS 版本的 Gmapping 源代码,可以按照以下步骤进行操作:打开 GitHub 网站,并在搜索栏中输入 "Gmapping",按下回车键进行搜索。
在搜索结果中,找到 Gmapping 的官方仓库,通常是 "ros-gmapping/gmapping"。
打开 Gmapping 仓库页面后,找到 "Releases" 或者 "Tags" 选项,nutch源码分析通常在仓库的右侧。
在 "Releases" 或 "Tags" 页面中,可以看到 Gmapping 的版本列表。找到与你使用的 ROS 版本相对应的 Gmapping 版本。
点击所需版本的标签或链接,进入该版本的源代码页面。
在该页面中,你可以浏览 Gmapping 的源代码,包括 package.xml、CMakeLists.txt、src 目录等。
如果你需要下载源代码,可以点击 "Clone or download" 按钮,并选择 "Download ZIP" 选项来下载整个仓库的源代码。
请注意,不同版本的 ROS 可能对应不同的 Gmapping 版本。在查找 Gmapping 源代码时,请确保选择与你使用的 ROS 版本兼容的 Gmapping 版本。
rosbag相关源码解析
rosbag核心功能解析
rosbag主要由rosbag包和rosbag_storage包构成,其常用功能包括play、record和view。下面逐一探讨它们的实现流程。Record功能
记录过程如下:指定要订阅的topic,通过subscribe函数进行订阅。
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_内的实体持续更新并排序。
rosaçisourceçä½ç¨
æºä»£ç 管çãä¾èµå ³ç³»ç®¡çåå åå¸åå ±äº«ã
1ãæºä»£ç 管çï¼iSourceæä¾äºä¸ç§æºå¶ï¼ä½¿å¾å¼å人åè½å¤å°æºä»£ç ç»ç»æå ï¼å¹¶å¯¹å ¶è¿è¡çæ¬æ§å¶ãè¿æå©äºç»´æ¤ä»£ç çä¸è´æ§åå¯è¿½æº¯æ§ï¼åæ¶ä½¿å¾å¼å人åè½å¤æ´æ¹ä¾¿å°ç®¡çåå ±äº«ä»£ç ã
2ãä¾èµå ³ç³»ç®¡çï¼iSourceéè¿ROSæ建系ç»æ¥ç®¡çå çä¾èµå ³ç³»ãå¼å人åå¯ä»¥éè¿iSourceæ¥å£°æä»ä»¬æä¾èµçå ï¼å¹¶ä¸ROSæ建系ç»ä¼èªå¨å°å¤çå çæ建åé¾æ¥é®é¢ãè¿æå©äºåå°å¼å人åçå·¥ä½éï¼å¹¶æé«ä»£ç çå¯é æ§ã
3ãå åå¸åå ±äº«ï¼iSourceæä¾äºåå¸åå ±äº«å çåè½ãå¼å人åå¯ä»¥éè¿iSourceå°ä»ä»¬çå åå¸å°ROS软件åºä¸ï¼ä½¿å¾å ¶ä»å¼å人åå¯ä»¥è½»æ¾å°è·åå使ç¨è¿äºå ãè¿æå©äºä¿è¿ä»£ç çå ±äº«åéç¨ï¼å¹¶å éæºå¨äººææ¯çåå±ã
ROS 2中级教程——8 使用colcon构建软件包
本教程旨在向读者展示如何使用colcon工具来创建并构建ROS 2工作空间。尽管本教程是实践性的,并不替代核心文档,但建议在学习过程中参考相关文档以获取更全面的知识。
首先,了解colcon工具,它代表了ROS构建工具catkin_make,catkin_make_isolated,catkin_tools和ament_tools的改进版本。更多关于colcon设计的信息可查阅指定文档。
要开始使用colcon,请访问GitHub上的colcon组织,下载并安装源代码。具体而言,Linux用户可以通过命令行使用sudo apt install python3-colcon-common-extensions,macOS用户则使用python3 -m pip install colcon-common-extensions,而Windows用户应执行pip install -U colcon-common-extensions。
在安装完colcon和ROS 2后,需要创建一个用于存放软件包的ROS工作空间。Linux和macOS用户可使用mkdir -p ~/ros2_example_ws/src cd ~/ros2_example_ws,而Windows用户则执行md \dev\ros2_example_ws\src cd \dev\ros2_example_ws命令。此时工作空间内仅包含一个名为src的空目录。
接下来,将ROS 2示例源代码存储库克隆到src目录中,通过git clone github.com/ros2/example... src/examples操作完成。确保检出与已安装ROS版本兼容的分支。然后,在工作空间根目录中运行colcon build命令以构建软件包。在Windows操作系统上构建时,请参考“构建ROS 2代码”以获取详细信息。
构建完成后,可以在install目录中找到已安装的软件包。为了使用这些安装好的可执行文件或库,需要将它们添加到路径和库路径中。colcon会在install目录中生成bash / bat文件,通过source这些文件即可完成环境设置。
之后,可以通过ros2 run命令运行colcon构建的可执行文件。以ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function为例,运行订阅者节点。同时,可以在另一个终端中运行发布者节点(别忘了source安装脚本),以确保消息正确传输。
对于创建自己的软件包,colcon使用REP 中定义的package.xml规范(也支持format 2)。它支持多种构建类型,包括ament_cmake、ament_python和纯cmake软件包。ament_python构建中,setup.py文件作为构建的主要入口点。例如,demo_nodes_cpp软件包使用ament_cmake构建类型,并利用CMake作为构建工具。
为了简化创建软件包的过程,ros2 pkg create工具可以用于基于模板创建新的软件包,这相当于catkin用户中的catkin_create_package。
在使用colcon时,读者可以参考一些提示来提高工作效率。例如,如果不想构建特定的软件包,可以将其目录中放置一个名为COLCON_IGNORE的空文件。另外,若要避免在CMake软件包中配置和构建测试,可以传递参数--cmake-args -DBUILD_TESTING=0。此外,可以通过colcon test命令运行单个特定测试,只需指定软件包和测试名称即可。
å¦ä½ç¼å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局部路径规划器使用方法及源码流程解读》。