1. 什么是ROS的工作空间使用ROS实现机器人开发的主要手段是写代码,这些代码文件存放的空间就是工作空间。工作空间(workspace)是一个用于存放工程开发相关文件的文件夹。目前,ROS默认使用的是Catkin编译系统(在CMake的基础上拓展得到的,将 cmake 与 make 指令做了一个封装从而完成整个编译过程)。在Catkin编译系统下,一个典型的工作空间一般包含四个目录空间:src、devel、build、install,结构如下:workspace_folder/
|—— src/
|—— CMakeLists.txt
|—— package_1/
|—— CMakeLists.txt
|—— package.xml
|—— ......
|—— package_2/
|—— CMakeLists.txt
|—— package.xml
|—— ......
|—— devel/
|—— setup.bash
|—— ......
|—— build/
|—— ......
|—— install/src: 代码空间(Source Space),最常用、最重要的文件夹,用来存储所有ROS功能包(package)的源文件。build: 编译空间(Build Space),由catkin_make命令自动生成,用来存储工作空间编译过程中产生的缓存信息和中间文件。devel: 开发空间(Development Space),由catkin_make命令自动生成,用来放置编译生成的可执行文件。install: 安装空间(Install Space),不是必需的,很多工作空间没有该文件夹。编译成功后,可以使用make install命令将可执行文件安装到该空间中,运行该空间中的环境变量脚本,即可在终端中运行这些可执行文件。Catkin的软件包(package)必须要包括两个文件:package.xml: 包括了package的描述信息name, description, version, maintainer(s), licenseopt. authors, url's, dependencies, plugins, etc...CMakeLists.txt: 构建package所需的CMake文件调用Catkin的函数/宏解析package.xml找到其他依赖的catkin软件包将本软件包添加到环境变量catkin编译的工作流程如下:首先在工作空间catkin_ws/src/下递归的查找其中每一个ROS的package。package中会有package.xml和CMakeLists.txt文件,Catkin(CMake)编译系统依据CMakeLists.txt文件,从而生成makefiles(放在catkin_ws/build/)。然后make刚刚生成的makefiles等文件,编译链接生成可执行文件(放在catkin_ws/devel)。也就是说,Catkin就是将cmake与make指令做了一个封装从而完成整个编译过程的工具。catkin有比较突出的优点,主要是:操作更加简单一次配置,多次使用跨依赖项目编译工作空间并不是整个ROS开发所在的空间,不同的项目可以有各自的工作空间,只需要配置各自的环境变量即可(source devel/setup.bash)。2. 什么是ROS的功能包功能包(package)是ROS中的基本单元,包含ROS节点、库、配置文件等。一个功能包下常见的文件、路径有: ├── CMakeLists.txt #package的编译规则(必须)
├── package.xml #package的描述信息(必须)
├── src/ #源代码文件
├── include/ #C++头文件
├── scripts/ #可执行脚本
├── msg/ #自定义消息
├── srv/ #自定义服务
├── models/ #3D模型文件
├── urdf/ #urdf文件
├── launch/ #launch文件config:功能包的配置文件,用户创建。include:需要用到的头文件。scripts:可以直接运行的Python脚本。src:需要编译的C++代码。launch:所有启动文件。msg:自定义的消息类型。srv:自定义的服务类型。action:自定义的动作指令。CMakeLists.txt:Catkin编译器编译功能包的规则。package.xml: 功能包清单,可得到该package的名称、版本号、信息描述、作者信息和许可信息等。更重要的,<build_depend> ... </build_depend>标签定义了代码编译所依赖的其它功能包,<exec_depend> ... </exec_depend>标签定义了可执行程序运行时所依赖的其它功能包。上面的这些文件夹并不是每一个都要有,根据需要创建即可,比如不需要运行python文件,就不用scripts文件夹。此外,也可以自定义其他的文件夹。ROS针对功能包的常用命令如下:catkin_create_pkg # 创建功能包
catkin_make # 编译工作空间中的功能包
rospack # 获取功能包的信息
rosdep # 自动安装功能包依赖的其它包
roscd # 功能包目录跳转
roscp # 拷贝功能包中的文件
rosed # 编辑功能包中的文件
rosrun # 运行功能包中的可执行文件
roslaunch # 运行启动文件rospackrospack是对package管理的工具,命令的用法如下:rostopic命令作用rospack help显示rospack的用法rospack list列出本机所有packagerospack depends [package]显示package的依赖包rospack find [package]定位某个packagerospack profile刷新所有package的位置记录以上命令如果package缺省,则默认为当前目录(如果当前目录包含package.xml)roscdroscd命令类似与Linux系统的cd,改进之处在于roscd可以直接cd到ROS的软件包。rostopic命令作用roscd [pacakge]cd到ROS package所在路径roslsrosls也可以视为Linux指令ls的改进版,可以直接lsROS软件包的内容。rosls命令作用rosls [pacakge]列出pacakge下的文件rosdeprosdep是用于管理ROS package依赖项的命令行工具,用法如下:rosdep命令作用rosdep check [pacakge]检查package的依赖是否满足rosdep install [pacakge]安装pacakge的依赖rosdep db生成和显示依赖数据库rosdep init初始化/etc/ros/rosdep中的源rosdep keys检查package的依赖是否满足rosdep update更新本地的rosdep数据库一个较常使用的命令是rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y,用于安装工作空间中src路径下所有package的依赖项(由pacakge.xml文件指定)。参考:ROS开发(一)创建工作空间ROS开发(二)创建功能包ROS中catkin工作空间的创建步骤ROS基础ROS文件系统 · Catkin编译系统如何完全删除清除catkin工作空间?
ROS工作空间是存放机器人开发文件的文件夹,包括src、devel、build和install四个目录空间。功能包是ROS的基本单元,包含节点、库、配置文件等。常用的ROS命令有catkin_create_pkg、catkin_make、rospack、rosdep、roscd、roscp、rosed、rosrun和roslaunch。