我发现ROS的工作空间目录是那样并不是ROS规定的,而是cmake编译的目录结构一般就是那样,对ROS包工程的理解更进了一步,就是普通的C++工程编译生成可执行文件,python的话不需要编译直接运行

我现在发现ROS的工作空间目录是那样并不是ROS规定的,而是cmake编译的目录结构一般就是那样,这不是ROS独有的,而是都是这样的。学过cmake就应该知道。

拍自《ROS机器人开发实践》

ROS中的编译器使用的是CMake

ROS包需要编译成可执行文件才行执行。

别人ROS功能包都是以C++文件存放的,放在Github上,最典型的阿木的普罗米修斯,你要用别人写好的功能包,首先是把那些C++文件拷贝到本地,然后编译成可执行文件,然后运行,这样就好理解了吧!!!!!!!!!你也不用单纯死记ROS是这么操作的。

所以ROS你不管概念怎么样逃脱不了C++的本质啊是不是。

这里就明确说了生成可执行文件,我估计后面启动节点的命令就是运行可执行文件,因为那名字不就是生成的可执行文件的名字么。

https://www.cnblogs.com/cv-pr/p/6206921.html

https://www.bilibili.com/video/BV1zt411G7Vn?p=9

一个ROS包的C++文件里面应该是有一个main函数的,这样才能生成可执行文件,这是我推测的。

一个可执行文件执行起来应该就可以看作一个进程了,所以是不是一个ROS包就可以看作一个进程。

python不是编译型语言,python就不需要编译,如果一个ROS包是python写的,就不需要编译,直接运行就可以了应该。我想起GAAS包好像就是Python写的,感觉他们用python写可能是有道理的,不用编译,拿来就可以运行了,我看阿木的普罗米修斯的ROS好像也是用Python写的。python我也还想再去系统学一遍。其实这么去看普罗米修斯可能也没什么高级的,外在看着高级可能就像你当初看飞控一样,实际了解本质之后可能自己写都没什么问题。我现在教你自己跑个双目SLAM我也觉得没什么。是的。我感觉把SLAM和ROS梳理一遍之后我再去做双目SLAM我思路清晰得多了,而且也觉得只是个普通的事情,没什么的。我现在简历上就敢写会ROS了。

拍自胡春旭的《ROS机器人开发实践》

ROS21讲的第10讲里面明确给你讲到了这个可执行文件,而且这个可执行文件是生成在哪个文件夹。

vision_to_mavros其实也是一个带main函数的C++文件生成的可执行文件,所以以后再叫你写个ROS功能包你不用害怕什么的,你能写C++工程,能写Python工程,就可以写,就这么简单。看清本质之后就没什么了。

阿木的普罗米修斯的ROS包似乎也是python写的。

我现在再去看一个ROS功能包,就直接去它的src文件夹,里面当做一个C++工程去看,先找main函数,思路清晰很多。

你现在再去看realsense-ros应该也是有胆量的。

VINS的github上的ROS功能包我就找到了main函数,也是在src文件夹下面

https://github.com/HKUST-Aerial-Robotics/VINS-Mono/blob/master/vins_estimator/src/estimator_node.cpp

main函数在最下面

我现在应该可以确定,但凡有cmakelist的地方,它同文件夹下的C++文件肯定有main函数。

ORB_SLAM的main函数,只是需要注意它是放在examples这个文件夹下面的,不是放在根文件夹下,根文件夹下的src里面的文件没有main函数,我最后实际看ROS书上用ORB_SLAM也是在examples文件夹里面!!!!!!证明我的思路没有错!!!!!!!生成的可执行文件是跟着main函数走的。

拍自《ROS机器人开发实践》

这样我以后是有底气直接去啃那些SLAM  ROS包的源码的。

我现在发现有更为便捷的方式找main函数,cmakelists.txt  会写编译要生成的可执行文件名称,以及哪些源码文件参与编译!!!!这个在古月的ROS入门21讲里面也有讲到的。

比如

这是ORB_SLAM里面的

https://github.com/raulmur/ORB_SLAM2/blob/master/Examples/ROS/ORB_SLAM2/CMakeLists.txt

既然一个ROS功能包也是一个可执行文件,一个进程,我感觉ROS也是一个进程,那个master节点就是一个进程,它可以管理这些进程,包括管理这些进程间的通信啊什么的,但是这些进程本质还是一个机遇linux操作系统的一个进程。只不过ROS的master进程可能权利稍微大一些,可以执行一些操作系统层级管理进程的功能,包括进程间通信,启动一个进程关掉一个进程,原本这些应该是linux操作系统的进程调度来管理的,只不过ROS MASTER这个进程通过某些设置可以执行一些操作系统层次的操作,导致让人觉得ROS像是一个操作系统,我觉得本质是这么一个概念。特别是你系统学了freertos操作系统之后对操作系统的一些作用概念是清楚的。

猜你喜欢

转载自blog.csdn.net/sinat_16643223/article/details/109205014