ROS文件系统架构

1.二进制包与源码包区别
sudo apt-get install二进制包=.deb(封装包,内容无法查看)
第三方包需要(get clone方式)下载到工作空间的src下+在工作空间进行编译(可修改代码)
小技巧:
编译或者运行时,提示缺少依赖包,这时试着安装提示依赖包。/再不行google下
2.文件系统级
ROS里边的所有都是由文件(包)构成,重点分成catkin+package(package.xml+CMakefile.txt)+metapackage
2.1Catkin编译系统
make扩充了gcc/g++,而cmake扩充了make,catkin扩充了cmake/编译源码后无需安装即可使用/自动生成find_package()代码...
编译过程:编译之前读取package.xml和CMakefile.txt信息;编译时,先递归方式找到工作空间下的所有包/某个包,然后根据找到的包里面的CMakefile.txt文件生成
makefile.txt中间缓存信息放置build文件,最后make根据中间文件编译生成可执行文件等放置devel文件下
2.2notice
编译后,cd ..回到工作空间, source ~/catkin_ws/devel/setup.bash #将新生成的可执行文件信息告知ROS系统,否则可能找不到文件
2.3package
具有统一的格式,被用来编译的包,一个package下常见的文件、路径有:      
  ├── CMakeLists.txt    #package的编译规则(必须)
  ├── package.xml       #package的描述信息(必须)
  ├── src/              #源代码文件
  ├── include/          #C++头文件
  ├── scripts/          #可执行脚本
  ├── msg/              #自定义消息
  ├── srv/              #自定义服务
  ├── models/           #3D模型文件
  ├── urdf/             #urdf文件
  ├── launch/           #launch文件
2.3.1package.xml
遵循xml标签文本的写法,包括了package的name, description, version, maintainer(s), license,opt. authors, url's, dependencies, plugins, 
etc...的描述信息
<pacakge>               根标记文件  
<name>                  包名  
<version>               版本号  
<description>           内容描述  
<maintainer>            维护者 
<license>               软件许可证  
<buildtool_depend>      编译构建工具,通常为catkin    
<depend>                指定依赖项为编译、导出、运行需要的依赖,最常用
<build_depend>          编译依赖项  
<build_export_depend>   导出依赖项
<exec_depend>           运行依赖项
<test_depend>           测试用例依赖项  
<doc_depend>            文档依赖项
说明:其中1-6为必备标签,1是根标签,嵌套了其余的所有标签,2-6为包的各种属性,7-9为编译相关信息。
2.3.2CMakefile.txt
一套源码到目标文件生成的编译过程规则:调用Catkin的函数/宏;解析package.xml;找到其他依赖的catkin软件包;生成可执行文件,具体规则如下:
cmake_minimum_required() #CMake的版本号 
project()                #项目名称 
find_package()           #找到编译需要的其他CMake/Catkin package
catkin_python_setup()    #catkin新加宏,打开catkin的Python Module的支持
add_message_files()      #catkin新加宏,添加自定义Message/Service/Action文件
add_service_files()
add_action_files()
generate_message()       #catkin新加宏,生成不同语言版本的msg/srv/action接口
catkin_package()         #catkin新加宏,生成当前package的cmake配置,供依赖本包的其他软件包调用
add_library()            #生成库
add_executable()         #生成可执行二进制文件
add_dependencies()       #定义目标文件依赖于其他目标文件,确保其他目标已被构建
target_link_libraries()  #链接
catkin_add_gtest()       #catkin新加宏,生成测试
install()                #安装至本机
2.3.3rosdep
一个较常使用的命令是rosdep install --from-paths src --ignore-src --rosdistro (indigo) -y,用于安装工作空间中src路径下所有package的依赖
                项(由pacakge.xml文件指定)
3.对于为什么会有依赖项的思考
为了节省电脑空间,共享资源-相互调用即可,不需要将每个实现功能都各自拥有包
4.metapacakge中的两个必须文件和普通pacakge不同点
CMakeLists.txt:加入了catkin_metapackage()宏,指定本软件包为一个metapacakge。
package.xml:标签将所有软件包列为依赖项,标签中添加标签声明。
metapacakge在我们实际开发一个大工程时可能有用

猜你喜欢

转载自blog.csdn.net/chanleoo/article/details/80576218
今日推荐