【ROS入门教程】---- 05 ROS工作空间与功能包

在这里插入图片描述

正如其他软件的学习一样,ROS的入门也需要从建立项目开始,对于ROS来说,项目初始需要首先创建工作空间,编译生成文件夹后创建功能包,然后继续通过命令行,或者编程通过代码实现目标作用,本节博客主要介绍第一部分的内容,并简要介绍工作空间各文件的作用。

一、工作空间

1. 创建工作空间

  • 创建文件夹:mkdir -p ~/catkin_ws/src
    在上述命令中catkin_ws,就是工作空间的名字,在后续的课程中均会涉及到此名称,故也可以自行使用合适的名字,src是放置功能包的文件夹,用于存放源代码。
  • 切换到src文件夹:cd ~catkin_ws/src
  • 创建工作空间:catkin_init_workspace

命令行输出提示:

Creating symlink "/home/zhaoxu/project/ROS/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/noetic/share/catkin/cmake/toplevel.cmake"
  • 切换到工作目录:cd ~/catkin_ws/
  • 编译工作空间:catkin_make
    这里的catkin要注意与工作空间名称无关,属于固定命令,在编译后命令行指示如下:
    在这里插入图片描述
  • 生成install文件夹:catkin_make install
    这里的指令只是为了率先创建install文件,本质上无意义。

2. 设置环境变量

  • 一般做法:需要在每次打开终端时重新载入
source devel/setup.bash
  • 一劳永逸:在.bashrc文件中加入固定路径,无需重新source
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
  • 查询环境变量:echo $ROS_PACKAGE_PATH
    结果如下图,则证明修改成功
    在这里插入图片描述

3. 工作空间介绍

在这里插入图片描述

  • src:代码空间,Source Space,用于放置功能包(代码、配置文件、launch文件);
  • build:编译空间,Build Space,用于放置中间文件、二进制文件等;
  • devel:开发空间,Development Space,用于放置编译生成的可执行文件、脚本、库等;
  • install:安装空间,Install Space,用于放置安装好的文件;

二、功能包

1. 创建并编译功能包

  • 切换到指定目录:cd ~/catkin_ws/src
  • 创建功能包:catkin_create_pkg pkg_ts std_msgs rospy roscpp

标准指令:catkin_create_pkg <package_name> [depend1] [depend2] …
即使用catkin_create_pkg指令创建功能包,依赖于上述三个依赖项

在这里插入图片描述

  • 切换到工作空间目录:cd ~catkin_ws
  • 编译功能包:catkin_make

注意:同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包

2. 功能包文件解析

在这里插入图片描述

  • include:用于放置头文件
  • src:用于放置源文件
  • CMakelist.txt:编译配置文件,描述功能包的编译规则
  • package.xml:功能包列表文件,包含name、version、描述信息、author email、depend、license等

这里我们重点介绍后两者:

1)CMakelist.txt

  • 文件作用:CMakeList.txt文件是CMake编译系统编译软件包过程的输入文件。任何CMake兼容包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何编译代码以及将其安装到哪里。将CMakeLists.txt文件应用于一个catkin项目时,它就作为一个标准的附带一些限制条件的vanilla CMakeLists.txt文件。使用CMake编译程序时,cmake指令依据 CMakeLists.txt文件生成makefiles文件,make命令再依据makefiles文件编译链接生成可 执行文件

  • 补充知识:catkin_make,实际上就是ROS的编译系统将cmake和make统一的封装起来的指令,故本质上仍是利用cmake和make进行编译的过程。

  • 顺序结构分析:

在这里插入图片描述

  1. CMake版本:cmake_minimum_required(VERSION 3.0.2)
  2. 软件包名称:project(pkg_ts)
  3. 声明依赖库:find_package()

在这里插入图片描述

  1. 启动python模块支持:catkin_python_package()

在这里插入图片描述

  1. 消息/服务/操作(Message/Service/Action)生成器: add_message_files(),add_service_files(),add_action_files()

在这里插入图片描述

  1. 调用消息/服务/操作生成:generate_messages()

在这里插入图片描述

  1. 动态重新配置参数:generate_dynamic_reconfigure_options() ,cfg配置文件,用于配置一些rviz格式,记录一些配置参数等

在这里插入图片描述

  1. 指定包编译信息导出:catkin_package()

在这里插入图片描述

  1. 重点:添加要编译的库和可执行文件:add_library()/add_executable()/target_link_libraries()

在这里插入图片描述

  1. 安装规则:install()

在这里插入图片描述

  1. 测试编译[配置:catkin_add_gtest()

2)package.xml

这里的具体讲解以代码内为主,可见下方解释:

<?xml version="1.0"?> 
<!‐‐ 当前xml版本 ‐‐> 
<package format="2"> 
<name>learning_cplus</name> 
<!‐‐ 功能包名称是learning_cplus,name,名称 ‐‐> 
<version>0.0.0</version> 
<!‐‐ 当前功能包版本是0.0.0,version,版本‐‐> 
<description>The learning_cplus package</description> 
<!‐‐ 当前功能包介绍,description,详细 ‐‐> 
<maintainer email="waveshare@todo.todo">waveshare</maintainer> 
<!‐‐ 当前维护者者信息(邮箱和昵称)‐‐>
<!‐‐ BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3  >
<license>TODO</license> 
<!‐‐ 协议版本,默认TODO就可以。有兴趣可以自行了解。‐‐> 
<!‐‐ <url type="website">http://wiki.ros.org/learning_cplus</url> ‐‐> 
<!‐‐ 可共享路径,你可以把你的这个包上传到ROS社区或者github。‐‐> 
<author email="jane.doe@example.com">Jane Doe</author> 
<!‐‐ 当前开发者信息(邮箱和昵称)‐‐> 
<!‐‐ 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 ag ainst 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 documentati on: ‐‐> 
<!‐‐ <doc_depend>doxygen</doc_depend> ‐‐> 
<buildtool_depend>catkin</buildtool_depend> 
<!‐‐编译工具是catkin ‐‐> 
<build_depend>roscpp</build_depend> 
<!‐‐编译依赖roscpp ‐‐> 
<build_depend>rospy</build_depend> 
<!‐‐编译依赖rospy ‐‐> 
<build_depend>std_msgs</build_depend> 
<!‐‐编译依赖std_msgs ‐‐>
<build_export_depend>roscpp</build_export_depend> 
<!‐‐编译输出依赖roscpp ‐‐>
<build_export_depend>rospy</build_export_depend> 
<!‐‐编译输出依赖rospy ‐‐> 
<build_export_depend>std_msgs</build_export_depend> 
<!‐‐编译输出依赖std_msgs ‐‐> 
<exec_depend>roscpp</exec_depend> 
<!‐‐运行依赖roscpp ‐‐> 
<exec_depend>rospy</exec_depend> 
<!‐‐运行依赖rospy ‐‐> 
<exec_depend>std_msgs</exec_depend>
<!‐‐运行依赖std_msgs ‐‐> 
<!‐‐ The export tag contains other, unspecified, tags ‐‐> 
<export> 
<!‐‐ Other tools can request additional information be placed here ‐‐>

<!‐‐ 输出 ‐‐> 
</export> 
</package>

总结

本文主要介绍了工作空间、功能包的基本内容,以及二者的创建与编译过程;并深入分析了CMakelist.txt与package.xml的具体内容,博客内容参考了古月居的ROS入门21讲和微雪课堂的ROS基础系列教程,下一篇博客将主要介绍如何使用小海龟测试分析各指令的实际作用,并简单测试编程代码的使用,敬请期待。

在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

生如昭诩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值