当前位置: 首页 > news >正文

工作空间与功能包

一、创建工作空间

工作空间是一个存放项目开发相关文件的文件夹,也是开发过程中存放所有资料的大本营

mkdir -p 002_ws/src

可以使用 colcon build编译工作空间,编译后会自动生成build、log、install文件夹。
注意:一定要在ws下生成噢

  • src,代码空间,未来编写的代码、脚本,都需要人为的放置到这里;
  • build,编译空间,保存编译过程中产生的中间文件;
  • install,安装空间,放置编译得到的可执行文件和脚本;
  • log,日志空间,编译和运行过程中,保存各种警告、错误、信息等日志

二、创建功能包

每个机器人可能有很多功能,比如移动控制、视觉感知、自主导航等,如果我们把这些功能的源码都放到一起当然也是可以的,但是当我们想把其中某些功能分享给别人时,就会发现代码都混合到了一起,很难拆分出来。

举个例子,我们手上有很多红豆、绿豆、黄豆,假设都放在一个袋子里,如果只想把黄豆都拿出来,是不是得在五颜六色的豆子里一颗一颗都找出来,数量越多,你就越头疼;如果我们把不同颜色的豆子放在不同的三个袋子里,需要拿出某种豆子的时候,不就立刻可以找出来了么。

功能包就是这个原理,我们把不同功能的代码划分到不同的功能包中,尽量降低他们之间的耦合关系,

创建example_cpp功能包,使用ament-cmake作为编译类型,并为其添加rclcpp依赖。

cd chapt2_ws/src
ros2 pkg create example_cpp --build-type ament_cmake --dependencies rclcpp
  • pkg create 是创建包的意思
  • build-type 用来指定该包的编译类型,一共有三个可选项ament_python、ament_cmake、cmake
  • dependencies 指的是这个功能包的依赖,ros2的C++客户端接口rclcpp

三、示例

打开终端,进入chapt2_ws/src运行上面的指令,创建完成后的目录结构如下:
在这里插入图片描述
cd 002_ws:
在这里插入图片描述
进入example_cpp中,然后创建node_01.cpp

#include "rclcpp/rclcpp.hpp"/*创建一个类节点,名字叫做Node03,继承自Node.
*/
class Node03 : public rclcpp::Node
{public:// 构造函数,有一个参数为节点名称Node03(std::string name) : Node(name){// 打印一句RCLCPP_INFO(this->get_logger(), "大家好,我是%s.",name.c_str());}private:};int main(int argc, char **argv)
{rclcpp::init(argc, argv);/*产生一个node_03的节点*/auto node = std::make_shared<Node03>("node_01");/* 运行节点,并检测退出信号*/rclcpp::spin(node);rclcpp::shutdown();return 0;
}

CMakeLists.txt中增加

add_executable(node_01 src/node_01.cpp)
ament_target_dependencies(node_01 rclcpp)install(TARGETSnode_01DESTINATION lib/${PROJECT_NAME}
)

然后进入002_ws下,进行编译

在这里插入图片描述

source环境

source install/setup.bash

为了将你刚刚编译生成的新ROS2包(可执行文件、库、环境变量等)“注入”或“激活”到当前的终端环境中,使得系统能够找到并使用它们。

想象一下你的系统是一个巨大的图书馆(System Library),而你的ROS2工作空间是你刚写完的一本新书(Your New Package)。

colcon build 就像是印刷和装订这本书。

这本书现在正放在你家的工作台上(即你的dev_ws/install目录里)。

source install/setup.bash 就像是把这本新书的信息登记到图书馆的中央目录系统中,并把它摆上书架。

如果不执行source,图书馆的目录里就没有你这本书的信息。即使书已经印好了(编译成功了),有人来图书馆问“有没有《My Awesome ROS2 Package》这本书?”,管理员(系统)也会回答:“没有”(Package ‘my_package’ not found)。

然后运行节点

ros2 run example_cpp node_01

在这里插入图片描述

http://www.dtcms.com/a/346632.html

相关文章:

  • 解读66页数字化转型数据中台规划应用实践解决方案【附全文阅读】
  • Q/DR/CX7.2-2020 是中国企业标准体系中
  • 【2025CVPR-目标检测方向】UniMamba:基于激光雷达的3D目标检测,采用分组高效曼巴语进行统一空间信道表示学习
  • Qt + windows+exe+msvc打包教程
  • 今日科技热点 | 量子计算突破、AI芯片与5G加速行业变革
  • Elasticsearch:什么是神经网络?
  • 算法训练营day59 图论⑨ dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • Redis Set 类型详解:从基础命令到实战应用
  • OpenJDK 17 安全点检查机制深入解析
  • 【AI基础:神经网络】16、神经网络的生理学根基:从人脑结构到AI架构,揭秘道法自然的智能密码
  • Photoshop CS6精简版轻量级,Photoshop CS6绿色免安装,Photoshop CS6安装教程
  • Kafka 概念与概述
  • AI热点周报(8.17~8.23):Pixel 10“AI周”、DeepSeek V3.1发布,英伟达再起波澜?
  • Kafka Streams vs Apache Flink vs Apache Storm: 实时流处理方案对比与选型建议
  • 何为‘口业’,怎么看待它
  • 轻量化设计·全要素监测——新一代便携式气象站赋能户外科研与应急
  • Elasticsearch Persistence(elasticsearch-persistence)仓储模式实战
  • 改华为智能插座为mqtt本地控制
  • 强光干扰与密集场景下工服识别准确率↑89%!陌讯多模态融合算法在安全生产中的实战优化
  • 华为/思科/H3C/锐捷操作系统操作指南
  • Mybatis面试题分享
  • 【网安干货】--操作系统基础(上)
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第五章整理
  • Python爬虫实战:研究WSL技术,构建跨平台数据采集和分析系统
  • 攻防世界—Confusion1—(模板注入ssti)
  • IPsec
  • selenium采集数据怎么应对反爬机制?
  • C++算法·进制转换
  • 2025/8/23c++++++++
  • kafaka知识要点