入门脉络主要由几个部分组成,包括:ros简介、ros文件系统、ros通信架构、常用工具、roscpp和rospy。
ROS简介
机器人操作系统(Robot operating system ,ROS)是一个应用于机器人上的基础框架,它把原本松散的零部件耦合在一起,提供通信的架构,近似上ROS是一个中间件。
ros上手简单适合研究,但是商用缺点明显。主要是实时通信性能有限,系统稳定差。
ROS误解
ROS不是一门编程语言,主要代码由C++编写,客户端可以使用python\java等多种语言编写
ROS不仅仅是一个函数库,除了客户端库,还包含中心服务器.
ROS文件系统
认识ROS首先要知道ROS工程的组织架构,了解各个文件的功能和作用,才能高效的开发和编程。
这里面包含catkin编译系统,catkin工作空间结构,package软件包结构,重要的cmakelists.txt、package.xml文件内容。
catkin编译系统
catkin编译系统底层仍然是linux gcc/g++ 只是为了提高编译效率、简化工程管理衍生的,如果有比catkin编译效率更好的软件出现,catkin一样会被替代。
一个catkin软件包必须包含两个文件:package.xml(package描述信息),CMakeList.txt(构建package所需的cmake文件列表)。
catkin工作原理:
当在工作空间(必须切换到workspace_base否则编译不会成功)敲下catkin_make指令后,编译器首先在当前工作空间./src下递归查找每一个ROS package.
package 中会有package.xml和CMakeList.txt文件,catkin编译系统依据CMakeList.txt文件,从而生成makefiles(放在./build/).
然后make build目录的makefiles文件,编译链接生成可执行文件放在./devel.
所以说catkin就是将cmake和make指令做了一个封装,从而完成整个编译过程的工具。
catkin工作空间
catkin的工作空间结构,它包含了src、build、devel 三个文件夹主要作用如下:
src/: ROS的catkin软件包(源代码包)
build/: catkin(CMake)的缓存信息和中间文件
devel/: 生成的目标文件(包括头文件,动态链接库,静态链接库,可执行文件等)、环境变量
1 | gaocancan@ubuntu:~$ mkdir -p catkin_test/src |
package 软件包
package是catkin编译的最小单元,我们调用catkin_make编译的对象就是一个个package,所以package也是ROS源码存放的地方。
一个package常见的结构有:
1 | ├── CMakeLists.txt #package的编译规则(必须) |
通常ROS文件组织都是按照以上的形式,这是约定俗成的命名习惯,建议遵守。以上路径只有 CMakeLists.txt 和 package.xml 是必须的,其余路径根据软件包是否需要来决定。
package创建
创建package需要工作空间的src目录下,使用catkin_create_pkg package depends
其中package 是包名,depends是依赖的包名(如roscpp、rospy、std_msgs)执行命令后会自动完成软件包的初始化,并将依赖包按格式写入CMakeList.txt、package.xml.
1 | gaocancan@ubuntu:~/catkin_test/src$ catkin_create_pkg catkin_test_pkg roscpp rospy std_msg |
常用ros 命令:
如果不指定 [package]默认为当前目录
rospack list #列出本机所有package
rospack find [package] #定位某个package
rospack profile [package] #刷新所有package位置记录
rospack depends [package] #显示package依赖包
roscd [package] #打开package
rosls [package] #相当于ls
rosdep check [package] #检查package依赖是否满足
rosdep install [package] #安装package的依赖
rosdep db #生成和显示依赖数据库
rosdep init #初始化/etc/ros/rosdep中的源
rosdep keys 检查package的依赖是否满足
rosdep update 更新本地的rosdep数据库
cmakelists.txt、package.xml文件介绍
CMakeList.txt指定源码到目标文件的规则,该文件规定了package要依赖的包,编译目标文件、编译流程等。
cmakelists.txt写法:
1 | cmake_minimum_required() #CMake的版本号 |
语法推荐:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 。作者写的很直白,掌握CMake语法可以加深理解ROS工程
package.xml 包含了package 的名称、版本号、内容、编译依赖、运行依赖等信息,实际上rospack find 、rosdep命令也是读取该文件。
package.xml写法:
package.xml有两个版本,目前主流版本都支持。
版本一:
1 | <pacakge> 根标记文件 |
版本二:
1 | <pacakge> 根标记文件 |
入门脉络主要由几个部分组成,包括:ros简介、ros文件系统、ros通信架构、常用工具、roscpp和rospy。