ROS源码分析-week2

ros2 代码结构及源码解析 一、ros2 软件架构 二、ros2 命令代码解析 1.ros2 action 源码解析 2.ros2 bag 源码解析 3.ros2 run 源码解析 4.ros2 launch 源码解析 三、ros2 相关模块介绍 fastrtsp 源码解析 阅读详情

 2021SC@SDUSC

1. 本周工作目标

在上周完成了代码的下载、编译之后,这周要正式建立代码的阅读环境了。结合实际情况,本周的工作目标如下:

  • 建立VSCode代码调试环境

  • 通过调试初步阅读ROS Master的源码

2. 建立VSCode阅读环境

对于这种“相对小众又灵活”的调试需求,最适合的工具就是VSCode了。这里选用的调试解决方案是:在Windows宿主中启动VSCode,用SSH连接虚拟机进行调试。

网上有很多类似的配置教程,这里略过了详细的配置了。配置过程中遇到的一个bug是,在宿主机中总是没法通过ssh连接到虚拟机,这时可以考虑在宿主机中“禁用+重启”VMNet8虚拟适配器。

3. 调试和阅读ROS Master的源码

首先了解到一个重要的内容就是每次启动roscore的时候会首先在所有进程启动之前,进行参数检查,校对,之后会通过下面代码将本次运行的参数都记录在options这个全局变量中。

(options, args) = parser.parse_args(argv[1:])

而在在整个程序运行过程中,每执行一步都要记录入logfile,在roslaunch.py有一句话“scripts using roslaunch MUST call configure_logging”,所以在启动其他节点时会首先建立log file文件:

logfile_dir = os.path.dirname(log_filename)

此时如果在标准目录下没有这个文件就会使用一个函数循环创建目录,最后到创建文件

 makedirs_with_parent_perms(logfile_dir)

而创建logfile所用的所有信息都来自参数检查之后的options中

接下来进行了log file文件的大小检查,调用get_disk_usage方法,其中主要计算方式是in bytes (du -b) or (du -A) * 1024,具体可查“du”,保证使用大小小于1Gb,就会输出:

Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

然后启动一个roslaunch父节点要load config, start XMLRPC servers and process monitor,在下面,就将核心配置的概念与正在启动的配置分开。这样就可以开始迁移到一个模型,其中配置是launch()方法的参数,而不是运行程序的中心内容。

然后launch启动了监听,将ProcessMonitor事件连接到侦听器聚合器。在创建远程运行程序时,我们同样会连接远程事件。(这个’‘远程运行程序’‘有待继续了解)运行启动需要根据使用情况,调用方应调用spin_一次,或在launch()后根据需要调用spin。来保证时刻可以使用launch来启动节点

接下来,构建ROS网络,包括参数服务器和core服务,“Setup the state of the ROS network, including the parameter server state and core services”, start up the core: master + core nodes defined in core.xml,所以这里会用到xmlrpc服务器来获得core.xml记录的信息

接下来启动所有其他没启动的核心服务:

for node in config.nodes_core

用这个记录所有的服务来逐个启动

最后就是spin回调函数了,spin()必须从主线程运行,对于roslaunch来说非常重要,因为它可以获取进程监视器需要在主线程中运行的作业。

p.spin()

最后整个roscore的内容就结束了,可以看出来,roscore这个命令首先启动launch,然后启动了master以及其他核心服务器,用spin回调函数来保证时刻保持服务的可使用,然后这里面更多看到的是安全性检查:刚进来就写了整整一个包的命令行参数检查,接下来就是写log,目的也是为了记录程序是否正确运行,后面是磁盘用量检查,整个就保证程序可以稳健的运行。

5. 总结

这周建立了VSCode源码阅读环境,并大致阅读了ROS Master的源码。

ROS2话题模型代码解读 详细解读ROS话题模型的代码,以鱼香ROS的代码为例子 阅读详情

相关推荐

〖ROS2 源码解析〗rclcpp/src/rclcpp/node.cpp

ROS2 源码解析:rclcpp/src/rclcpp/node.cpp

sinat_39783664的博客 1396

Done checking log file disk usage. Usage is <1GB.

把127.0.0.1这个位置的数字串修改成你自己的IP,然后点击右上角的“保存”按键。到这里就OK了,你现在可以重新输入roscore试一下~刚开始还以为是内存不够,结果并不是这个原因~~找到自己的IP(第一个inet后的一串数字)博主的IP是127.0.0.1。会弹出一个文档,往下翻找到。第一步:打开终端输入。第二步:在终端中输入。第三步:在终端中输入。

公众号:风景邮递Yuan的博客 7380

ROS源码分析-week1

2021SC@SDUSC 1. 本周工作目标 本周正式开始阅读ROS(ROS 1 Noetic)的源码。按照综述的计划,本周着手开始阅读ROS Master部分的源码。结合实际情况,本周的工作目标如下: 寻找一些专业书籍,了解更多的详细信息 下载ros源码,了解源码结构 从源码编译ROS Master,为后续调试阅读做准备 关于ROS1和ROS2,有点像Python2和Python3的过渡,二者并不兼容,后者将是前者的替代。ROS1最后一个LTS版本(Noetic)将在2025年结束支持...

seaofbits的博客 1721

ROS源码分析-week8

2021SC@SDUSC 1. 本周工作目标 前面几周阅读了ros core部分的ros master和ros topic方面的源码,注重于一些核心、通用库的实现。本周开始,我们要进入另一部分的阅读,阅读导航库的源码,探究其实现。结合实际情况,本周的工作目标如下: 阅读ros wiki,了解导航库源码结构 结合文档和源码结构,搭建阅读环境 2. ros导航库结构 回到最开始的wiki(RecommendedRepositoryUsage/CommonGitHubOrganizati

seaofbits的博客 1592

计算机组成原理 微程序控制器实验

微程序控制器实验 实验环境 计算机组成原理实验环境 实验目的 掌握微程序控制器的组成原理和工作过程。 理解微指令和微程序的概念,理解微指令与指令的区别与联系。 掌握指令操作码与控制存储器中微程序的对应方法。熟悉根据指令操作码从控制存储器中读出微程序的过程。 实验要求 做好实验预习,读懂实验电路图,熟悉实验元器件的功能特性和使用方法。 按照实验内容与步骤的要求,独立思考,认真仔细地完成实验。 写出实验报告。 实验电路        

Long_UP的博客 7万+

别光看手册!手把手教你用SGM2036 LDO设计一个稳定3.3V转1.8V的MCU供电电路(附PCB布局避坑指南)

本文详细介绍了如何使用SGM2036 LDO设计一个稳定的3.3V转1.8V的MCU供电电路,包括需求分析、芯片选型、外围器件计算、PCB布局避坑指南及实测验证。通过实际案例和计算示例,帮助工程师快速掌握LDO应用技巧,确保系统电源稳定可靠。

weixin_42548893的博客 504

ROS源码分析-week9

2021SC@SDUSC 1. 本周工作目标 这周继续阅读ros导航部分的代码,希望能大致理解导航部分ros包的架构。结合实际情况,本周的工作目标如下: 详细分析架构图 根据架构图,分析各部分对应的具体的代码包 2. 导航架构图分析 首先复习一下上一章在wiki里发现的的架构图: 我们详细分析一下这张图的各个部分: 包名 来源 功能 备注 move_base 官方提供 整合各种信息来源,用dijstra或者A*算法规划机器人运动路径

seaofbits的博客 1235

SpaceMesh Mining 教程

當參與Spacemesh的用戶在完成P盤工作後需要完成兩個部分工作:PoET+PoST,這兩部分均是在不同的規定時間完成,具體可參考後續的時間表。註意!只有PoET和PoST均完成的用戶才可以獲得收益。Spacemesh相關P盤教程:說明:1.Spacemesh每個紀元epoch周期為14天,在8月7日完成PoET的將在8月20日完成PoST,收益將在8月25日後發放(之後用戶收益將每隔14天發放一次) 後續PoET時間為8月7日+N14 **後續PoST時間為8月20日+N。

Yc Chan 的个人博客 1042

ROS源码分析-week13

ROS源码分析-week13 2021SC@SDUSC 1. 本周工作目标 这周继续阅读navigation仓库里的代码。结合实际情况,本周的工作目标如下: 阅读move_base包裹的文档和源码,明白这个包裹的作用 2. 阅读move_base包裹的文档和源码 我们找到官方wiki: 由文档得知,move_base包定义了一个move_base节点,通过它来实现导航的核心功能。 那么,这个包裹具体的结构是怎样的呢?先看目录结构: 可以看见文件目录相对比较简单。 我们直接.

seaofbits的博客 407

AT32串口打印全攻略:从零搭建到printf重定向(GCC版)

本文详细介绍了在GCC编译环境下为AT32系列MCU实现串口打印与printf重定向的完整方案。针对从Keil MDK迁移到GCC工具链时常见的串口无输出问题,文章从环境搭建、USART配置入手,重点剖析了GCC下printf重定向的核心原理——通过重写_write()函数,并提供了经过验证的代码实现、常见问题排查及性能优化建议。

weixin_29163797的博客 263

Cesium中实现阴影率分析

看到群里有人在研究这个,所以看了一下。主要是模仿超图的,实现原理超图有做回答:但其实超图的这个实现方式还是过于复杂,原因是:既然是获取太阳的日照阴影,而Cesium中原本就存在太阳,且能投射阴影,因此其实并不需要再次计算太阳位置并计算视锥获取深度图,直接使用Cesium原生的太阳深度图即可。

weixin_43481439的博客 2215

ROS源码分析-week12

2021SC@SDUSC 1. 本周工作目标 这周继续阅读navigation仓库里的代码。结合实际情况,本周的工作目标如下: 阅读amcl包裹的文档和源码,明白这个包裹的作用 2. 阅读amcl包裹的文档和源码 再次找到官方wiki: 由文档得知,amcl包裹是通过自适应蒙特卡罗粒子定位方法,来在地图中定位机器人位置的一个包。 那么,这个包裹具体的结构是怎样的呢?先看目录结构: andy@virtual-machine:~/navigation/amcl$ tree . . ├

seaofbits的博客 1179

ISP图像处理Verilog仿真框架搭建(附代码)

基于Verilog的图像处理仿真框架搭建

路漫漫其修远兮,吾将上下而求索 1894

ROS源代码分析-week3

2021SC@SDUSC 1. 本周工作目标 这周继续阅读代码,从roscore转向应用程序的层次。结合实际情况,本周的工作目标如下: 阅读ros官方tutorials内容 2. 阅读ros官方tutorials内容 我们看ros官方给出的toturials的内容...

seaofbits的博客 477

告别安装报错!保姆级教程:用阿狸狗破戒大师V3.2.6搞定Cadence 17.4完整安装与补丁

本文提供Cadence 17.4的完整安装与破解教程,特别针对国内用户常见问题优化。从前期准备、镜像处理到阿狸狗破戒大师V3.2.6的智能破解,再到补丁管理与性能调优,详细指导每一步操作,确保一次性安装成功并提升设计效率。

weixin_30632089的博客 830

【R】非参数秩和检验(Kruskal-Wallis H)与事后多重比较邓肯检验(Dunn‘s Test)及自动字母标记

非参数检验-Kruskal-Wallis H检验-多个独立样本秩和检验-事后两两比较-邓肯检验(Duncan's test)

captain_keating的博客 6534

ROS源码分析-week11

2021SC@SDUSC 1. 本周工作目标 这周继续阅读navigation仓库里的代码。结合上周分析,本周的工作目标如下: 阅读costmap_2d包裹的内容 2. 阅读ros官方tutorials内容 首先使用tree命令观察包裹结构: andy@virtual-machine:~/navigation/costmap_2d$ tree . . ├── cfg │ ├── Costmap2D.cfg │ ├── GenericPlugin.cfg │ ├── Infla...

seaofbits的博客 1024

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ROS源码分析-week4

2021SC@SDUSC 1. 本周工作目标 本周阅读ros通信部分的代码。结合实际情况,本周的工作目标如下: 探究ros消息的类型转译实现...

seaofbits的博客 549

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ROS源码分析-week6

2021SC@SDUSC 1. 本周工作目标 上周只阅读了ros节点注册部分的代码,本周准备继续阅读节点收发message的代码。结合实际情况,本周的工作目标如下: 根据talker and listener样例,调试阅读ros core topic的message收发部分代码。 2. ros里topic message的发送 我们先看ros_catkin_ws/install_isolated/share/rospy_tutorials/001_talker_listener/talker

seaofbits的博客 392

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ROS源码分析-week7

2021SC@SDUSC 1. 本周工作目标 上周没能阅读完节点“接受topic message”部分的代码,本周继续阅读。于是,本周的工作目标如下: 根据talker and listener样例,调试阅读ros core topic的message接收部分的代码。 2. ros里topic message的接收 我们先看ros_catkin_ws/install_isolated/share/rospy_tutorials/001_talker_listener/listener.py文

seaofbits的博客 677

ROS源码分析-week5

2021SC@SDUSC 1. 本周工作目标 这周继续ros通信部分的源码,侧重点在于注重"topic是怎么注册的?publisher是怎么注册的?"。结合实际情况,本周的工作目标如下: 根据talker and listener样例,调试阅读ros core topic注册部分代码 2. ros里topic publisher的注册 我们先看ros_catkin_ws/install_isolated/share/rospy_tutorials/001_talker_listener/ta

seaofbits的博客 1371

ROS源码分析-week10

2021SC@SDUSC 1. 本周工作目标 这周使用VSCode,来阅读一下navigation仓库里许多功能包的代码。结合实际情况,本周的工作目标如下: 下载仓库,清点重点的包 阅读nav_core功能包 2. 下载仓库,分析重点的包 首先git clone下载仓库,然后用vscode打开,发现里面有很多包: 然后用一个静态代码分析工具understand初步分析这个文件夹里包裹的依赖情况,生成依赖图如下: 可以看见,最核心的包是costmap_2d和nav_cor

seaofbits的博客 580

Niryo开源协作机器人:低成本、高灵活性的教育与研究创新平台

机器人技术作为自动化与人工智能的核心载体,其原理在于通过传感器感知环境、控制器决策规划、执行器完成动作,实现自主或半自主作业。这项技术的核心价值在于将人类从重复、危险或高精度任务中解放出来,提升生产效率与创新能力。在工业自动化、智能服务、医疗辅助等广泛场景中,机器人技术正成为关键驱动力。然而,传统工业机器人高昂的成本与封闭的系统,构成了教育与研究领域普及应用的巨大壁垒。本文聚焦的Niryo Ned系列六轴协作机器人,正是针对这一痛点,通过**开源软硬件生态**与**模块化设计**,提供了一个低成本、高灵活性

weixin_30335575的博客 514

使用ros遇到的问题及记录《一》

运行roscore出现如下错误 WARNING: unable to configure logging. No log files will be generated Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file dis...

shixiaolu63的博客 3369

ROS 清理log文件

ROS运行roscore命令后发现提示log文件(日志文件)大小超过1G,需要清理 Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt WARNING: disk usage in log directory [/home/miracle/.ros/log] is over ...

漫长IT路 2万+
上一篇: ROS源码分析-week1
下一篇: ROS源代码分析-week3
seaofbits
博客等级 码龄5年 29粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值