爱之于我,不是肌肤之亲,不是一蔬一饭,它是一种不死的欲望,是疲惫生活里的英雄梦想。
创建工作空间
工作空间(workspace)是一个存放工程开发相关文件的文件夹。包含四个部分的内容。
- src:代码空间(Source Space)
- build:编译空间(Build Space)编译过程产生的中间文件
- devel:开发空间(Development Space)可执行文件和相关脚本
- install: 安装空间(Install Space)和devel文件功能相差不大,只不过一般将可执行文件安装到此文件夹。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间
cd ~/catkin_ws/
catkin_make
设置环境变量
source devel/setup.bash
通过设置环境变量,系统将知道功能包放在catkin_ws_devel下
该命令有一个弊端就是,设置的环境变量只会在当前终端下生效,重新打开一个终端将失效
解决方法是将上述命令放在终端配置文件中。
vi ~/.bashrc
vi/vim介绍
将环境变量添加只终端设置最后一行
source ~/catkin_ws/devel/setup.bash
在新的终端中输入以下命令,让终端命令在当前终端生效
source ~/.bashrc
检查环境变量
echo $ROS_PACKAGE_PATH
创建功能包
catkin_create_pkg<package_name> [depend1][depend2][depend3]
功能包的名字以及该功能包所依赖的其他功能包。
cd ~/catkin_ws/src
catkin_create_pkg learning_communication std_msgs rospy roscpp //标准数据结构,ros python接口,ros c++接口
编译功能包
所有使用catkin_make
完成编译操作都是需要在工作空间根目录下。
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
同一工作空间下,不允许存在同名功能包,不同工作空间下,允许存在同名功能包
这里的catkin_ws和新建文件夹差不多,可以换一个名字。
工作空间的覆盖Overlaying 机制
当ROS中存在多个同名的功能包时,它会以什么样的顺序去查找呢?优先选择哪一个工作空间下的功能包?
env | grep ros
查看和ros相关的环境变量
- 工作空间的路径依次在ROS_PACKAGE_PATH环境变量中记录
- 新设置路径在ROS_PACKAGE_PATH中会自动放置在最前端
- 运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包
- 如果存在,就顺序向后查找其他工作空间
sudo apt-get install ros-kinetic-roscpp-tutorials