【ROS学习】(二)ROS文件系统

学习ROS的文件系统,要了解几个重要的概念,主要包括
1.工作空间(workspace)
2.程序包(package)
3.节点(node)

1.工作空间

在ROS入门教程中,在开始所有的编程工作之前,首先是要创建一个catkin_ws,即catkin工作空间,需要创建这样一个工作空间的原因与这个catkin工具有关。
Catkin is a collection of CMake macros and associated code used to build packages used in ROS.参考网页
就是说,catkin是一些cmake宏的集合,以及用于编译ros程序包的相关代码,简单理解它就是一个编译程序的工具,具体实现上可以参看ros安装目录下的catkin_make的python脚本,实际上catkin_make的工作就是确认各种编译需要的文件的存在性以及路径,解析程序包之间的依赖关系等等,简单了解即可。
正是由于ros编译程序采用了catkin_make工具,因此我们需要将创建的程序包放在catkin工作空间中,这样就简化了编译程序的工作,省去了编写编译文件中的许多工作量。
更多关于catkin工作空间的资料,可以参考
http://wiki.ros.org/cn/ROS/Tutorials/CreatingPackage
http://docs.ros.org/api/catkin/html/
/opt/ros/indigo/bin/catkin_make

2.程序包

程序包的概念比较容易理解,可以将它视为一个解决方案,我们可以将同类功能的程序都放在一个程序包中,比如添加一个新的传感器驱动,我们就可以将它作为一个程序包。在ros中,创建一个程序包非常简单,在工作空间的src文件夹中新建一个文件夹,在该文件夹下添加src文件夹,include文件夹,一个CmakeList.txt文件以及package.xml文件。文件树的结构如下:

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      src/
      include/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      src/
      include/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

需要注意的是,每个package文件夹下只能有一个描述文件,也只能生产一个程序包,但是可以将多个程序包放在一个元程序包的文件夹下。举个例子,一个机器人可能配置了许多传感器,每个传感器的驱动都是一个程序包,而所有传感器的程序包可以放在一个我们命名位drivers的元程序包中,用文件树描述如下:

workspace_folder/        
  src/                   
    CMakeLists.txt       
    drivers/
      driver_1/
        src/
        include/
        CMakeLists.txt    
        package.xml        
    ...
      driver_n/
        src/
        include/
        CMakeLists.txt     
        package.xml        

这样组织文件带来的好处是使文件系统看起来更加简洁,可以将几个大类的功能分别放在相应的元程序包中,而不会使各种程序包放在一起显得杂乱无章。例如,一个机器人系统的软件系统包含驱动,感知,规划,显示等几个部分,我们就可以这样来组织文件:

workspace_folder/        
  src/                   
    CMakeLists.txt       
    drivers/
    perception/
    planning/
    visualization/

关于package.xml文件和CmakeList.txt文件的具体内容和编写方式,放到下篇文章中详细描述。

3.节点

一个节点其实只不过是ROS程序包中的一个可执行文件。ROS节点可以使用topic与其他节点通信。节点可以发布或接收一个话题。节点也可以提供或使用某种服务。
我们最主要的工作就是要编写节点程序,这里就回到了我们熟悉的编写程序的部分,要编写源文件,头文件,在程序中定义节点的输入输出接口,执行算法,实现逻辑判断等等。编写完节点程序,要让该节点程序成为一个可执行文件,需要在CmakeList.txt添加相应的命令,这个等下篇细讲。

总结一下,本文主要介绍了ros文件系统的组织形式,包括工作空间,程序包和节点,工作空间的创建可以说是一劳永逸,主要目的就是为了使用catkin工具,程序包就是一个解决方案,每次新建时都要用描述文件来配置,节点是一个可执行文件,CmakeList.txt用来对程序包和节点进行编译。
另外,ros wiki上关于文件系统的介绍多是关于文件系统指令的使用,rospack , roscd , rosls等,可以了解一下
http://wiki.ros.org/cn/ROS/Tutorials/NavigatingTheFilesystem

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值