ROS学习笔记(二) package介绍

package介绍

ROS学习笔记(二) package介绍_第1张图片
├── CMakeLists.txt   #package的编译规则(必须)
├── package.xml   #package的描述信息(必须)
├── src/        #源代码文件(.cpp)
├── include/      #C++头文件(.h)
├── scripts/     #可执行脚本(shell python)
├── msg/       #自定义消息(.msg)
├── srv/        #自定义服务(.srv)
├── models/      #3D模型文件
├── urdf/       #urdf文件(.urdf,xacro),描述机器人
├── launch/      #launch文件(.launch),启动文件

创建包命令:catkin_create_pkg package1 roscpp rospy std_msgs
创建完成后package1的基本结构:
ROS学习笔记(二) package介绍_第2张图片
catkin_create_pkg自动完成软件包的初始化,填充CMakeLists.txt和package.xml(将依赖项填进这两个文件中)。

命令:

rostopic:

rostopic命令 作用
rospack help 显示rospack的用法
rospack list 列出本机所有package
rospack depend [package] 显示package的依赖包
rospack find [package] 定位某个package
rospack profile 刷新所有package的位置记录

rosdep

rosls命令 作用
rosdep check [package] 检查package的依赖是否满足
rosdep install [package] 安装pacakge的依赖
rosdep db 生成和显示依赖数据库
rosdep init 初始化/etc/ros/rosdep中的源
rosdep keys 检查package的依赖是否满足
rosdep update 更新本地的rosdep数据库

rosls:

rosls命令 作用
rosls [package] 列出pacakge下的文件

roscd

roscd命令 作用
roscd [package] cd到ROS package所在路径

package.xml

介绍:
package的描述文件(在较早的ROS版本rosbuild编译系统中,此文件为 manifest.xml),用于描述package的基本信息。
功能:
pacakge.xml包含了package的名称、版本号、内容描述、维护人员、软件许可、编译构建工具、编译依赖、运行依赖等信息。实际上rospack find、rosdep等命令就是直接读取pacakge中的package.xml文件,为用户提供了快速了解一个pacakge的渠道。

package现有两种版本同时存在,目前Indigo、Kinetic、Lunar等版本的ROS都同时支持两种版本的package.xml。
版本1:

<package>           根标记文件  必备标签
<name>              包名       必备标签	包的属性
<version>           版本号  	  必备标签	包的属性
<description>       内容描述    必备标签	包的属性
<maintainer>        维护者     必备标签	包的属性
<license>           软件许可证  必备标签	包的属性
<buildtool_depend>  编译构建工具,通常为catkin 	编译相关信息
<build_depend>      编译依赖项,与Catkin中的  		编译相关信息
<run_depend>        运行依赖项					编译相关信息

版本2:

<pacakge>               根标记文件  
<name>                  包名  
<version>               版本号  
<description>           内容描述  
<maintainer>            维护者 
<license>               软件许可证  
<buildtool_depend>      编译构建工具,通常为catkin    
<depend>                指定依赖项为编译、导出、运行需要的依赖,最常用
<build_depend>          编译依赖项  
<build_export_depend>   导出依赖项
<exec_depend>           运行依赖项
<test_depend>           测试用例依赖项  
<doc_depend>            文档依赖项

例:

版本1:

<?xml version="1.0"?>       <!--版本-->
<package>                   <!--根标签,写在最外面-->
  <name>turtlesim</name>
  <version>0.8.1</version>
  <description>
    turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="[email protected]">Dirk Thomas</maintainer>
  <license>BSD</license>

  <url type="website">http://www.ros.org/wiki/turtlesim</url>
  <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url>
  <url type="repository">https://github.com/ros/ros_tutorials</url>
  <author>Josh Faust</author>

  <!--编译工具为catkin-->
  <buildtool_depend>catkin</buildtool_depend>

  <!--编译时需要依赖以下包-->  
  <build_depend>geometry_msgs</build_depend>    
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt5-qmake</build_depend>
  <build_depend>rosconsole</build_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>roscpp_serialization</build_depend>
  <build_depend>roslib</build_depend>
  <build_depend>rostime</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>std_srvs</build_depend>

  <!--运行时需要依赖以下包-->
  <run_depend>geometry_msgs</run_depend>
  <run_depend>libqt5-core</run_depend>
  <run_depend>libqt5-gui</run_depend>
  <run_depend>message_runtime</run_depend>
  <run_depend>rosconsole</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>roscpp_serialization</run_depend>
  <run_depend>roslib</run_depend>
  <run_depend>rostime</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>std_srvs</run_depend>
</package>

版本2:

<?xml version="1.0"?>
<package format="2">      <!--指定新版格式-->
  <name>turtlesim</name>
  <version>0.8.1</version>
  <description>
    turtlesim is a tool made for teaching ROS and ROS packages.
  </description>
  <maintainer email="[email protected]">Dirk Thomas</maintainer>
  <license>BSD</license>

  <url type="website">http://www.ros.org/wiki/turtlesim</url>
  <url type="bugtracker">https://github.com/ros/ros_tutorials/issues</url>
  <url type="repository">https://github.com/ros/ros_tutorials</url>
  <author>Josh Faust</author>

  <!--编译工具为catkin-->
  <buildtool_depend>catkin</buildtool_depend>

  <!--用depend来整合build_depend和run_depend-->  
  <depend>geometry_msgs</depend>
  <depend>rosconsole</depend>
  <depend>roscpp</depend>
  <depend>roscpp_serialization</depend>
  <depend>roslib</depend>
  <depend>rostime</depend>
  <depend>std_msgs</depend>
  <depend>std_srvs</depend>

  <!--build_depend标签未变-->
  <build_depend>qtbase5-dev</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>qt5-qmake</build_depend>

  <!--run_depend要改为exec_depend-->
  <exec_depend>libqt5-core</exec_depend>
  <exec_depend>libqt5-gui</exec_depend>
  <exec_depend>message_runtime</exec_depend>
</package>

Metapacakge介绍

将多个功能接近、甚至相互依赖的软件包的放到一个集合中去。(在Hydro之前为Stack,Hydro之后就是Metapackage。尽管换了个马甲,但作用没变,都是把一些相近的功能模块、软件包放到一起。)没有实质的内容,但是指明了依赖,名称与包名相同

常见的Metapacakge有:
Metapacakge名称 描述 链接
navigation 导航相关的功能包集 https://github.com/ros-planning/navigation
moveit 运动规划相关的(主要是机械臂)功能包集 https://github.com/ros-planning/moveit
image_pipiline 图像获取、处理相关的功能包集 https://github.com/ros-perception/image_common
vision_opencv ROS与OpenCV交互的功能包集 https://github.com/ros-perception/vision_opencv
turtlebot Turtlebot机器人相关的功能包集 https://github.com/turtlebot/turtlebot
pr2_robot pr2机器人驱动功能包集 https://github.com/PR2/pr2_robot

以navigation为例:

navigation Metapackage:

包名 功能
navigation Metapacakge,依赖以下所有pacakge
amcl 定位
fake_localization 定位
map_server 提供地图
move_base 路径规划节点
nav_core 路径规划的接口类
base_locak 局部规划
dwa_local_planner 局部规划

navigation:
ROS学习笔记(二) package介绍_第3张图片

navigation就是一个简单的pacakge,里面只有几个文件,但由于它依赖了其他所有的软件包。Catkin编译系统会知道这些软件包都属于navigation metapacakge。

metapackage 中 CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.3)
project(navigation)
find_package(catkin REQUIRED)
catkin_metapackage()#声明本软件包是一个metapacakge

package.xml:

<package>
    <name>ros_academy_for_beginners</name>
    <version>17.12.4</version>
    <description>
        --------------------------------------------------------------------------
        A ROS tutorial for beginner level learners. This metapacakge includes some
        demos of topic, service, parameter server, tf, urdf, navigation, SLAM...
        It tries to explain the basic concepts and usages of ROS.
        --------------------------------------------------------------------------
    </description>
    <maintainer email="[email protected]">Chai Changkun</maintainer>
    <author>Chai Changkun</author>
    <license>BSD</license>  
    <url>http://http://www.droid.ac.cn</url>

    <buildtool_depend>catkin</buildtool_depend>

    <run_depend>navigation_sim_demo</run_depend>  <!--注意这里的run_depend标签,将其他软件包都设为依赖项-->
    <run_depend>param_demo</run_depend>
    <run_depend>robot_sim_demo</run_depend>
    <run_depend>service_demo</run_depend>
    <run_depend>slam_sim_demo</run_depend>
    <run_depend>tf_demo</run_depend>
    <run_depend>topic_demo</run_depend>

    <export>    <!--这里需要有export和metapacakge标签,注意这种固定写法-->
        <metapackage/>
    </export>
</package>

metapacakge中的以上两个文件和普通pacakge不同点是:

CMakeLists.txt:加入了catkin_metapackage()宏,指定本软件包为一个metapacakge。
package.xml:标签将所有软件包列为依赖项,标签中添加标签声明。

metapacakge在我们实际开发一个大工程时可能有用

package中其他文件:

launch文件:

launch文件一般以.launch或.xml结尾,指定启动的package、参数和一些管理控制的命令,对需要运行的程序打包,通过一句命令来启动。

msg/srv/action文件

自定义的消息、服务、动作文件,程序发布至设计的数据结构,以.msg,.srv,.action结尾,一般放在package的 msg/srv/action 路径下。

urdf/xacro文件

urdf/xacro文件是机器人模型的描述文件,以.urdf 或.xacro结尾,定义了群机器人的关节、连杆信息,以及他们之间的位置、角度等信息,通过urdf文件讲机器人的物理链接信息表示出来,并在gazebo等仿真软件中显示出来。

yaml文件

储存了ROS需要加载的参数信息和属性配置。一般在launch文件或程序中读取.yaml文件,把参数加载到服务器上,一般存放在param/路径下

dae/stl文件

3D模型文件,描述了机器人的三维模型,urdf或仿真环境通常会引用此类文件。dae/stl可以定义更为复杂的模型(urdf文件简单定义),可以直接从建模软件导出机器人装配模型,从而显示出更加精确的外形。

rviz文件

储存了RViz窗口的配置(显示哪些控件、视角、参数)。通常rviz文件直接在RViz工具里保存,下次运行时直接读取。

你可能感兴趣的:(ROS学习笔记,linux)