【无人水面艇路径跟随控制3】(C++)USV代码阅读: ROS包的构建和管理:包的依赖关系、包含目录、库文件以及链接库

news/2024/10/6 22:06:03 标签: c++, 开发语言, 目标跟踪, 无人机

【无人水面艇路径跟随控制3】(C++)USV代码阅读: ROS包的构建和管理:包的依赖关系、包含目录、库文件以及链接库

  • 写在最前面
  • ROS是什么
  • CMakeLists.txt
    • 总结
    • 详细解释
      • CMake最低版本和项目名称
      • 编译选项
      • 查找catkin包
      • catkin包配置
      • 包含目录
      • 添加库
      • 链接库
  • package.xml
    • 总结
    • 详细解释
      • XML声明
      • 包格式和基本信息
      • 维护者信息
      • 许可证信息
      • 可选的URL标签
      • 可选的作者标签
      • 依赖关系


请添加图片描述

🌈你好呀!我是 是Yu欸
🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~
🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长!

写在最前面

阅读代码:https://github.com/USE-jx/USV_path_follow/tree/main

usv path follow:无人水面艇路径跟随
trajectory tracking:轨迹跟踪

请添加图片描述

ROS是什么

ROS(机器人操作系统,Robot Operating System)是一个用于机器人软件开发的开源框架。它提供了一系列工具、库和约定,简化了复杂机器人应用的创建。以下是ROS的一些关键特性:

  1. 消息传递:ROS使用发布/订阅(publish/subscribe)模式进行消息传递,允许不同节点(独立的进程)之间进行通信。
  2. 工具集:ROS提供了丰富的工具集,如rviz(可视化工具)、rosbag(数据记录和回放工具)等,帮助开发者调试和测试机器人应用。
  3. 硬件抽象:ROS提供了硬件抽象层,使得开发者可以在不同的硬件平台上运行相同的代码。
  4. 包管理:ROS使用包(package)来组织代码,每个包可以包含节点、库、配置文件等。
  5. 社区支持:ROS有一个庞大的开发者社区,提供了大量的开源包和文档,帮助开发者快速上手。

ROS主要由以下几个部分组成:

  • ROS核心(roscore):提供名称服务、参数服务器和消息传递等核心功能。
  • ROS客户端库:如roscpp(C++客户端库)、rospy(Python客户端库)等,帮助开发者编写ROS节点。
  • ROS工具:如rvizrqtrosbag等,帮助开发者调试和测试机器人应用。

总之,ROS是一个强大的机器人软件开发框架,广泛应用于学术研究和工业界。

CMakeLists.txt

motion_control\guidance\los_guidance\CMakeLists.txt

这个文件 CMakeLists.txt 是一个CMake构建脚本,定义了如何构建和配置名为 los_guidance 的ROS包。

总结

这个CMake构建脚本配置了一个名为 los_guidance 的ROS包,定义了包的依赖关系、包含目录、库文件以及链接库。通过这些配置,可以确保项目在编译时正确地找到所需的头文件和库文件,并生成所需的目标库。

详细解释

以下是代码的详细解释:

CMake最低版本和项目名称

cmake_minimum_required(VERSION 3.0.2)
project(los_guidance)
  • cmake_minimum_required(VERSION 3.0.2):指定CMake的最低版本要求为3.0.2。
  • project(los_guidance):定义项目名称为 los_guidance

编译选项

add_compile_options(-std=c++11)
  • add_compile_options(-std=c++11):添加编译选项,指定使用C++11标准进行编译。

查找catkin包

find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  nav_msgs
  roscpp
  std_msgs
  tf2
)
  • find_package(catkin REQUIRED COMPONENTS ...):查找并加载catkin包及其依赖的组件,包括 geometry_msgsnav_msgsroscppstd_msgstf2

catkin包配置

catkin_package(
  INCLUDE_DIRS include
#  LIBRARIES los_guidance
  CATKIN_DEPENDS geometry_msgs nav_msgs roscpp std_msgs tf2
#  DEPENDS system_lib
)
  • catkin_package(...):生成CMake配置文件,并声明该包对其他依赖包的依赖关系。
    • INCLUDE_DIRS include:包含头文件的目录。
    • CATKIN_DEPENDS geometry_msgs nav_msgs roscpp std_msgs tf2:该项目依赖的catkin包。

包含目录

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)
  • include_directories(...):指定头文件的额外位置,确保项目的头文件目录在其他目录之前。
    • include:当前项目的头文件目录。
    • ${catkin_INCLUDE_DIRS}:catkin包的头文件目录。

添加库

add_library(${PROJECT_NAME}
  src/set_of_los.cpp
)
  • add_library(${PROJECT_NAME} src/set_of_los.cpp):定义并添加一个库,库的源文件是 src/set_of_los.cpp${PROJECT_NAME}los_guidance

链接库

target_link_libraries(${PROJECT_NAME}
  ${catkin_LIBRARIES}
)
  • target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES}):指定该库需要链接的其他库,这里是catkin包的库。

package.xml

motion_control\guidance\los_guidance\package.xml

这个文件 package.xml 是一个ROS包的描述文件,定义了包的元数据和依赖关系。

总结

这个 package.xml 文件定义了 los_guidance 包的基本信息、维护者、许可证和依赖关系。需要注意的是,某些占位符(如许可证信息)需要替换为实际内容。这个文件对于ROS包的构建和管理至关重要。

详细解释

以下是代码的详细解释:

XML声明

<?xml version="1.0"?>
  • 声明XML版本为1.0。

包格式和基本信息

<package format="2">
  <name>los_guidance</name>
  <version>0.0.0</version>
  <description>The los_guidance package</description>
  • <package format="2">:指定包的格式版本为2。
  • <name>los_guidance</name>:定义包的名称为 los_guidance
  • <version>0.0.0</version>:定义包的版本为 0.0.0
  • <description>The los_guidance package</description>:提供包的描述信息。

维护者信息

  <!-- One maintainer tag required, multiple allowed, one person per tag -->
  <!-- Example:  -->
  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
  <maintainer email="jiaxier@todo.todo">jiaxier</maintainer>
  • <maintainer email="jiaxier@todo.todo">jiaxier</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>TODO</license>
  • <license>TODO</license>:定义包的许可证信息。每个包至少需要一个许可证标签。这里需要替换为实际的许可证类型,如 BSDMIT 等。

可选的URL标签

  <!-- Url tags are optional, but multiple are allowed, one per tag -->
  <!-- Optional attribute type can be: website, bugtracker, or repository -->
  <!-- Example: -->
  <!-- <url type="website">http://wiki.ros.org/los_guidance</url> -->
  • <url> 标签是可选的,可以包含包的相关链接,如网站、问题跟踪器或代码仓库。

可选的作者标签

  <!-- Author tags are optional, multiple are allowed, one per tag -->
  <!-- Authors do not have to be maintainers, but could be -->
  <!-- Example: -->
  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
  • <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 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> -->
  • <depend>:用于指定既是构建依赖又是运行依赖的包。
  • <build_depend>:用于指定编译时需要的包。
  • <build_export_depend>:用于指定构建时需要导出的包。
  • <buildtool_depend>:用于指定构建工具包。
  • <exec_depend>:用于指定运行时需要的包。
  • <test_depend>:用于指定仅在测试时需要的包。

hello,我是 是Yu欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家添加好友交流。


http://www.niftyadmin.cn/n/5692215.html

相关文章

安装配置pytorch(cuda、、cudnn、torch、torchvision对应版本)

参考&#xff1a; Pytorch环境配置——cuda、、cudnn、torch、torchvision对应版本&#xff08;最全&#xff09;及安装方法_cuda12.2对应的pytorch版本-CSDN博客 https://download.pytorch.org/whl/torch_stable.html Previous PyTorch Versions | PyTorch

【MySQL 08】复合查询

目录 1.准备工作 2.多表查询 笛卡尔积 多表查询案例 3. 自连接 4.子查询 1.单行子查询 2.多行子查询 3.多列子查询 4.在from子句中使用子查询 5.合并查询 1.union 2.union all 1.准备工作 如下三个表&#xff0c;将作为示例&#xff0c;理解复合查询 EMP员工表…

斗破C++编程入门系列之三十七:多态性:运算符重载的概念和规则(四星斗师)

斗破C目录&#xff1a; 斗破C编程入门系列之前言&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之二&#xff1a;Qt的使用介绍&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之三&#xff1a;数据结构&#xff08;斗之气三段&#xff09; 斗破C编程入门系列之…

Leetcode - 周赛417

目录 一&#xff0c;3304. 找出第 K 个字符 I 二&#xff0c;3305. 元音辅音字符串计数 I 三&#xff0c;3307. 找出第 K 个字符 II 一&#xff0c;3304. 找出第 K 个字符 I 本题数据范围小&#xff0c;可以直接模拟&#xff0c;代码如下&#xff1a; class Solution {publ…

pWnos1.0 靶机渗透 (Perl CGI 的反弹 shell 利用)

靶机介绍 来自 vulnhub 主机发现 ┌──(kali㉿kali)-[~/testPwnos1.0] …

数据结构 ——— 单链表oj题:移除链表中所有 val 的元素

目录 题目要求 手搓简易单链表 代码实现 题目要求 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回新的头节点 手搓简易单链表 在实现以上逻辑函数前&#xff0c;要先手搓一个单链表出来&#xff…

嵌入式知识点复习(一)

国庆倒数第二天&#xff0c;进行嵌入式课堂测试的复习&#xff1a; 第一章 绪论 1.1 嵌入式系统的概念 嵌入式系统定义 嵌入式系统定位 嵌入式系统形式 嵌入式系统三要素 嵌入式系统与桌面通用系统的区别 1.2 嵌入式系统的发展历程 微处理器的演进历史 单片机的演进历史 …

参数标准+-db和-db

-db是因为比值是相近的&#xff0c;值越进行越好&#xff0c;正负db代表两个值差异不大&#xff0c;可以分子比分母大或者分母比分子大-db代表串扰&#xff0c;分子比分母小&#xff0c;所以负db的值越小越好