ROS日记:ROS工作空间搭建和功能包创建与编译

        一切准备工作就绪,现在是时候开始进入ROS的正式学习和使用了。这一部分主要讲解ROS工作空间的搭建,以及功能包的创建与编译。

工作空间的文件夹结构有它的规范,以下是一个典型的工作空间结构:

ROS日记:ROS工作空间搭建和功能包创建与编译

1、在开始创建和编译ROS功能包之前,先要把ROS的工作空间设置搭建好。

我们可以先查看现在ROS正在使用的工作空间:
echo $ROS_PACKAGE_PATH

可能看到以下以冒号隔开的空间目录:
/opt/ros/我们的ros版本(如indigo)/share:/opt/ros/indigo/stacks

创建工作空间步骤如下:
第一步,先配置系统环境。
source /opt/ros/我们的ros版本(如indigo)/setup.bash

第二步,创建一个工作空间目录,即文件夹,并编译工作空间。
mkdir -p ~/catkin_ws/src        //-p,在创建目录的时候父目录不存在则一并创建;~,用户目录
cd ~/catkin_ws/src
catkin_init_workspace        //初始化工作空间
cd ~/catkin_ws
catkin_make        //catkin_make命令行工具简化了catkin的标准工作流程,可以认为catkin_make是在CMake标准工作流程中依次调用了cmake和make

注:src目录其实是源文件空间目录,这里存放的或即将存放的是我们创建的ROS功能包或者其他功能包,在它的上级目录catkin_ws执行命令catkin_make之后会生成另外两个目录文件夹——build和devel文件夹,它们分别是编译空间文件夹和开发空间文件夹。

第三步,完成环境变量配置。
source devel/setup.bash    //实际上只是重新加载了setup.bash文件,关闭终端重开也能起到同样的效果

当然,我们可以将上面的命令行添加到~/.bashrc文件里,这样每次打开新终端就会加载命令行并配置环境:
echo "source /opt/ros/我们的ros版本(如indigo)/setup.bash" >> ~/.bashrc

 

2、功能包的编译

第一步:编译功能包之前要确保存在功能包,没有的话可以使用catkin_create_pkg命令行工具创建。

格式如下:
catkin_create_pkg [package_name] [depend1] [depend2] [depend3] [……]

注:package_name指包名,depend指依赖项。

举例:
cd ~/catkin_ws/src
catkin_create_pkg mypackage std_msgs roscpp

注:std_msgs,系统依赖项一,包含常见的消息类型;roscpp,系统依赖项二,ROS客户端库,使用C++实现ROS的各种功能。

第二步:编译功能包

这里使用catkin_make工具,此时注意必须在工作空间目录下运行该命令工具。
cd ~/catkin_ws/
catkin_make

上面的编译方式是编译工作空间下所有的功能包,如果只编译其中指定的功能包,格式如下:
catkin_make -DCATKIN_WHITELIST_PACKAGES="mypackage1"
source devel/setup.bash
catkin_make -DCATKIN_WHITELIST_PACKAGES="mypackage2"
source devel/setup.bash
catkin_make -DCATKIN_WHITELIST_PACKAGES=""

注:这一步执行命令的目录也是工作空间目录下,最后一行执行命令指恢复编译所有的包,即下次我们修改功能包内容之后依然可以重新编译我们要指定编译的包。

到此,在ROS上我们实际已经实现了相应的功能,只要运行节点(即执行相应的进程)就能实现相应的操作。例如,我们编译完了一个导航功能包,运行该导航功能包里的某个功能节点,则相应的实现了某些导航操作。