ROS:ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构,ROS也就是robot operating system,他的主要目标是为了机器人研究和开发提供代码复用的支持。ROS是一个分布式进程,也就是节点框架,这些进程被封装在易于被分享和发布的程序包和功能包中。
catkin:ROS的原始编译和打包系统是rosbuild,而catkin是现在ROS的官方指定系统,catkin的原理和流程和Cmake都很类似。
1. 安装并配置ROS
安装ros
http://wiki.ros.org/cn/ROS/Installation
管理环境
每次打开终端都需要source一下才能运行ros的相关命令:
source /opt/ros/<distro>/setup.bash
创建ROS工作空间
我们使用catkin来创建catkin工作空间
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_make
我们在当前目录下能看到build和devel两个文件夹,在devel文件夹中可以看到很多setup.*sh文件,source其中的任何一个都可以将当前工作空间设置在ROS工作环境的最顶层。所以:
source devel/setup.bash
我们需要查看一下工作空间是否配置正确:
$ echo $ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share
/home/youruser/catkin_ws/src这一块其实就是你自己一开始被build的工作目录
2. ROS文件系统
文件系统:
- packages 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库,可执行文件,脚本或者其他手动创建的东西
- Manifest : package.xml,清单,是对于软件包相关信息的描述,用于定义软件包相关元信息之间的依赖关系。
rospack命令
rospack用于获取软件包的相关信息,使用find参数找到软件包路径:
rospack find [包名称]
roscd命令
roscd [本地包名称[/子目录]]
roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH
环境变量中的软件包,查看路径:
echo $ROS_PACKAGE_PATH
/home/wangyf/xxx:/opt/ros/melodic/share
和其他的路径环境变量类似,可以添加更多的其他路径,每条路径用冒号隔开。
3. 创建ROS程序包
一个catkin程序包包含:
my_package/
CMakeLists.txt
package.xml
一个工作空间看起来应该像:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
创建一个catkin程序包:
进入目录:
然后使用
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
这行命令创建了一个beginner_tutorials新程序包,这个包依赖于std_msgs/roscpp/rospy
查看程序包依赖
rospack depends1 rospy
最后记得对package.xml里面的信息进行修改。