ROS操作系统的工程结构
最近准备一个比赛,需要学习好多东西,打算最近写一些博客记录自己所学的知识。[手动比心 by zwx lvmm]
- ROS工程结构
ROS文件系统的结构:
catkin workspace --- src --- package 1 ---(...)
package 2
......
--- build ---(cmake & catkin 的缓存文件或者目标文件)
--- devel --- (生成的目标文件)
catkin 是ROS定制的编译构建系统,是对于CMake的扩展。
创建一个catkin工程的方法:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
#这个语句仅在当前终端内有效
source ~catkin_wa/devel/setup.bash
#或者用下面这条语句,可在新打开的终端内有效
echo "source ~catkin_wa/devel/setup.bash" >> ~/.bashrc
package 是ROS软件的基本阻值形式,也是catkin编译的基本单元,一个package可以包含很多个可执行的文件。
package --- CMakeList.txt ()
--- package.xml()
--- scripys 脚本文件 --- *.py *.sh
--- msg --- *.msg
--- srv --- *.srv
--- include --- *.cpp
--- launch --- *.launch
package 包中必须含有的CMakeList.txt和package.xml这两个文件,以及其他文件。
- CMakeList.txt 文件:
CMakeList.txt 规定了catkin的编译规则,例如源文件、依赖项、目标文件之间的关系。
CMakeList.txt 文件内部的基本语句:
cmake_minimun_required() #指定catkin最低版本
project() #制定软件包名称
find_package() #指定编译时需要的依赖项
add_message_files() #添加消息文件
add_service_files() #添加服务文件
add_action_files() #添加动作文件
generate_message() #生成消息、服务、动作
catkin_package() #制定catkin信息给编译系统生成的CMake文件
add_library() #制定生成库文件
add_executable() #制定生成可执行文件
target_link_libraries() #制定可执行文件去链接哪些库
catkin_add_gtest() #添加测试单元
install() #生成可安装目标
- package.xml 文件:
package.xml 用来定义package的属性。(相当于包的自我描述)
文件内部包含的就基本信息: 包名、版本号、作者、依赖等
<package> <!--根标签-->
<name> <!--包名-->
<version> <!--版本号-->
<description> <!--包描述-->
<maintainer> <!--维护者-->
<license> <!--软件许可-->
<buildtool_depend> <!--编译工具-->
<build_depend> <!--编译时的依赖-->
<run_depend> <!--运行时的依赖-->
</package> <!--根标签-->
- 代码文件:
脚本(shell、python)C++文件(头文件、源文件)
- 自定义通信内容:
消息(msg)服务(srv)动作(action)等
- launch文件以及配置文件:
launch文件(launch)配置文件(yaml)
包管理的常用指令:
#查找某个pkg的地址
$rospack find package_name
#列出本地所有pkg
$rospack list
#跳转到某个pkg路径下
$roscd package_name
#列举某个pkg下的文件信息
$rosls package_name
#编辑pkg中的文件
$rosed package_name file_name
#创建一个pkg
$catkin_create_pkg <pkg_name> [依赖]
#安装某个pkg所需的依赖
$rosdep install [pkg_name] #在相应的程序的package.xml
此外还有一个和package具有共同功能的包:Metapackage
Metapackage, 与package的区别,本身不含有任何内容,但是它依赖了许多其他的软件包,通过这种方法把其他的软件包组合起来。