【无人水面艇路径跟随控制3】(C++)USV代码阅读: ROS包的构建和管理:包的依赖关系、包含目录、库文件以及链接库
- 写在最前面
- ROS是什么
- CMakeLists.txt
- 总结
- 详细解释
- CMake最低版本和项目名称
- 编译选项
- 查找catkin包
- catkin包配置
- 包含目录
- 添加库
- 链接库
- package.xml
- 总结
- 详细解释
- XML声明
- 包格式和基本信息
- 维护者信息
- 许可证信息
- 可选的URL标签
- 可选的作者标签
- 依赖关系
写在最前面
阅读代码:https://github.com/USE-jx/USV_path_follow/tree/main
usv path follow:无人水面艇路径跟随
trajectory tracking:轨迹跟踪
ROS是什么
ROS(机器人操作系统,Robot Operating System)是一个用于机器人软件开发的开源框架。它提供了一系列工具、库和约定,简化了复杂机器人应用的创建。以下是ROS的一些关键特性:
- 消息传递:ROS使用发布/订阅(publish/subscribe)模式进行消息传递,允许不同节点(独立的进程)之间进行通信。
- 工具集:ROS提供了丰富的工具集,如
rviz
(可视化工具)、rosbag
(数据记录和回放工具)等,帮助开发者调试和测试机器人应用。 - 硬件抽象:ROS提供了硬件抽象层,使得开发者可以在不同的硬件平台上运行相同的代码。
- 包管理:ROS使用包(package)来组织代码,每个包可以包含节点、库、配置文件等。
- 社区支持:ROS有一个庞大的开发者社区,提供了大量的开源包和文档,帮助开发者快速上手。
ROS主要由以下几个部分组成:
- ROS核心(roscore):提供名称服务、参数服务器和消息传递等核心功能。
- ROS客户端库:如
roscpp
(C++客户端库)、rospy
(Python客户端库)等,帮助开发者编写ROS节点。 - ROS工具:如
rviz
、rqt
、rosbag
等,帮助开发者调试和测试机器人应用。
总之,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_msgs
、nav_msgs
、roscpp
、std_msgs
和tf2
。
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>
:定义包的许可证信息。每个包至少需要一个许可证标签。这里需要替换为实际的许可证类型,如BSD
、MIT
等。
可选的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欸 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。
欢迎大家添加好友交流。