一.工作空间
概述:是一个存放工程开发相关文件的文件夹
包括四个主要文件夹
src(代码空间):用来放置功能包,功能包的代码,配置文件,launch文件等
build(编译空间):放置编译过程当中产生的中间编译文件,二进制文件,一般用不到
devel(开发空间):放置开发过程中的一些可执行文件,库,脚本等
install(安装空间):安装指令安装的位置,放置最终编译生成的可执行文件
注意:devel与install作用类似,只是一个是开发中,一个是开发结束后分享发布给客户使用的一个结果文件
如何创建工作空间并编译
1.创建工作空间:
mkdir catkin_ws
进入以自己用户名命名的主文件夹里,打开终端创建名(名字可以自己定义)为catkin_ws的文件夹
cd catkin_ws/
进入该文件夹
mkdir src
创建名(不可自定义,必须为src)为src的文件夹,用来 放置功能包和源码的
cd src/
进入该文件夹
catkin_init_workspace
把当前文件夹初始化变成ros的一个工作空间,这是属性的变化
2.编译工作空间:
cd ~/catkin_ws/
回到工作空间根目录下做编译
catkin_make
编译成功后设置环境变量
ROS里catkin编译工具所提供的一个编译器的指令,通过该指令,会编译src下面所有功能包的源码,结果会放入devel和install里来
运行后catkin_ws文件里会产生devel开发空间; build 编译空间;并没有产生install安装空间,需要手动输入catkin_make install , 产生install安装空间
src放功能包的源码;
install放置最终编译生成的可执行文件,最终,发布给客户使用的结果文件
devel是开发空间,放置开发过程中的一些可执行文件,过程中
build编译过程中的一些中间文件,二进制文件
设置环境变量:
source devel/setup.bash
因为很多可执行文件都在工作空间里放置的,为了让系统找得到这些可执行文件,故而需要设置环境变量
检查环境变量:echo $ROS_PACKAGE_PATH
二.功能包
1.创建功能包
创建代码时要创建功能包,功能包是ROS里放置源码的最小单元,故所有源码都必须放到功能包里而不能放到src下去编译;
此外注意,同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包
创建功能包:catkin_create_pkg <package_name> [depend1][depend2][depend3]
<package_name> 功能包名
[depend] 指该功能包在编译的时候需要依赖ROS里哪些其他功能包
举例:
cd ~/catkin_ws/src
回到src下
catkin_create_pkg test_pkg std_msgs rospy roscpp
test_pkg,该功能包需要依赖rospy和roscpp等;因为该功能包里要去调用ROS里python和c++接口来写程序,std_msgs是ROS定义的一些标准的消息结构
同时注意,功能包一定要放置到src里
整个文件的管理系统,在src里是功能包,功能包点开之后,定会有cmakelists和package两个文件
2.编译功能包
cd ~/catkin_ws
回到catkin_ws里
catkin_make
编译工作空间里test_pkg功能包
source devel/setup.bash
要去运行功能包里某一个程序,需要先去设置一下工作空间的环境变量
针对catkin_ws工作空间里的一个环境变量设置(只有设置了环境变量后才可以让系统找到这个工作区间及对应的功能包)
查看环境变量
echo $ROS_PACKAGE_PATH
其中,ROS_PACKAGE_PATH是ros本身环境变量,ros可以通过该环境变量来查找ros里所有功能包的路径
3.关于功能包里最重要两个文件的作用
<package.xml>
<CMakeLists.tst>
主要用来描述功能包里的编译规则,编译的设置(比如怎样编译cpp代码,编译时依赖哪些库)