【Addicted TO ROS】ROS工程结构

ROS工程结构

  • ROS工程结构
    • `catkin_ws`工作空间
      • 概述
      • catkin workspace初始化后的目录结构
      • src
    • 功能包 `package`
      • `CMakeLists.txt`文件
      • `package.xml`文件
      • 代码文件
      • 自定义通信格式
      • launch以及配置文件
    • 常用包管理指令
      • 其他命令
  • 实践
    • 创建一个自己的ros package

ROS工程结构

典型的Ros工程如下:
【Addicted TO ROS】ROS工程结构_第1张图片

  • src:代码空间——用来存放功能包;
  • build:编译空间——存放编译中产生的中间文件;
  • devel:开发空间——存放编译后生成的可执行文件;
  • install:安装空间——用install指令安装时所指定的目标位置(一般开发情况下使用不到的);

catkin_ws工作空间

概述

catkin:ros定制的编译构建系统 ,是对Cmake的扩展,编写原则与Cmake相似;
catkin工作空间:用来组织和管理功能包的文件夹,以catkin工具编译;

  1. 建立工作空间
mkdir -p ~/catkin_ws/src
cd src
catkin_init_wprkspace#初始化工作空间
  1. 编译
cd ~/catkin_ws 
catkin_make  #编译所有功能包
source ~/catkin_ws/devel/setup.bash #编译完成之后需要sorcerer刷新环境

在这里插入图片描述

catkin workspace初始化后的目录结构

【Addicted TO ROS】ROS工程结构_第2张图片

rosbuild命令:

ros早期采用的编译系统,目前主流的ROS项目已经不采用此命令编译,大多使用catkin_make
【Addicted TO ROS】ROS工程结构_第3张图片

src

src下放的是各种功能包——packagepackage是catkin编译的基本单元,catkin编译的过程会在src目录下进行递归的查找每一个package,所以可以吧package放在src下的几个文件夹下;
【Addicted TO ROS】ROS工程结构_第4张图片

功能包 package

  • package:
     ROS软件的基本组织形式,catkin编译的基本单元,一个package可以包含多个可执行文件(节点);package下必须包含两个文件,即最精简的package文件下也要有CMakeLists.txtpackage.xml;

CMakeLists.txt文件

 规定catkin编译的规则,例如:源文件、依赖项、目标文件;
【Addicted TO ROS】ROS工程结构_第5张图片

package.xml文件

 定义package的属性,例如:包名、版本号、作者、依赖等;


<package format="2">
  
  <name>testname>
  
  <version>0.0.0version>
  
  <description>The test packagedescription>
  
  <maintainer email="[email protected]">alvinmaintainer>
  
  <license>TODOlicense>
  
  <buildtool_depend>catkinbuildtool_depend>
  <build_depend>roscppbuild_depend>
  <build_depend>rospybuild_depend>
  <build_depend>std_msgbuild_depend>
  <build_export_depend>roscppbuild_export_depend>
  <build_export_depend>rospybuild_export_depend>
  <build_export_depend>std_msgbuild_export_depend>
  <exec_depend>roscppexec_depend>
  <exec_depend>rospyexec_depend>
  <exec_depend>std_msgexec_depend>


  
  <export>
    

  export>
package>

manifest.xmlrosbuild编译系统采用的包信息清单,类似catkinpackage.xml

代码文件

 代码文件指的是脚本文件(shell、python)、以及C++(头文件、源文件);通常将这些文件放在package下的scripts下面;一些情况下src文件下也可以放一下python的源文件,即可以被其他源文件importpython文件;
【Addicted TO ROS】ROS工程结构_第6张图片

自定义通信格式

  1. 消息(msg)
  2. 服务(srv)
  3. 动作(action)
    【Addicted TO ROS】ROS工程结构_第7张图片

launch以及配置文件

launch文件:帮助用户一次运行多个可执行文件
配置文件(yaml):
【Addicted TO ROS】ROS工程结构_第8张图片

常用包管理指令

  1. rospack
rospack find package_name #查找某个pkg的地址
rospack list #列出所有的pkg
  1. roscd : 跳转到某个pkg路径下
roscd package_name
  1. rosls : 列举某个pkg下的文件信息
rosls package_name
  1. rosed : 编译pkg中的文件
rosed package_name file_name
  1. catkin_create_pkg :创建一个pkg
catkin_create_pkg <pkg_name> [dep]
  1. rosdep : 安装某个pkg所需的依赖
rosdep install [pkg_name]

其他命令

【Addicted TO ROS】ROS工程结构_第9张图片

实践

创建一个自己的ros package

  1. 创建一个工作空间并初始化
    【Addicted TO ROS】ROS工程结构_第10张图片
    如果需要产生install文件夹需要执行如下命令
catkin_make install

【Addicted TO ROS】ROS工程结构_第11张图片

  1. 创建一个包并指定依赖文件
    格式catkin_create_pkg + pakage_name +各种指定的依赖(如roscpprospy…)
cd ~/catkin_ws/src
catkin_create_pkg test roscpp rospy std_msg

【Addicted TO ROS】ROS工程结构_第12张图片
3. 编译功能包并设置环境变量
只有设置环境变量,相应的终端里才能找到功能包;

catkin_make #编译
source devel/setup.bash #设置环境变量
echo $ROS_PACKAGE_PATH #检测环境变量

在这里插入图片描述

你可能感兴趣的:(ROS,notes)