其实是环境配置+文件系统+程序包初学的实验总结合集
catkin就是用来编译ros程序的(是对cmake的扩展)
//rosbuild编译系统是早期采用的(差不多已经淘汰了)
catkin是一个组织和管理功能包的文件夹
//catkin工作空间的创建
$ mkdir -p ~/catkin_ws/src 创建一个目录
$ cd ~/catkin_ws/ 切换到工作空间所在目录
$ catkin_make 创建工作空间(准确地说是编译?)
//catkin_ws可以换成任意名字,但是一定要有src目录(ws是workspace缩写
copy
catkin_make的主要功能是编译,系统会自动构建生成目标文件(就相当于一个编译器?只不过这是输入命令而不是鼠标点击)
补充:mkdir -p参数是能直接创建一个不存在的目录下的子目录
如,创建A目录下的B目录时 正常是使用mkdir A ,然后cd A, mkdir B
如果使用mkdir -p时,可以直接输入,mkdir -p A/B
同样,rm -r 参数是能够直接删除一个非空目录,与mkdir -p 同理是用的递归函数 引用的博客
注意
catkin_make之前一定要回到工作空间,即执行$ cd ~/catkin_ws/
make之后要执行如下命令(在catkin_ws/devel目录,这里面有很多setup.*sh
文件)
$ source setup.*sh
*根据不同版本而异吧。这行命令的作用是:将编译完的ws刷新到环境变量,这样系统才知道生成的ros可执行文件放在哪里
$ echo $ROS_PACKAGE_PATH
用于查看创建的工作空间目录
//ROS_PACKAGE_PATH是一个环境变量(环境变量大概就是数据类型是环境的变量吧= =)
//复习grep命令即查找字符串,示例↓
ps -A|grep string 显示进程
printenv|grep string 显示环境变量
copy
//source命令的作用(鸽住先
ws下的文件的作用:
src
源代码
build
cmake跟catkin的缓存和中间文件
devel
目标文件
所以只有src是真正写代码的地方,其它的是catkin系统完成(就好像c编程,编译链接是编译器做的事)
src目录中存放各种功能包package
!每个目录下只能有一个程序包。这意味着在同一个目录下不能有嵌套的或者多个程序包存在。每个pkg在src目录下都是”文件夹“的形式,其实也很好理解= =要是每个pkg都是裸的,那不是搞乱了0.0
catkin->package
package是ROS的基本组织形式,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
package是catkin编译的基本单元(是不是相当于一个c文件?)
并不,一个package是可以包含多个可执行文件的,最简单的package至少要包含
package的两个重要文件
CMakeLists.txt跟package.xml两个文件(那话说是不是就相当于一个工程0.0)
CMakeLists.txt: 规定catkin的编译规则(makefile?),用的是cmake的语法。创建package的时候系统会给出模板,在模板的基础上修改即可。
package.xml: 清单 定义了package的一些属性:包名,版本号,作者,依赖。也会给出模板。
(即对软件包相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。)
//manifest.xml是rosbuild编译系统下的。就相当于catkin的package.xml
那么package还能放啥呢?
1. 代码文件
ROS的可执行文件一般有两种来源:可执行脚本(Shell/Python)&C++文件(头文件跟源文件)
一般在package下面创建scripts目录存放脚本,include目录放头文件,src目录放源文件 (src目录也可以放python文件的,比如说被import的python文件)
2. 自定义的通信内容
ROS中自定义的通信格式:message消息 service服务 action动作 想在ROS里面自定义一个通信格式:在package下创建msg/srv/action目录,然后存放相应后缀格式的文件(比如srv目录下的文件是*.srv)
3. launch文件及配置文件(yaml)
把一个package下的多个可执行文件组织到一个launch文件里面。launch文件放在/package/launch
此外还有一些参数,配置等信息放在config目录下,内容格式随意,但是一般配置文件都是*.yaml
ROS中有关package的常用指令
1.catkin_create_pkg pkgname dep...
这里...表示依赖包可以有多个,空格间隔
创建一个pkg
2.rospack
$ rospack find pkgname 查找目标pkg的地址
$ rospack list 列出本地所有pkg
copy
3.$ roscd pkgname
跟Linux的cd类似,跳转路径
4.$ rosls pkgname
跟Linux的ls类似,列出pkg路径下所有文件
5.$ rosed pkgname filename
vi指令简化,对pkg下的某个file进行编辑
6.$ rosdep install pkgname
安装pkg需要的依赖包(主要是用于自己的pkg需要抓别人写的pkg的时候)
ROS中package的依赖关系
package的依赖是递归的,即从最底层的依赖包开始逐渐往上检测间接依赖:依赖包中的依赖包,依赖包中的依赖包中的依赖包......(禁止套娃
关于package中的一些文件的写法
1.package.xml
2.CMakeLists.txt
//做下实验回来再写.....(鸽住
metapackage是指功能包集(很多功能包的集合)//可以理解成头文件包含吗= =
学习时间 55分钟
操作时间 23分钟
按键次数 303次
实验次数 4次
报告字数 2904字
是否完成 完成