唐山网站建设方案咨询网络营销的特点及优势

张小明 2026/1/15 14:16:37
唐山网站建设方案咨询,网络营销的特点及优势,logo制作流程,企业信用信息公示系统四川ROS 2从入门到精通系列#xff08;三#xff09;#xff1a;工作空间与包 - 创建和管理项目结构 深入理解ROS2的项目组织方式#xff0c;掌握工作空间#xff08;Workspace#xff09;和包#xff08;Package#xff09;的创建与管理。 引言 在ROS2中#xff0c;代码…ROS 2从入门到精通系列三工作空间与包 - 创建和管理项目结构深入理解ROS2的项目组织方式掌握工作空间Workspace和包Package的创建与管理。引言在ROS2中代码不是随意放置的。合理的项目结构对于大型项目开发至关重要。本文将教你如何从零开始创建和组织你的第一个ROS2项目。一、核心概念1.1 什么是工作空间Workspace工作空间是ROS2项目的根目录包含所有源代码、构建输出和安装文件。典型的工作空间结构 ros2_ws/ ← 工作空间根目录 ├── src/ ← 源代码目录 │ ├── my_robot_bringup/ ← 包1 │ ├── my_robot_driver/ ← 包2 │ └── my_robot_control/ ← 包3 ├── build/ ← CMake构建目录自动生成 ├── install/ ← 安装目录自动生成 └── log/ ← 日志目录自动生成1.2 什么是包Package包是ROS2的基本组织单元包含ROS2 Package包源代码目录src/配置文件package.xml构建配置CMakeLists.txt消息定义msg/, srv/, action/启动文件launch/资源文件param/, config/二、工作空间结构详解2.1 工作空间目录树my_robot_ws/ # 工作空间名称可自定义 │ ├── src/ # 源代码目录 │ ├── package1/ │ │ ├── src/ # C源文件目录 │ │ ├── include/ # C头文件目录 │ │ ├── launch/ # 启动文件 │ │ ├── config/ # 配置文件 │ │ ├── CMakeLists.txt # CMake构建配置C │ │ └── package.xml # 包元数据 │ │ │ └── package2/ │ ├── package2/ # Python包目录Python专用 │ │ ├── __init__.py │ │ └── nodes/ │ ├── resource/ # 资源文件 │ ├── test/ # 测试文件 │ ├── setup.py # Python安装配置 │ ├── setup.cfg # 包配置 │ ├── package.xml # 包元数据 │ └── launch/ # 启动文件 │ ├── build/ # 构建输出目录colcon生成 │ ├── package1/ │ └── package2/ │ ├── install/ # 安装目录colcon生成 │ ├── package1/ │ ├── package2/ │ └── local_setup.bash # 工作空间环境设置 │ └── log/ # 构建日志colcon生成 └── latest_build/2.2 CMakeLists.txt 的数学模型CMake构建过程可以表示为Build f ( CMakeLists.txt , 源代码 , 依赖库 ) \text{Build} f(\text{CMakeLists.txt}, \text{源代码}, \text{依赖库})Buildf(CMakeLists.txt,源代码,依赖库)其中输入源代码和依赖过程编译、链接、打包输出可执行文件、库、头文件CMakeLists.txt 的执行流程 cmake ──→ 生成 Makefiles ──→ make ──→ 编译 ──→ 安装三、创建第一个工作空间3.1 创建工作空间目录# 创建工作空间目录mkdir-p ~/ros2_ws/src# 进入工作空间cd~/ros2_ws# 查看结构tree -L2# 如果未安装tree用 ls -la目录结构ros2_ws/ └── src/3.2 初始化工作空间首先需要加载ROS2环境source/opt/ros/humble/setup.bash然后在工作空间根目录构建即使暂时没有包cd~/ros2_ws colcon build预期输出Starting execution Finished execution [0.23s]现在工作空间已初始化会生成以下目录ros2_ws/ ├── src/ ├── build/ ├── install/ └── log/3.3 配置工作空间环境每次使用工作空间都需要加载其环境设置# 临时加载仅当前终端source~/ros2_ws/install/local_setup.bash# 永久加载推荐echosource ~/ros2_ws/install/local_setup.bash~/.bashrcsource~/.bashrc四、创建第一个包4.1 使用ros2 pkg命令创建包ROS2提供了命令行工具快速创建包cd~/ros2_ws/src# 创建C包ros2 pkg create --build-type ament_cmake my_first_pkg# 或创建Python包ros2 pkg create --build-type ament_python my_py_pkg命令说明--build-type指定构建系统ament_cmake用于C项目ament_python用于Python项目4.2 查看生成的包结构C包的结构cd~/ros2_ws/src tree my_first_pkg/输出my_first_pkg/ ├── src/ ├── CMakeLists.txt ├── include/ │ └── my_first_pkg/ ├── package.xml └── README.mdPython包的结构tree my_py_pkg/输出my_py_pkg/ ├── my_py_pkg/ │ └── __init__.py ├── resource/ │ └── my_py_pkg ├── test/ │ ├── test_copyright.py │ ├── test_flake8.py │ └── test_pep257.py ├── package.xml ├── setup.py ├── setup.cfg └── README.md五、package.xml 配置详解5.1 C包的package.xml示例?xml version1.0??xml-model hrefhttp://download.ros.org/schema/package_format3.xsd schematypenshttp://www.w3.org/2001/XMLSchema?packageformat3!-- 包的基本信息 --namemy_first_pkg/nameversion0.0.1/versiondescription我的第一个ROS2包/description!-- 作者和维护者信息 --maintaineremailyour_emailexample.comYour Name/maintainerauthoremailyour_emailexample.comYour Name/author!-- 开源协议 --licenseApache-2.0/license!-- 构建系统 --buildtool_dependament_cmake/buildtool_depend!-- 编译时依赖 --build_dependrclcpp/build_dependbuild_dependstd_msgs/build_depend!-- 运行时依赖 --exec_dependrclcpp/exec_dependexec_dependstd_msgs/exec_depend!-- 测试依赖 --test_dependament_lint_auto/test_dependtest_dependament_cmake_gtest/test_depend!-- 导出依赖为其他包提供库 --exportbuild_typeament_cmake/build_type/export/package5.2 Python包的package.xml示例?xml version1.0??xml-model hrefhttp://download.ros.org/schema/package_format3.xsd schematypenshttp://www.w3.org/2001/XMLSchema?packageformat3namemy_py_pkg/nameversion0.0.1/versiondescription我的第一个ROS2 Python包/descriptionmaintaineremailyour_emailexample.comYour Name/maintainerauthoremailyour_emailexample.comYour Name/authorlicenseApache-2.0/licensebuildtool_dependament_python/buildtool_depend!-- Python包的ROS2依赖 --build_dependrclpy/build_dependexec_dependrclpy/exec_dependexec_dependstd_msgs/exec_dependtest_dependament_copyright/test_dependtest_dependament_flake8/test_dependtest_dependament_pep257/test_dependexportbuild_typeament_python/build_type/export/package5.3 依赖管理在ROS2中依赖有明确的分类包的依赖编译时依赖build_depend编译时需要运行时依赖exec_depend运行时需要构建导出依赖build_export_depend链接此包的包需要构建工具依赖buildtool_depend构建系统本身测试依赖test_depend仅测试需要常用依赖示例!-- ROS2核心库 --exec_dependrclcpp/exec_depend!-- C客户库 --exec_dependrclpy/exec_depend!-- Python客户库 --!-- 消息类型 --exec_dependstd_msgs/exec_depend!-- 标准消息 --exec_dependsensor_msgs/exec_depend!-- 传感器消息 --exec_dependgeometry_msgs/exec_depend!-- 几何消息 --!-- 常用库 --exec_dependtf2/exec_depend!-- 坐标变换 --exec_dependcv_bridge/exec_depend!-- ROS-OpenCV桥接 --六、CMakeLists.txt 配置详解C6.1 最小的CMakeLists.txt示例cmake_minimum_required(VERSION 3.8) project(my_first_pkg) # 设置C标准 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() # 找到ROS2构建依赖 find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED) # 创建可执行文件 add_executable(my_node src/main.cpp) ament_target_dependencies(my_node rclcpp std_msgs) # 安装可执行文件 install(TARGETS my_node DESTINATION lib/${PROJECT_NAME} ) # 安装启动文件 install(DIRECTORY launch DESTINATION share/${PROJECT_NAME} ) # 标记包已安装 ament_package()6.2 CMake构建流程数学模型CMake构建链 源代码(*.cpp, *.h) ↓ CMakeLists.txt (find_package, add_executable) ↓ 编译器 (g, clang) ↓ 目标文件 (*.o) ↓ 链接器 (ld) ↓ 可执行文件 (在 build/ 中) ↓ Install 步骤 ↓ 最终文件 (在 install/ 中) 时间复杂度O(n) 其中 n 是源文件数量七、构建和编译工作空间7.1 完整的编译流程cd~/ros2_ws# 1. 构建所有包colcon build# 2. 仅构建特定包colcon build --packages-select my_first_pkg# 3. 使用并行编译加快速度colcon build --parallel-workers4# 4. 构建时显示详细信息colcon build --symlink-install --event-handlers console_direct# 5. 清理构建colcon clean build7.2 colcon命令参数说明参数说明例子--packages-select仅构建指定包colcon build --packages-select pkg1 pkg2--packages-skip跳过某些包colcon build --packages-skip test_pkg--parallel-workers N并行工作数colcon build --parallel-workers 4--symlink-install符号链接快速迭代colcon build --symlink-install--cmake-args传递CMake参数colcon build --cmake-args -DCMAKE_BUILD_TYPERelease7.3 预期输出$ colcon build Startingmy_first_pkg Finishedmy_first_pkg[1.23s]Summary:1package finished[1.23s]八、工作空间的环境配置8.1 激活工作空间每次开启新终端都需要激活工作空间# 方式1仅加载工作空间source~/ros2_ws/install/local_setup.bash# 方式2同时加载ROS2基础环境和工作空间source/opt/ros/humble/setup.bashsource~/ros2_ws/install/local_setup.bash# 永久激活推荐echosource /opt/ros/humble/setup.bash~/.bashrcechosource ~/ros2_ws/install/local_setup.bash~/.bashrcsource~/.bashrc8.2 验证环境配置# 检查ROS2相关环境变量echo$ROS_PACKAGE_PATHecho$ROS_DISTRO# 检查工作空间包是否可见ros2 pkg list|grepmy_first_pkg# 应该输出my_first_pkg九、多包工作空间的依赖管理9.1 包之间的依赖关系创建多个包的示例场景cd~/ros2_ws/src# 创建包ros2 pkg create --build-type ament_cmake driver_pkg ros2 pkg create --build-type ament_cmake controller_pkg ros2 pkg create --build-type ament_cmake app_pkg依赖关系图depends ondepends onusesusesusesapp_pkg应用层controller_pkg控制层driver_pkg驱动层std_msgs/geometry_msgs标准消息库9.2 配置包间依赖在controller_pkg/package.xml中添加对driver_pkg的依赖exec_dependdriver_pkg/exec_depend在app_pkg/package.xml中添加exec_dependdriver_pkg/exec_dependexec_dependcontroller_pkg/exec_depend9.3 构建依赖顺序colcon会自动分析依赖关系按正确顺序构建构建顺序driver_pkg → controller_pkg → app_pkg $ colcon build --parallel-workers 4 Starting driver_pkg Finished driver_pkg [1.10s] Starting controller_pkg Finished controller_pkg [1.20s] Starting app_pkg Finished app_pkg [1.30s] Summary: 3 packages finished [3.60s]十、工作空间的最佳实践10.1 目录结构规范robot_ws/ ├── src/ │ ├── robot_bringup/ # 机器人启动包 │ │ └── launch/ │ ├── robot_description/ # 机器人描述URDF │ │ ├── urdf/ │ │ └── meshes/ │ ├── robot_driver/ # 硬件驱动层 │ │ ├── src/ │ │ └── include/ │ ├── robot_control/ # 控制层 │ │ ├── src/ │ │ └── config/ │ └── robot_apps/ # 应用层 │ ├── vision_pkg/ │ ├── planning_pkg/ │ └── navigation_pkg/ ├── build/ ├── install/ └── log/10.2 包命名规范规范示例说明小写英文robot_driver避免大小写混用用下划线分隔lidar_driver不用驼峰式描述性名称motor_control清楚表明功能层级前缀robot_xx_driver表明所属系统10.3 版本管理在工作空间根目录初始化git仓库cd~/ros2_wsgitinitgitconfig user.nameYour Namegitconfig user.emailyour_emailexample.com# 创建.gitignorecat.gitignoreEOF build/ install/ log/ *.pyc __pycache__/ .vscode/ .idea/ EOFgitaddsrc/gitcommit -mInitial commit: ROS2 workspace十一、常见问题排查问题1找不到包Package not found# 症状$ colcon build --packages-select my_first_pkg Could notfindpackage my_first_pkg# 解决方案# 1. 检查包是否在src/下ls~/ros2_ws/src/# 2. 重新激活环境source~/ros2_ws/install/local_setup.bash# 3. 刷新包索引colcon build --packages-select my_first_pkg问题2依赖找不到Could not find dependency# 症状CMake Error: Could notfinddependency: rclcpp# 解决方案# 1. 检查ROS2是否加载source/opt/ros/humble/setup.bash# 2. 安装缺失的包sudoaptinstallros-humble-rclcpp# 3. 重新构建colcon clean build colcon build问题3符号不被识别# 症状编译错误undefined reference to...# 解决方案检查CMakeLists.txt中是否正确链接库ament_target_dependencies(my_node rclcpp std_msgs)# ✅ 正确# 或使用target_link_librariestarget_link_libraries(my_node some_lib)# ✅ 正确十二、完整的快速参考从零开始的完整步骤# 1. 创建工作空间mkdir-p ~/ros2_ws/srccd~/ros2_ws# 2. 初始化colcon build# 3. 创建C包cd~/ros2_ws/src ros2 pkg create --build-type ament_cmake my_cpp_pkg# 4. 创建Python包ros2 pkg create --build-type ament_python my_py_pkg# 5. 构建cd~/ros2_ws colcon build --symlink-install# 6. 激活工作空间source~/ros2_ws/install/local_setup.bash# 7. 验证ros2 pkg list|grepmy_十三、本文要点总结✅工作空间项目根目录包含src、build、install目录✅包ROS2基本组织单元包含源码、配置和元数据✅关键文件package.xml- 包的元数据和依赖声明CMakeLists.txt- 构建系统配置Csetup.py- 安装配置Python✅构建工具colcon用于构建整个工作空间✅环境配置需要source相应的setup.bash文件激活下一篇预告《ROS2从入门到精通系列四节点与话题 - 发布-订阅通信实战》 记住工作空间结构是后续所有开发的基础。别跳过这一步
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

山东建设局网站电工网站页面静态化方案

百度指数分析:Qwen3-VL-8B相关搜索趋势上升原因 在AI技术加速落地的今天,一个有趣的现象正在发生:百度指数显示,“Qwen3-VL-8B”及相关关键词的搜索热度在过去一个月内持续攀升。这并非偶然——背后是开发者和企业对实用、高效、可…

张小明 2026/1/5 2:33:16 网站建设

曲阜文化建设示范区网站河北网站建设制作

概述 目前主要在AI-coding和垂直领域Agent上有一些实践经验。AI-coding 代码生成0-1的项目骨架搭建以及文档生成 通过提示词工程,定义编码风格以及原则、技术栈以及依赖组件的版本信息、代码工程的结构、各模块的解释说明、以及基于few-shot的代码示例,能…

张小明 2026/1/5 14:39:53 网站建设

网站设计怎么弄wordpress自动部署

文是我读ARM手册时根据自己的理解做的一些记录虚拟地址(VA)到物理地址(PA)的转换是由 MMU(内存管理单元) 和 页表机制完成的。具体过程如何我举例分享一下我的理解ARM64 虚拟地址结构(假设 4KB …

张小明 2026/1/5 19:34:04 网站建设

株洲网站搜索优化网站制作农业

系统简介 本课题设计了基于STM32F103C6T6单片机为主控核心的居室安全报警系统。为了解决家庭居室的安全监控,通过温湿度芯片SHT30、烟雾传感器MQ-2、天然气传感器MQ-4来获取居室的温湿度、烟雾、天然气含量,使用了一个热释电传感器、菲涅耳透镜、红外传感…

张小明 2026/1/11 9:31:08 网站建设

邳州市建设局官方网站衡水网站设计

在数字化转型浪潮中,二维码已成为连接物理世界与数字世界的重要桥梁。作为Vue.js生态中专为二维码扫描设计的组件库,Vue-QRCode-Reader通过技术创新为开发者提供了完整的解决方案。本文将深入剖析其技术架构、性能优化策略及实际应用场景,助你…

张小明 2026/1/3 20:00:49 网站建设

网站建设及推广服务的合同范本央企网站开发

【Windows神器】B站UWP客户端:告别卡顿,开启桌面观影新纪元 【免费下载链接】BiliBili-UWP BiliBili的UWP客户端,当然,是第三方的了 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBili-UWP 还在为网页版B站卡顿、内存…

张小明 2026/1/5 18:45:24 网站建设