工程结构(文件系统级)
catkin:ROS定制的编译构建系统 对CMake的扩展(用来编译ros程序的)
catkin工作空间:组织和管理功能包的文件夹,以catkin工具编译
catkin_make 创建工作空间 编译
src: package源代码
build: cmake和catkin缓存和中间文件
devel: 目标文件
catkin的编译对象就是package
编译的时候会递归的查找每一个package
package组成
ROS软件的基本组织形式 一个package包含多个执行文件。
怎样才能被称为package? 下面就是package中必备的一些文件
CmakeLists.txt: : 规定catkin编译的规则(编译出问题一般查找这个文件)
package.xml: :
定义package的属性 ,例如:包名 版本号 作者 依赖等
一般就改红线的两项
package中的代码:
ROS里的可执行程序一般来自脚本(shell python)和C++(头文件,源文件)
package中也可以有自定义通信格式 分别在对应的文件夹下
msg 消息
srv 服务
action 动作
也可以有launch文件:一次性执行多个可执行文件 lauch文件放在package下launch文件夹中 参数(.yaml)放在config文件夹下
package常用指令
查找某个pkg的地址
rospack find package_name
列出本地所有package
rospack list
跳转到某个pkg路径下
roscd package_name
列举某个pkg下的文件:
rosls package_name
编辑pkg中的文件
rosed package_name_file_name (要装下vim)
创建一个pkg
catkin_creat_pkg<pkg_name>[dep] 包名加依赖
安装某个pkg所需的依赖
rosdep install [pkg_name]
使用 rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y 安装依赖包(package中build 和depend知道需要什么依赖)
出现错误:
ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies:
slam_sim_demo: No definition of [hector_mapping] for OS [debian]
navigation_sim_demo: No definition of [dwa_local_planner] for OS [debian]
robot_sim_demo: No definition of [yocs_cmd_vel_mux] for OS [debian]
解决方法:
更改命令为:
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y --os=ubuntu:xenial
创建包编译完成后
要source ~/catkin_ws/devel/setup.bash
echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc 把 source ~/catkin_ws/devel/setup.bash 永久加进bashrc文件中
rospack list | grep catkin_ws
Metapacakge
自身没有什么内容,但是依赖了很多其他的软件包(stack)
例如navigation包 虚包 cMakelist中 只有声明cattkin_Metapacakge 但是点开package.xml 有很多rundepend