【多喝热水系列】从零开始的ROS2之旅——Day5 再遇ROS2功能包:Python和C++功能包编写

【多喝热水系列】从零开始的ROS2之旅——Day5 再遇ROS2功能包:Python和C++功能包编写

【多喝热水系列】从零开始的ROS2之旅——Day5

大家好,这里是【多喝热水系列】从零开始的ROS2之旅第五天!经过前几天的铺垫,我们已经对ROS2的核心概念和基础环境有了一定了解,今天的重点是实战操作——分别完成Python和C++功能包的创建与编译,再把这些功能包整合到工作空间中处理依赖关系,最后还会分享一个Ubuntu系统卡登录界面的踩坑解决方案。话不多说,直接上干货!

一、Python功能包创建和编译

ROS2中功能包是代码组织的基本单位,不同编程语言的功能包创建和编译流程略有差异,先从相对简洁的Python功能包开始。

1.1 创建Python功能包

#建立一个Python语言的功能包 ros2 pkg create demo_python_pkg --build-type ament_python --license Apache-2.0 

结果如下图所示:

1.2 简单编写测试节点

为了验证功能包可用,我们在demo_python_pkg/demo_python_pkg目录下创建一个简单的节点文件python_node.py,实现基础的日志输出:

#demo_python_pkg/demo_python_pkg/python_node.py的节点内容import rclpy from rclpy.node import Node defmain(): rclpy.init() node = Node("python_node") node.get_logger().info("Hello from Python node!") rclpy.spin(node) node.destroy_node() rclpy.shutdown()

1.3 给当前packages.xml添加依赖

#packages.xml添加依赖<depend>rclpy</depend>

1.4 配置setup.py

#setup.py添加的内容 entry_points={'console_scripts':['python_node = demo_python_pkg.python_node:main',#当前面的python_node是你运行时的命令,就相当于执行demo_python_pkg目录下python_node文件中的main函数],},

1.5 编译Python功能包

colcon build 

若编译无报错,会在工作空间根目录生成build、install、log三个文件夹,其中install目录下存放编译后的可执行文件。

1.6 验证功能包

source install/setup.bash echo$AMENT_PREFIX_PATH ros2 run demo_python_pkg python_node 

运行结果:

在这里插入图片描述

1.7 出现的问题及解决方案:

在这里插入图片描述

解决方法:
看看你文件是否Ctrl+s保存,如果未保存会出现编译无可执行文件的问题。
建议把Vscode里面自动保存开启。

操作后文件列表如下所示:

在这里插入图片描述

二、C++功能包

C++功能包的构建类型为ament_cmake,相比Python包多了CMakeLists.txt配置步骤,下面详细说明。

2.1 创建C++功能包

#建立一个C++语言的功能包![请添加图片描述](https://i-blog.ZEEKLOGimg.cn/direct/3cace60e198c422a9bf4e2d0d5267b00.png) ros2 pkg create demo_cpp_pkg --build-type ament_cmake --license Apache-2.0 

结果如图所示:

在这里插入图片描述

2.2 编写测试节点

//demo_cpp_pkg/src/cpp_node.cpp的节点内容#include"rclcpp/rclcpp.hpp"#include<iostream>usingnamespace std;intmain(int argc,char**argv){ rclcpp::init(argc, argv);auto node =make_shared<rclcpp::Node>("cpp_node");RCLCPP_INFO(rclcpp::get_logger("cpp_node"),"Hello from C++ node!"); rclcpp::spin(node); rclcpp::shutdown();return0;}

2.3 配置CMakeLists.txt(核心步骤)

#CMakeLists.txt文件添加的内容 find_package(rclcpp REQUIRED)#1.查找可执行文件的头文件和库文件 add_executable(cpp_node src/cpp_node.cpp)#2.添加可执行文件 cpp_node ament_target_dependencies(cpp_node rclcpp)#3.为可执行文件添加依赖项 rclcpp‘ install(TARGETS cpp_node DESTINATION lib/${PROJECT_NAME})#4.将编译好的可执行文件复制到安装目录 lib/demo_cpp_pkg 下

2.4 packages.xml添加依赖

#packages.xml添加依赖<depend>rclcpp</depend>

2.5 编译C++功能包

colcon build 

2.6 验证功能包

source install/setup.bash ros2 run demo_cpp_pkg cpp_node 

运行结果:

在这里插入图片描述

操作后文件列表如下所示:

在这里插入图片描述

三、多功能包的最佳实践Workspace

实际开发中,可能会遇到需要将已创建的功能包移入指定工作空间。

3.1 功能包移入workspace

mkdir-p chapt2_ws/src 
请添加图片描述


编译结果如下:

请添加图片描述


3.2 处理demo_python_pkg对demo_cpp_pkg的依赖
处理功能包之间依赖的情况。这里我们模拟“demo_python_pkg依赖demo_cpp_pkg”的场景,说明完整的处理流程。

3.2.1 配置demo_python_pkg的package.xml

#demo_python_pkg的packages.xml添加依赖<depend>demo_cpp_pkg</depend>

编译结果如下:

请添加图片描述

运行时遇到的问题: Ubuntu熄屏卡登入界面方法

首先Ctrl+alt+f3进入命令界面,
然后把自己的用户名和密码输入之后,
再Ctrl+alt+f2把密码再输入一遍,
即可解决此问题。

四、总结
今天的ROS2实战之旅收获满满,我们不仅掌握了Python和C++功能包的创建、编译流程,还学会了处理功能包之间的依赖关系,同时解决了Ubuntu卡登录界面的小问题。功能包是ROS2开发的基础,后续的节点通信、服务客户端等功能都需要基于功能包展开,建议大家多动手实操,熟悉每个步骤的细节。

下一期我们将继续深入ROS2,学习节点之间的话题通信,敬请期待!如果今天的内容对你有帮助,别忘了点赞、收藏、关注,我们下期见!

Read more

火山引擎AI大模型平台与GLM-4.6V-Flash-WEB的互补关系分析

火山引擎AI大模型平台与GLM-4.6V-Flash-WEB的互补关系分析 在智能应用加速落地的今天,多模态大模型正从实验室走向真实业务场景。然而,一个普遍存在的困境是:许多视觉语言模型虽然在基准测试中表现优异,但在实际Web服务中却难以承受高并发压力——响应慢、显存占用高、部署复杂,最终沦为“可看不可用”的技术demo。 正是在这样的背景下,GLM-4.6V-Flash-WEB 的出现显得尤为关键。这款由智谱推出的轻量级多模态模型,并非一味追求参数规模或推理深度,而是将“可落地性”作为核心设计目标:它能在单张消费级GPU上实现毫秒级响应,支持一键部署,专为实时交互系统优化。但仅有先进的模型还不够——要让这种能力真正服务于百万级用户,还需要一个强大而稳定的承载平台。 这时,火山引擎AI大模型平台 的角色就凸显出来了。作为字节跳动多年AI工程实践的结晶,它不只是提供算力资源,更是一套完整的生产级AI基础设施,涵盖模型优化、弹性调度、自动化运维等全链路能力。当GLM-4.6V-Flash-WEB遇上火山引擎,我们看到的不再是一个孤立的技术点,而是一种新型的“模型+平台”协同范式:前者

By Ne0inhk

Hunyuan-MT-7B-WEBUI效果展示:维吾尔语转中文真准

Hunyuan-MT-7B-WEBUI效果展示:维吾尔语转中文真准 在跨语言信息交流日益频繁的今天,高质量、低门槛的机器翻译能力已成为企业全球化、知识共享和多民族协作的重要基础设施。尤其是在我国多语言共存的社会背景下,如何实现汉语与少数民族语言之间的精准互译,一直是技术落地的关键挑战。 近期发布的 Hunyuan-MT-7B-WEBUI 镜像,正是针对这一需求推出的开箱即用解决方案。该镜像封装了腾讯混元团队开源的最强多语言翻译模型——Hunyuan-MT-7B,并集成图形化网页界面(Web UI),支持包括维吾尔语、藏语、蒙古语在内的38种语言互译,真正实现了“一键部署、即点即用”。 本文将聚焦其在维吾尔语到中文翻译任务中的实际表现,结合系统架构、使用流程与真实案例,全面解析这一工具的技术价值与工程意义。 1. 模型背景与核心优势 1.1 专为多语言互译优化的Seq2Seq架构 Hunyuan-MT-7B 并非通用大模型,而是基于标准 Transformer 编码器-解码器结构专门训练的序列到序列(Seq2Seq)翻译模型。其设计目标明确:在70亿参数规模下,实现高精度、

By Ne0inhk

前端的基本介绍

HTML的基本作用 HTML(HyperText Markup Language)是一种用于创建网页的标准标记语言。它定义了网页的结构和内容,通过标签和属性描述页面中的文本、图像、链接等元素。 结构化网页内容 HTML通过标签(如<h1>、<p>、<div>)将内容组织成标题、段落、列表等结构。这种结构化方式使浏览器能够正确渲染页面布局,同时为搜索引擎提供清晰的页面层次。 嵌入多媒体资源 HTML支持通过特定标签(如<img>、<video>、<audio>)在网页中嵌入图像、视频、音频等多媒体内容。例如: <img src="image.jpg"

By Ne0inhk
下载安装Microsoft Edge Webview2教程

下载安装Microsoft Edge Webview2教程

视频教程 Windows 10/11系统 Webview2安装——win10/11 Windows 7系统 Webview2安装——Win7 图文教程 官网下载最新版Webview2安装包 点击下载安装 官网地址:Microsoft Edge WebView2 | Microsoft Edge Developer 1. 进入官网,点击下载按钮 2. 点击左侧常青引导程序下载按钮 3. 在弹出的页面点击接受并下载,右上角下载管理页面在下载完成后有文件弹出 4. 在游览器下载管理页面直接点击打开文件进行软件的安装 5. 软件安装中,安装完成后无需手动点击自动弹出消失。 graph TD A[安装码尚云标签] --> B{判断安装情况} B -->|Yes| C[打开软件进行标签设计] B --&

By Ne0inhk