ROS源码阅读(3)——roscore

2021SC@SDUSC

ROS源码阅读(3)


总结roscore

首先我们在/ros_catkin_ws/install_isolated/bin/roscore这里找到了命令roscore所启动的文件,然后我们就进入这个文件,在最后一行的函数roslaunch.main跳转到下一个位于/ros_catkin_ws/install_isolated/lib/python3/dist-packages/roslaunch/init.py的文件,最后整个roscore的流程都在这个函数完成并结束,其中有几个比较重要的函数以及roscore所做的事情。按从上到下,由内到外的顺序来说

1.option参数

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

这行代码得到的options记录了启动roscore的几乎全部参数,在后续就是链接整个roscore的重要参数数组

2.validate_args

args = rlutil.resolve_launch_arguments(args)
_validate_args(parser, options, args)

这两行代码做的是对参数进行检查,验证arg,这个在上一篇中讲过

3.write_pid_file

write_pid_file(options.pid_fn, options.core, options.port)

这个函数会将该roscore的进程号写入.ros/roscore-11311.pid在启动roscore时,可以新启终端打开这个文件看到pid

4.get_or_generate_uuid
下面是三种可能的run_id来源:

#  - if we're a child process, we get it from options_runid
#  - if there's already a roscore running, read from the param server
#  - generate one if we're running the roscore

5.configure_logging

configure_logging(uuid)

这个函数是用来根据runid来生成logfile的,每次运行程序都要先有logfile,logfile是用来记录程序运行时状态的

6.check_log_disk_usage

rlutil.check_log_disk_usage

这个是检查logfile文件大小的,不超过1GB就肯定会通过检查,进入下一步的

7.ROSLaunchParent

p = roslaunch_parent.ROSLaunchParent

这个代码是给ROSLaunchParent初始化,因为需要一个parent负责加载启动文件、分配机器,然后启动远程进程

8.start

p.start()

这个就是启动roscore里所有服务器的地方,这里面包括先启动 XMLRPC 服务器 和 process monitor,在这里有一个很重要的概念就是remote event和remote runner,看起来是由parentlaunch里的ROSLaunchListeners来监听管理的,但我实在是不太懂这个remote的含义,或许在之后使用的时候会明白,那就到时候再回来补充吧。然后启动launch,然后根据注释可以看到,每次调用launch()之后会调用spin_once或者spin。然后启动 core:包括“master + core nodes defined in core.xml”

最后,roscore的整个过程就结束了,从头看下来能对roscore了解个大概,但是对各个节点与rosmaster的通信机制,以及在实际工作中rosmaster会承担什么作用的部分仍需要实际去看tutriols才能看到,所以后续就是去看位于/home/username/ros_catkin_ws/src/ros_tutorials/rospy_tutorials的实际工作的教程代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值