LOU4099857215 L9 2020-05-01 12:01:26 ROS环境配置
494 0

“ROS 机器人操作系统初级教程”实验报告

ROS环境配置

其实是环境配置+文件系统+程序包初学的实验总结合集

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源代码

buildcmake跟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进行编辑

关于vi跟vim......贴一个教程以后学(x)

6.$ rosdep install pkgname

安装pkg需要的依赖包(主要是用于自己的pkg需要抓别人写的pkg的时候)


ROS中package的依赖关系

package的依赖是递归的,即从最底层的依赖包开始逐渐往上检测间接依赖:依赖包中的依赖包,依赖包中的依赖包中的依赖包......(禁止套娃


关于package中的一些文件的写法

1.package.xml

2.CMakeLists.txt

//做下实验回来再写.....(鸽住

metapackage是指功能包集(很多功能包的集合)//可以理解成头文件包含吗= =

最新评论
暂无评论~