ROS Tutorials 初级教程学习总结 1 - 4

ROS wiki 教程

1. 安装并配置ROS环境

1.1 安装ROS

见另一篇博客 Ubuntu16.04 ROS-Kinetic 安装

1.2 管理环境

通过类似apt的软件包管理器安装ROS软件包时会生成setup.*sh文件,*如果是通过 Ubuntu 上的 apt 工具来安装ROS的,那么将会在 ‘/opt/ros/<版本名>/’ 目录中看到 setup.sh 文件。如果是kinetic版本,则执行

$ souce /opt/ros/kinetic/setup.bash

在每次打开终端时都需要先运行上面这条命令后才能运行ros相关的命令,为了避免这一繁琐过程,可以事先在 .bashrc 文件中添加这条命令。

1.3 创建ROS工作空间

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
  • 对于python3用户,在一个空的catkin工作空间第一次运行catkin_make的命令为

$ catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3

  • source devel文件夹中的setup.*sh文件,可以将当前工作空间设置在ROS工作环境的最顶层。

$ souce devel/setup.bash

查看工作空间配置是否正确,需确保ROS_PACKAGE_PATH环境变量包含你的工作空间目录。ROS_PACKAGE_PATH 环境变量应该包含那些保存有 ROS 软件包的路径,并且每个路径之间用冒号分隔开来。

$ echo $ROS_PACKAGE_PATH
/home/<youruser>/catkin_ws/src:/opt/ros/kinetic/share

2. ROS文件系统

2.1 文件系统概念

  • Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
  • Manifest (package.xml): 清单,是对于’软件包’相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。

2.2 文件系统工具

  • rospack 返回软件包的路径信息
$ rospack find [包名称]
$ rospack find roscpp
/opt/ros/kinetic/share/roscpp
  • roscdrosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。 roscd 也可以切换到一个软件包或软件包集的子目录中。
$ roscd roscpp
$ pwd
/opt/ros/kinetic/share/roscpp
$ roscd roscpp/cmake
$ pwd
/opt/ros/kinetic/share/roscpp/cmake
  • rosls 直接按软件包的名称执行ls命令
$ rosls [本地包名称[/子目录]]

3. 创建ROS程序包


3.1 一个catkin程序包由什么组成?

  • 该程序包必须包含catkin compliant package.xml文件
    • 这个package.xml文件提供有关程序包的元信息。
  • 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
  • 每个目录下只能有一个程序包。
    • 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。

3.2 catkin工作空间结构

workspace_folder/        -- WORKSPACE
  src/                   -- SOURCE SPACE
    CMakeLists.txt       -- 'Toplevel' CMake file, provided by catkin
    package_1/
      CMakeLists.txt     -- CMakeLists.txt file for package_1
      package.xml        -- Package manifest for package_1
    ...
    package_n/
      CMakeLists.txt     -- CMakeLists.txt file for package_n
      package.xml        -- Package manifest for package_n

3.3 创建一个catkin程序包

  • 使用catkin_create_pkg命令来创建一个名为beginner_tutorials的新程序包,这个程序包依赖于std_msgsroscpprospy
$ cd ~/catkin_ws/src
$ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

catkin_create_pkg命令也有更多的高级功能,这些功能在catkin/commands/catkin_create_pkg中有描述

3.4 程序包依赖关系

  • 使用rospack命令工具来查看一级依赖包
$ rospack depends1 beginner_tutorials
roscpp
rospy
std_msgs

# 依赖包被保存在package.xml文件中
$ roscd beginner_tutorials
$ cat package.xml
<package>
...
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
...
</package>
  • 很多情况下一个依赖包还会有它自己的依赖包,可以依次使用rospack depends1查找
  • 可以使用rospack depends递归检测所有的依赖包

3.5 自定义自己的程序包

3.5.1 自定义 package.xml
  • 描述标签
  <name>beginner_tutorials</name>
  <version>0.0.0</version>
  <description>The beginner_tutorials package</description>
  • 维护者标签
<!-- One maintainer tag required, multiple allowed, one person per tag --> 
<!-- Example:  -->
<!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
<maintainer email="user@todo.todo">user</maintainer>

要求填写的标签,便于发布

  • 许可标签
<!-- One license tag required, multiple allowed, one license per tag -->
<!-- Commonly used license strings: -->
<!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
<license>BSD</license>

一些常见的开源许可协议有BSD、MIT、Boost Software License、GPLv2、GPLv3、LGPLv2.1和LGPLv3。你可以在Open Source Initiative中阅读其中的若干个许可协议的相关信息。对于本教程我们将使用BSD协议,因为ROS核心组件的剩余部分已经使用了该协议

  • 依赖项标签
  <!-- The *depend tags are used to specify dependencies -->
  <!-- Dependencies can be catkin packages or system dependencies -->
  <!-- Examples: -->
  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
  <!--   <depend>roscpp</depend> -->
  <!--   Note that this is equivalent to the following: -->
  <!--   <build_depend>roscpp</build_depend> -->
  <!--   <exec_depend>roscpp</exec_depend> -->
  <!-- Use build_depend for packages you need at compile time: -->
  <!--   <build_depend>message_generation</build_depend> -->
  <!-- Use build_export_depend for packages you need in order to build against this package: -->
  <!--   <build_export_depend>message_generation</build_export_depend> -->
  <!-- Use buildtool_depend for build tool packages: -->
  <!--   <buildtool_depend>catkin</buildtool_depend> -->
  <!-- Use exec_depend for packages you need at runtime: -->
  <!--   <exec_depend>message_runtime</exec_depend> -->
  <!-- Use test_depend for packages you need only for testing: -->
  <!--   <test_depend>gtest</test_depend> -->
  <!-- Use doc_depend for packages you need only for building documentation: -->
  <!--   <doc_depend>doxygen</doc_depend> -->
  
  <buildtool_depend>catkin</buildtool_depend>
  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>

除了catkin中默认提供的buildtool_depend,所有我们列出的依赖包都已经被添加到build_depend标签中。在本例中,因为在编译和运行时我们需要用到所有指定的依赖包,因此还需要将每一个依赖包分别添加到run_depend标签中:

<exec_depend>roscpp</exec_depend>
<exec_depend>rospy</exec_depend>
<exec_depend>std_msgs</exec_depend>

在学习了这些标签的含义后,可以对package.xml进行剪裁整理,使其更加简洁明了!

3.5.2 自定义 CMakeLists.txt

4. 编译ROS程序包


4.1 编译程序包

catkin_make 是一个命令行工具,简化了catkin的标准工作流程。可以认为catkin_make是在CMake标准工作流程中依次调用了cmakemake

# In a catkin workspace ~/catkin_ws
$ catkin_make
$ catkin_make install  # (可选)

catkin_make首先输出它所使用到的每个空间所在的路径, 由于这些空间存在默认配置的原因,有几个文件夹已经在catkin工作空间自动生成了,即 builddevel

  • build 目录是build space的默认所在位置同时cmakemake也是在这里被调用来配置并编译你的程序包。
  • devel 目录是devel space的默认所在位置, 同时也是在你安装程序包之前存放可执行文件和库文件的地方。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪突猛进!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值