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

《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点

简介上一小节我们用功能包组织了python节点这节我们把C节点也装进功能包。参考资料参考资料均来自于鱼香ROS社区创始人小鱼资源如下①【《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C节点】 https://www.bilibili.com/video/BV1Pb42177BJ?spm_id_from333.788.videopod.sectionsvd_source7e745558295b053ab0826d478802cb22②全章节源码https://github.com/fishros/ros2bookcode③参考书籍《ROS 2机器人开发从入门到实践》2.3.1 在功能包中编写C节点打开VScode进入chapt2目录输入如代码清单2-21的命令ros2 pkg create是用于创建功能包的命令demo_cpp_pkg是功能包的名字......详见上一小节。最后创建的功能包文件夹展开如图2-11。在demo_cpp_pkg下的src添加cpp_node.cpp在文件中输入如下代码。#include rclcpp/rclcpp.hpp int main(int argc, char **argv) { rclcpp::init(argc, argv); auto node std::make_sharedrclcpp::Node(cpp_node); RCLCPP_INFO(node-get_logger(), 你好 C 节点); rclcpp::spin(node); rclcpp::shutdown(); return 0; }上述代码即为2.1.2节的代码可直接用。但编写完后还需注册节点与添加依赖编辑CMakeLists.txt最终添加的内容及位置如代码清单2-23所示。代码清单中添加内容的详细作用与参数意义如下表代码指令详细作用参数含义详解核心用途 / 场景find_package(rclcpp REQUIRED)让 CMake 系统自动查找并加载 ROS2 的 rclcpp 核心库告诉编译器我需要用到 ROS2 C 核心功能•rclcpp要查找的包名ROS2 C 核心库•REQUIRED强制要求找不到 rclcpp 就直接报错停止编译必须放在最前面用于引入依赖库没有这行编译器找不到 ROS2 头文件 / 库add_executable(cpp_node src/cpp_node.cpp)创建一个可执行文件把源码编译成可以直接运行的程序•cpp_node生成的可执行文件名最终运行用的名字•src/cpp_node.cpp源代码路径即要编译的 C 文件定义程序入口一个节点对应一个可执行文件ament_target_dependencies(cpp_node rclcpp)为可执行文件链接依赖库让程序能调用 rclcpp 的函数、类、接口•cpp_node要配置的目标可执行文件必须和上面名字一致•rclcpp要链接的依赖库名称解决链接错误没有这行代码能编译但会报「未定义引用」简单来讲find_package和add_executable用于查找依赖和添加可执行文件ament_cmake提供的ament_target_dependencies用于添加依赖。最后添加的是install指令该指令把编译好的可执行文件复制到install/demo_cpp_pkg/lib/demo_cpp_pkg目录中这样用ros2 run才能找到节点。构建功能包之前还需要添加对rclcpp的依赖声明完整声明如代码清单2-24所示。dependreclcpp/depend用于声明当前功能包依赖rclcpp库完成这些即可用以下命令构建功能包。colcon build功能详见上一节。运行后在chapt2/install/demo_cpp_pkg/lib/demo_cpp_pkg/目录就可以看到cpp_node可执行文件了。接下来就可以运行该文件依次输入代码清单2-26中的两条命令。source指令的作用详见上一节即让ROS2能够找到demo_cpp_pkg和其下的节点。运行完指令后节点已成功启动至此我们完成了在C功能包中编写节点。但colcon build其实也是的调用cmake和make完成对代码的编译的。2.3.2 功能包结构分析C功能包结构如下图。对目录结构分析如下表。文件 / 文件夹类型详细作用说明include/demo_cpp_pkg文件夹专门存放 C 头文件.h/.hpp遵循 ROS2 的包内目录规范避免头文件路径冲突。src文件夹存放 C 源代码文件.cpp比如你的节点实现代码cpp_node.cpp都放在这里是编译的核心代码目录。cpp_node.cpp文件C 源文件包含 ROS2 节点的业务逻辑实现是最终要被编译成可执行程序的代码文件。CMakeLists.txt文件CMake 构建系统的配置文件负责定义编译规则查找依赖库、添加可执行文件、设置链接依赖、配置安装路径等。LICENSE文件功能包的许可证文件默认是 Apache-2.0 协议声明了代码的开源使用权限和约束条款。package.xml文件ROS2 功能包的清单文件定义了包名、版本号、依赖关系、作者信息等元数据是构建和依赖管理的核心文件。

相关文章:

《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点

简介: 上一小节我们用功能包组织了python节点,这节我们把C节点也装进功能包。 参考资料: 参考资料均来自于鱼香ROS社区创始人小鱼,资源如下: ①:【《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织…...

日志分析 Elasticsearch 和 logstach.filebeat.

一、Elasticsearch 到底是啥?简单说,ES 就是一个能飞速搜索和分析海量数据的搜索引擎。类似百度、谷歌,但它是给你公司内部的数据用的。比如:淘宝搜商品,输入“手机 拍照好”,毫秒级给你结果——背后就是 E…...

Claude Code 配置手册

验证已经安装node和npmnode -v npm -v如果显示版本号且 ≥ 18.0.0,则说明安装成功安装CLInpm i -g anthropic-ai/claude-codelatest npm i -g openai/codexlatest npm i -g google/gemini-clilatest根目录下新建 settings.json 配置文件vim ~/.claude/settings.json…...

Creo 9.0新手必看:别再乱点‘基准平面’了,这7种创建方法才是正确打开方式

Creo 9.0基准平面实战指南:7种高效创建方法与避坑技巧 刚接触Creo 9.0的工程师们,是否经常遇到这样的场景:面对一个复杂零件建模时,明明脑子里已经构思好了结构,却卡在第一步——找不到合适的草绘平面?或者…...

【c++面向对象编程】第37篇:面向对象设计原则(一):单一职责与开闭原则

目录 一、为什么需要设计原则? 二、单一职责原则(Single Responsibility Principle) 违反原则的例子 重构:分离职责 三、开闭原则(Open-Closed Principle) 违反原则的例子 重构:使用多态&…...

全球数据治理:合规与AI双引擎驱动

一、全球化数据治理进入“合规AI”双引擎驱动时代2026年,全球数据治理市场的竞争格局正在被两股力量重塑。一方面,各国数据主权法规持续收紧——中东多国强化数据本地化存储要求,欧盟AI治理法案进入实质性执行阶段,拉美个人数据保…...

MTK手机用上高通QC快充,背后多出的那颗‘xmusb350’芯片到底在忙啥?

MTK手机为何需要外挂xmusb350芯片实现高通QC快充? 当你在电商平台搜索"支持QC快充的MTK手机"时,可能会发现一个有趣的现象:采用联发科处理器的机型在充电模块描述中,常会特别标注"搭载独立QC协议芯片"。这背后…...

辽宁传媒学院学生宿舍与生活服务情况梳理

校园住宿条件是了解高校生活服务的重要方面。本文对辽宁传媒学院学生宿舍房型、设施配置、日常服务和新生入住流程进行梳理,供读者了解校园生活环境时参考。由于宿舍分配、设施配置和报到流程可能随年份调整,具体安排应以学校当年发布的通知为准。一、宿…...

如何快速解锁教学控制:JiYuTrainer极域电子教室防控制完全指南

如何快速解锁教学控制:JiYuTrainer极域电子教室防控制完全指南 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在计算机课堂上,眼睁睁看着老师的演…...

【计算机组成原理】无符号整数乘法原理(基于移位累加,零基础看懂CPU乘法)

前言在数字电路与计算机组成原理中,加法是最基础的运算,而乘法是高频常用运算。很多初学者疑惑:计算机没有专门的乘法口诀,到底怎么实现二进制乘法?而在数字运算中,乘法是比加法更复杂、但底层逻辑完全依托…...

如何用Python自动化脚本提升大麦网抢票成功率:完整配置指南

如何用Python自动化脚本提升大麦网抢票成功率:完整配置指南 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到周杰伦、五月天演唱会门票而烦恼吗?大麦网抢票脚本…...

今日算法(二叉树剪枝)

题目描述给你二叉搜索树的根节点 root,同时给定最小边界 low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在 [low, high] 中。修剪树不应该改变保留在树中的元素的相对结构(即如果没有被移除,原有的父子代关系都应当保…...

避坑指南:STM32 HAL库SPI读写W25Q64时,你可能遇到的时序问题和调试技巧

STM32 HAL库SPI驱动W25Q64实战:时序陷阱与波形诊断全解析 当你的SPI Flash突然开始"装聋作哑",返回的不是预期数据而是清一色的0xFF或0x00时,这往往不是芯片的罢工抗议,而是时序对话中的"鸡同鸭讲"。本文将带…...

初次使用Taotoken完成模型调用从注册到收到响应的全过程记录

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken完成模型调用从注册到收到响应的全过程记录 作为一名开发者,当需要将大模型能力集成到自己的项目中时…...

行业白皮书 GEO 化转 HTML + 结构化,AI 引用率提升 50%

你花了 3 个月写了一本白皮书,排版精美,数据详实。发出去之后,阅读量不到 500。更扎心的是,当用户在 ChatGPT、Perplexity 里提问时,引用的是竞品那篇网页版的报告,而不是你的 PDF。这不是运气问题&#xf…...

【干货】如何从软件测试转型为AI测试开发?这份面试题指南值得你一看!

你是软件测试从业者,但想转向人工智能测试开发岗位吗? AI 测试岗位不仅考察传统测试技能,还要求你理解 AI/ML 模型特性、设计测试流程、编写自动化脚本。 今天,我们整理了一份面试题,从基础概念到实战场景&#xff0…...

收藏干货:MySQL/PG/人大金仓/达梦语法差异对照表

📌 专栏:国产数据库信创实战🔖 标签: #数据库语法差异 #MySQL转人大金仓 #MySQL转达梦 #PG语法适配 #信创数据库迁移 #SQL兼容改造 #国产数据库适配 #SpringBoot3数据库适配📝 文章摘要信创国产化迁移过程中&#xff0…...

Nmap - Zenmap GUI工具

1、Nmap - Zenmap GUI工具1)设备和电脑在同一局域网内,输入设备ip,点击Scan(本地web接口安全)...

企业级应用如何利用 TaoToken 构建高可用的大模型服务网关

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 企业级应用如何利用 TaoToken 构建高可用的大模型服务网关 应用场景类,探讨在中大型企业应用中,为内部多个…...

2026年六大GEO公司排名竞争力横评及企业选型实操指南针

根据易观发布的《中国 GEO 行业发展报告 2026》显示,2026年国内 GEO 市场规模已达 30 亿元,在短短 3 年内实现了 35 倍的爆发式增长,超过 68% 的中大型企业已将生成式引擎优化正式纳入年度预算。在当前由大模型驱动的信息分发范式下&#xff…...

RISC-V开放架构如何重塑垂直半导体商业模式

1. 从边缘到中心:RISC-V的崛起与半导体模式的裂变最近和几位在芯片设计公司工作的老朋友聊天,话题总绕不开RISC-V。十年前,当我们还在讨论ARM和x86谁主沉浮时,RISC-V还只是学术界论文里的一个概念。如今,它已经成了行业…...

MH2103(兆讯恒达)兼容替代 GD32F103(兆易创新)

MH2103(兆讯恒达)VS GD32F103(兆易创新)参数对比 & Pin‑to‑Pin 兼容性结论先给核心结论:同封装下,MH2103 与 GD32F103 引脚完全兼容、寄存器高度兼容,可直接 Pin‑to‑Pin 替换&#xff1…...

5步构建你的私有云游戏平台:Sunshine串流服务器完全指南

5步构建你的私有云游戏平台:Sunshine串流服务器完全指南 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine Sunshine是一款免费开源的自托管游戏串流服务器软件&#xff0…...

嵌入式异步弱总线AWBus-lite:解耦模块通信的轻量级框架设计

1. 项目概述:为什么需要关注AWBus-lite?在嵌入式系统开发,尤其是资源受限的MCU(微控制器)项目中,模块间的通信与解耦一直是个核心痛点。传统的做法,要么是模块间直接函数调用,导致代…...

一站式PCBA制造专家:天地通22年如何赋能智能硬件产业?

公司概况与实力证明 深圳市天地通电子有限公司成立于2004年,是22年深耕电子制造的一站式PCBA服务商。公司总部位于深圳市宝安区西乡街道,毗邻宝安机场,并在深圳沙井、惠州、珠海设有生产基地,合计厂房面积超7000平方米&#xff0c…...

飞凌FETMX8MP-C核心板多媒体实战:编解码、多屏与4K摄像头深度测评

1. 项目概述与核心板定位作为一名在嵌入式行业摸爬滚打了十多年的老工程师,我经手过不少核心板方案,从早期的ARM9到现在的多核A系列,各家方案在性能、功耗和功能集成度上的差异,直接决定了终端产品的竞争力。最近,飞凌…...

机器学习核心术语全解析:从评估指标到TensorFlow实战避坑指南

1. 项目概述与核心价值刚接触机器学习,尤其是像TensorFlow这样庞大框架的朋友,最头疼的莫过于满屏的英文术语。什么“Backpropagation”、“Softmax”、“Embedding”,每个词都认识,但组合在一起就让人云里雾里。更别提那些缩写&a…...

CentOS 7服务器部署:NFS共享、Nginx-RTMP流媒体与Qt无GUI环境全攻略

1. 项目概述与核心思路最近在华为云的一台CentOS 7.4 64位服务器版ECS上,完整部署了一套用于音视频处理和后台服务的开发环境。这个环境的核心目标,是为一个需要处理视频流、提供Web服务,并能方便地进行跨机文件共享和Qt程序编译的后台系统打…...

这几家有机膨润土厂家口碑稳定,你选对了吗?

在工业与新材料领域,有机膨润土作为一种关键的功能性添加剂,正从“幕后”走向“台前”。无论是涂料、油墨的流变控制,还是钻井液、润滑脂的耐温需求,又或是农药、兽药的载体优化,它的身影无处不在。然而,面…...

TI毫米波雷达实战:从mmWave Studio配置到3D-FFT点云生成的保姆级教程

TI毫米波雷达实战:从硬件连接到3D-FFT点云生成的完整指南 毫米波雷达技术正在工业检测、自动驾驶和智能家居领域掀起革命。作为TI毫米波雷达开发的核心工具链,mmWave Studio与DCA1000的组合为工程师提供了从信号采集到高级处理的完整解决方案。本文将带您…...