ROS机器人操作系统中级教程 1

时间:2021-11-10 14:24:34

课程简介--手动创建ROS功能包

友情提醒:在进行本课程学习前,请先完成ROS机器人操作系统的安装、配置与初级教程的学习。

大多数客户端 API 的使用教程可以在相关功能包如roscpp、rospy、roslisp 中找到。

具体如下:roscpp教程rospy教程roslisp教程

本课程主要有如下要点:


  1. 手动创建ROS功能包

    本教程将展示如何手动创建ROS功能包。链接如下:中文英文

  2. 管理系统依赖项

    本教程将展示如何使用rosdep安装系统依赖项。链接如下:中文英文

  3. roslaunch在大型项目中的使用技巧

    本教程主要介绍roslaunch在大型项目中的使用技巧。重点关注如何构建launch文件使得它能够在不同的情况下重复利用。我们将使用2dnav_pr2功能包作为学习案例。链接如下:中文英文

  4. ROS在多机器人上的使用

    本教程将展示如何在两台机器上使用ROS系统,详述了使用ROS_MASTER_URI配置多台机器使用同一个master。链接如下:中文英文

  5. 自定义消息

    本教程将展示如何使用ROS消息描述语言自定义消息类型。链接如下:中文英文

  6. 在python中使用C++类

    本教程阐述一种在python中使用C++类的方法。链接如下:中文英文

  7. 将ROS项目进行打包

    本教程介绍如何快速打包和部署ROS项目。链接如下:英文

  8. 如何编写教程

    本教程介绍在编辑ros.org维基时,可以用到的模板和宏定义,并附有示例以供参考。链接如下:中文英文

友情提示:在进行本教程学习之前,请先完成ROS机器人操作系统的安装、配置与初级教程。(课程链接)同时,确保第1课第5节的测试全部正常。

ros_ws教程功能包介绍

首先,进入到ros_ws文件下:

cd /opt/ros_ws/src
  1. ros_tutorials: ROS初级教程功能包,内容如下图所示:

    ROS机器人操作系统中级教程 1

  2. urdf_tutorials: ROS URDF教程功能包,分别包括在rviz和Gazebo中进行机器人建模,内容如下图所示:

    ROS机器人操作系统中级教程 1

    ROS机器人操作系统中级教程 1

  3. visualization_tutorials: 可视化教程功能包,在rviz中进行多种可视化操作,内容如下图所示:

    ROS机器人操作系统中级教程 1

    ROS机器人操作系统中级教程 1

  4. geometry_tutorials: tf/tf2教程功能包(坐标变换),内容如下图所示:

    ROS机器人操作系统中级教程 1

    ROS机器人操作系统中级教程 1

  5. common_tutorials: 这个教程功能包是一个集合,包括actionlib、nodelet、pluginlib和turtle-actionlib四个教程,内容如下图所示:

    ROS机器人操作系统中级教程 1

    ROS机器人操作系统中级教程 1

  6. navigation_tutorials: 导航功能包,内容如下图所示:

    ROS机器人操作系统中级教程 1

    ROS机器人操作系统中级教程 1

以上功能包均可以参考初级教程进行配置,配置完成后即可进行练习调试,上述内容将作为专题教程进行课程设计,在完成中级教程之后,可以参考ROS官网文档自主学习或在实验楼等待ROS专题课程更新后学习。

课程亦可参考官网文档


手动创建ROS功能包

课程描述: 本教程将展示如何手动创建ROS功能包

课程难度: 中级

下节内容: 管理系统依赖项

如果在实验过程中遇到问题,请参考这篇实验报告,推荐先自行判断问题并解决。

我们可以使用(catkin_create_pkg)工具来自动创建ROS功能包,不过,接下来你就会发现,这不是什么难事。 roscreate-pkg节省精力避免错误,但功能包只不过就是一个文件夹外加一个XML文件。

我们需要手动创建如下两个文件CMakeList.txtpackage.xml

ROS机器人操作系统中级教程 1

现在,我们要手动创建一个名为foobar的功能包。请转至你的catkin工作区(如catkin_ws,依据实际情况确定),并确认你已经更新了setup文件。

catkin_ws $ mkdir -p src/foobar
catkin_ws $ cd src/foobar

我们要做的第一件事就是添加配置文件。package.xml 文件可使像rospack这类工具能够检测出我们所创建功能包的依赖项。

在foobar/package.xml文件里添加如下语句:

<package>
<name>foobar</name>
<version>1.2.4</version>
<description>
This package provides foo capability.
</description>
<maintainer email="foobar@foo.bar.willowgarage.com">PR-foobar</maintainer>
<license>BSD</license>

<buildtool_depend>catkin</buildtool_depend>

<build_depend>roscpp</build_depend>
<build_depend>std_msgs</build_depend>

<run_depend>roscpp</run_depend>
<run_depend>std_msgs</run_depend>
</package>

同样,你可以参考创建ROS程序包以获得更多关于catkin/package.xml的信息。

现在,你的功能包里已经包含配置文件(package.xml),ROS能够找到它。试试看,执行如下指令:

rospack find foobar

ROS机器人操作系统中级教程 1

如果ROS配置正确,你将会看到类似如下的信息:/home/user/catkin_ws/src/foobar。 这就是ROS如何在后台寻找功能包的机理。

应该注意到我们刚才所创建的功能包依赖于roscppstd_msgs。而catkin恰恰是利用这些依赖项配置所创建的功能包。

至此,我们还需要一个CMakeLists.txt文件,这样catkin_make才能够利用CMake强大的跨平台特性来编译所创建的功能包。

在foobar/CMakeLists.txt文件里输入:

cmake_minimum_required(VERSION 2.8.3)
project(foobar)
find_package(catkin REQUIRED roscpp std_msgs)
catkin_package()

这就是你想在ROS下用catkin编译功能包所要做的全部工作。当然了,如果想要让它真正的编译一些东西,你还需要学习关于CMake宏的一些知识。

请参考CMakeLists.txt以获得更多信息。回顾初级教程如(创建ROS程序包等)来修改你的package.xml和CMakeLists.txt文件。