课程简介--手动创建ROS功能包
友情提醒
:在进行本课程学习前,请先完成ROS机器人操作系统的安装、配置与初级教程的学习。
大多数客户端 API 的使用教程可以在相关功能包如roscpp、rospy、roslisp 中找到。
本课程主要有如下要点:
-
手动创建ROS功能包
-
管理系统依赖项
-
roslaunch在大型项目中的使用技巧
本教程主要介绍roslaunch在大型项目中的使用技巧。重点关注如何构建launch文件使得它能够在不同的情况下重复利用。我们将使用2dnav_pr2功能包作为学习案例。链接如下:中文英文
-
ROS在多机器人上的使用
本教程将展示如何在两台机器上使用ROS系统,详述了使用ROS_MASTER_URI配置多台机器使用同一个master。链接如下:中文英文
-
自定义消息
-
在python中使用C++类
-
将ROS项目进行打包
本教程介绍如何快速打包和部署ROS项目。链接如下:英文
-
如何编写教程
友情提示
:在进行本教程学习之前,请先完成ROS机器人操作系统的安装、配置与初级教程。(课程链接)同时,确保第1课第5节的测试全部正常。
ros_ws教程功能包介绍
首先,进入到ros_ws文件下:
cd /opt/ros_ws/src
-
ros_tutorials: ROS初级教程功能包,内容如下图所示:
-
urdf_tutorials: ROS URDF教程功能包,分别包括在rviz和Gazebo中进行机器人建模,内容如下图所示:
-
visualization_tutorials: 可视化教程功能包,在rviz中进行多种可视化操作,内容如下图所示:
-
geometry_tutorials: tf/tf2教程功能包(坐标变换),内容如下图所示:
-
common_tutorials: 这个教程功能包是一个集合,包括actionlib、nodelet、pluginlib和turtle-actionlib四个教程,内容如下图所示:
-
navigation_tutorials: 导航功能包,内容如下图所示:
以上功能包均可以参考初级教程进行配置,配置完成后即可进行练习调试,上述内容将作为专题教程进行课程设计,在完成中级教程之后,可以参考ROS官网文档自主学习或在实验楼等待ROS专题课程更新后学习。
课程亦可参考官网文档。
手动创建ROS功能包
课程描述: 本教程将展示如何手动创建ROS功能包
课程难度: 中级
下节内容: 管理系统依赖项
如果在实验过程中遇到问题,请参考这篇实验报告,推荐先自行判断问题并解决。
我们可以使用(catkin_create_pkg)工具来自动创建ROS功能包,不过,接下来你就会发现,这不是什么难事。 roscreate-pkg节省精力避免错误,但功能包只不过就是一个文件夹外加一个XML文件。
我们需要手动创建如下两个文件CMakeList.txt
和package.xml
:
现在,我们要手动创建一个名为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配置正确,你将会看到类似如下的信息:/home/user/catkin_ws/src/foobar
。 这就是ROS如何在后台寻找功能包的机理。
应该注意到我们刚才所创建的功能包依赖于roscpp和std_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文件。