自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

原创 ROS2系列 (21) : Cpp服务通信实例——客户端(巡逻海龟客户端)

本文介绍了在ROS2中开发C++服务通信客户端的过程,实现海龟巡逻功能。客户端每10秒生成随机目标点(0~12范围内),调用/patrol服务并解析响应结果。代码包含客户端创建、定时器触发请求、异步请求处理等核心逻辑,通过CMake配置完成编译。演示环节展示服务端、客户端和模拟器的联动效果,验证了服务通信的完整流程。该实例展示了ROS2中C++服务通信的典型开发模式,适用于周期性任务调度场景。

2025-11-02 20:50:30 750

原创 ROS2系列 (20) : Cpp服务通信实例——服务端(巡逻海龟服务端)

本文介绍了基于ROS2的C++服务端实现海龟巡逻功能。首先创建了包含必要依赖的功能包,然后编写服务端代码,实现了目标点校验、海龟运动控制和执行结果返回。服务端通过订阅海龟位姿和发布速度指令实现导航,并响应客户端请求。配置CMakeLists后构建运行,服务端可与海龟模拟器配合完成巡逻任务。该实例展示了ROS2服务通信的完整开发流程。

2025-11-02 20:28:09 470

原创 ROS2系列 (19) : C++服务通信实例——自定义巡逻服务接口(接口创建篇)

本文介绍了在ROS2中创建自定义C++服务接口的具体流程。以"巡逻海龟"案例为例,详细说明了如何在已有功能包中添加自定义服务接口,包括:1) 创建Patrol.srv文件定义请求和响应结构;2) 配置package.xml声明接口依赖;3) 更新CMakeLists.txt设置构建规则。文章还提供了构建验证的方法,为后续开发服务端和客户端奠定了基础。通过本教程,开发者可以掌握ROS2中自定义服务接口的完整创建流程。

2025-11-02 20:09:41 489

原创 ROS2系列 (18) : Python服务通信实例——Client端

摘要:本文介绍了ROS2 Python服务通信的客户端实现,基于人脸检测功能完成图像发送、服务调用及结果解析。客户端通过rclpy创建服务绑定,使用cv_bridge进行图像格式转换,并演示了两种异步服务调用方式:spin_until_future_complete阻塞等待和add_done_callback回调处理。代码实现了人脸检测结果的可视化显示,包括检测数量、位置及耗时信息。文中还提供了功能包目录结构和测试图像准备步骤,通过修改setup.py添加客户端入口点。

2025-11-01 17:48:01 946

原创 ROS2系列 (17) : Python服务通信实例实例——Server端

本文介绍了基于ROS2的Python人脸检测服务端实现。服务端接收客户端发送的图像,使用face_recognition库检测人脸位置,返回人脸数量、耗时及边界框信息。核心步骤包括:1)创建功能包并安装依赖库(face_recognition、OpenCV等);2)编写服务端代码,通过cv_bridge转换图像格式,实现人脸检测回调函数;3)配置功能包并构建运行。该服务端适用于ROS2 Python环境,可作为智能机器人视觉处理的基础模块,支持自定义图像输入和实时人脸检测。

2025-11-01 17:07:50 646

原创 ROS2系列 (16) : Python服务通信实例——自定义消息接口

本文详细介绍了如何在ROS2中创建自定义服务接口,以实现人脸检测服务的消息通信。主要内容包括: 需求分析:拆解人脸检测服务的请求/响应数据结构 创建功能包:建立包含srv文件和必要依赖的接口包 定义服务接口:编写.srv文件规范图像输入和人脸位置输出 配置构建系统:设置package.xml和CMakeLists.txt确保接口生成 验证接口:通过构建和ros2命令检查生成结果 该接口为后续开发服务端(检测算法)和客户端(图像交互)奠定了标准化通信基础,实现了ROS2多语言节点的消息互通。

2025-11-01 15:49:51 845

原创 ROS2系列 (15) : 参数通信介绍——节点配置的核心机制

摘要:ROS2参数通信是节点配置的核心机制,用于管理静态/动态参数(如颜色、阈值等)。参数基于服务通信实现,封装了get/set等底层服务。工具链ros2 param支持参数查询、修改、持久化(YAML文件)等操作,rqt提供可视化界面。参数可运行时调整并持久保存,是提升ROS2系统灵活性的关键技术。

2025-11-01 15:29:54 577

原创 ROS2系列 (14) : 服务通信介绍——双向通信的核心机制

本文介绍了ROS2中的服务通信机制,重点阐述其核心概念、DDS底层实现和工具链使用。服务通信采用"请求-响应"的双向模式,适用于需要结果反馈的场景。从DDS角度看,服务由两个话题(请求和响应)组成,与单向的话题通信形成对比。文章详细讲解了ros2 service系列命令的使用方法,包括列出服务、查看接口定义和手动调用服务,并介绍了通过rqt可视化工具调用服务的流程。服务通信是ROS2节点协作的重要方式,为机器人系统开发提供了可靠的双向交互能力。

2025-11-01 15:18:12 955

原创 ROS2系列 (13) : 常用Git指令入门(本地Git)

本文介绍了ROS2开发中本地Git仓库的核心使用方法。主要内容包括:Git全局配置(身份信息和默认分支)、初始化本地仓库、代码提交流程(add+commit)、使用.gitignore忽略ROS2临时文件(build/install/log目录)以及查看提交历史。这些Git基础操作能够帮助开发者有效管理ROS2功能包的版本变更,为后续团队协作和代码迭代提供保障。通过掌握这些指令,开发者可以更好地追踪ROS2项目的开发历程,提高代码管理效率。

2025-10-31 11:25:42 523

原创 ROS2系列 (12) : 自定义msg通信接口

本文详细介绍了ROS2中自定义msg的创建与使用流程。主要内容包括:1)创建专门的功能包管理自定义msg,优化目录结构;2)定义"SystemStatus"消息格式,包含时间戳、资源使用率等字段;3)配置CMakeLists.txt和package.xml文件以实现自动代码生成;4)构建验证消息接口的正确性。文章还解析了ROS2自动生成C++/Python接口的原理,展示了自定义msg在系统状态监控等场景下的应用价值,为ROS2开发者提供了标准化的消息定制解决方案。

2025-10-30 22:45:32 676

原创 ROS2系列 (11) : C++话题通信节点——订阅者示例

本文介绍了ROS2 C++话题通信中订阅者节点的实现方法,在demo_cpp_topic功能包中添加目标点控制订阅者节点。通过修改CMakeLists.txt实现多节点共存,包括创建target_controller.cpp订阅海龟位姿并控制其运动到目标点。详细解析了运动控制算法,包括误差计算(距离和角度)和闭环控制策略。最后提供了构建和运行流程,演示了海龟从初始位置向目标点移动的过程。该方案展示了ROS2中一个功能包管理多个节点的方法及PID控制的基本思想。

2025-10-30 20:00:13 1032

原创 ROS2系列 (10) : C++话题通信节点——发布者示例

本文介绍了ROS2中C++话题发布者的实现方法,通过控制海龟模拟器画圆的案例,详细讲解了创建C++功能包、配置发布者和定时器、实现画圆逻辑等关键技术要点。文章重点解决了显式类型声明、避免隐式转换、计算圆半径的数学原理等核心问题,并提供了完整的代码示例和构建运行流程。该案例展示了如何利用C++在ROS2中实现周期性话题发布,为读者提供了机器人运动控制的基础实现模板。

2025-10-30 19:33:47 1364

原创 ROS2系列 (9) : Python话题通信节点——订阅者示例

本文介绍了如何使用ROS2和Python实现一个订阅小说话题并朗读的节点。通过创建订阅者节点,接收发布者发送的小说文本,并借助espeak-ng库实现中文语音合成。为解决"发布快、朗读慢"问题,采用队列缓冲和多线程技术分离接收与朗读逻辑。文章详细说明了环境准备、功能包集成、依赖配置、代码编写等步骤,并提供了构建和运行完整流程的指导。该方案可扩展应用于语音播报、异步处理等场景,展示了ROS2话题通信的实际应用。

2025-10-29 18:28:58 1133

原创 ROS2系列 (8) : Python话题通信节点——发布者示例

本文介绍了使用ROS2 Python实现话题发布者的完整流程。通过“下载并发布小说内容”的案例,详细讲解了功能包的创建、本地HTTP服务器搭建、依赖配置(rclpy、requests等)以及Python节点编写。关键点包括:使用Queue缓存小说行,通过定时器实现5秒间隔发布,以及话题发布者的创建和使用。该案例完整覆盖了ROS2 Python话题通信的核心流程,包括消息类型选择(String)、定时器回调、队列操作等,可作为ROS2话题通信的入门实践参考。

2025-10-29 17:41:52 1045

原创 ROS2系列 (7) : 话题通信介绍

摘要: 本文介绍ROS2中的核心通信机制——话题通信,采用发布-订阅模式实现节点间异步数据传输。以海龟模拟器为例,详细讲解发布者、订阅者、话题和消息的概念,演示如何使用ros2 topic命令查看话题信息、订阅数据和发布控制指令(如发送Twist消息控制海龟运动)。同时解析消息接口定义(如geometry_msgs/msg/Twist)及其数据结构。话题通信适用于传感器数据广播、控制指令下发等高频异步场景,为机器人系统开发提供基础通信支持。

2025-10-29 14:34:55 584

原创 ROS2系列 (6) : 多功能包工作空间(Workspace)最佳实践

本文介绍了ROS2中多包工作空间(Workspace)的最佳实践方法。主要内容包括:1) 工作空间的概念与价值,作为管理多个功能包的容器;2) 创建和初始化多包工作空间的步骤,包括目录结构和包间依赖配置;3) 使用colcon build的高效构建策略,如选择性构建特定包;4) 环境变量配置和包运行方法;5) 工作空间的核心优势总结,包括多包管理、依赖自动处理等;6) 实践建议如功能包拆分原则和构建策略选择。通过合理使用工作空间,可以显著提升复杂ROS2项目的开发效率。

2025-10-28 22:54:22 679

原创 ROS2系列 (5) : 使用功能包组织C++节点

本文详细介绍了ROS2中C++功能包的组织与使用。主要内容包括:创建C++功能包的命令和目录结构解析;编写基础C++节点代码的方法;配置package.xml和CMakeLists.txt的关键步骤,重点讲解了ament_target_dependencies指令;对比了colcon build和传统CMake的构建方式;分析了环境变量AMENT_PREFIX_PATH的作用和C++/Python节点运行的差异。通过本文,读者可以掌握ROS2中C++节点的开发流程,理解其构建原理和环境配置机制。

2025-10-28 18:45:49 728

原创 ROS2系列 (4) : 使用功能包组织Python节点

本文讲解创建、配置、构建和运行 ROS2 Python 功能包的全流程。通过ros2 pkg create创建ament_python类型包,解析其模块、配置、测试文件等结构;编写节点代码,在package.xml添加rclpy依赖,setup.py注册可执行入口;colcon build后,可通过PYTHONPATH直接运行安装文件,或source环境变量后用ros2 run启动节点,同时解答 “Package not found” 等常见问题,呈现 Python 功能包在 ROS2 中的组织与运行逻辑。

2025-10-28 17:48:17 1285

原创 ROS2系列(3):第一个C++节点

本文详细介绍了如何开发第一个ROS2 C++节点,涵盖代码编写、编译配置、调试和运行全流程。主要内容包括:1) 编写基础C++节点代码,实现节点初始化和日志输出;2) 配置CMake文件解决依赖问题;3) 设置VSCode实现代码提示;4) 节点调试技巧,包括参数处理和节点信息查看;5) 开发细节如spin函数作用、日志级别设置等。通过本文,读者可以掌握ROS2 C++开发的基本方法,为后续开发复杂机器人应用打下基础。

2025-10-28 16:49:37 1317 1

原创 ROS2系列 (2) : 第一个Python节点

本文介绍了ROS2 Python节点的开发全流程。首先演示了基础节点创建,包含初始化、日志输出等核心步骤;其次讲解了如何通过环境变量自定义日志格式,提升调试效率;然后强调了函数注释和类型提示规范对代码提示的重要性;接着提供了配置VSCode的PYTHONPATH实现智能代码提示的方法;最后提及避免同名节点冲突的解决方案。这些实践涵盖了ROS2 Python开发的关键环节,帮助开发者更高效规范地进行功能开发与调试。

2025-10-28 13:03:52 703

原创 ROS2系列 (1) : 常用环境变量解析与实践

本文解析了ROS2开发中的关键环境变量及其应用。ROS_DISTRO标识当前ROS2版本,通过echo $ROS_DISTRO可查看。核心变量AMENT_PREFIX_PATH存储程序包路径,ros2 run命令依赖它定位可执行文件。文章演示了直接通过该变量运行程序包(如turtlesim_node),并展示错误修改导致包找不到的情况。这些变量由setup.bash脚本初始化,通常在~/.bashrc中加载。理解这些变量有助于解决“程序包找不到”等问题,是掌握ROS2开发的基础。

2025-10-27 19:54:45 822

原创 ROS2系列 (0) : Linux 常用命令

本文整理了31个Linux高频命令,涵盖文件操作、目录管理、系统监控等核心功能。从基础的ls/cd/pwd到高级的grep/find/top,每个命令都提供功能说明、常用参数和实战示例。重点包括:文件操作类(ls、cp、mv、rm)、目录管理类(cd、mkdir)、文本处理类(cat、grep)、系统监控类(ps、top)等。掌握这些命令能显著提升Linux操作效率,适合开发者和运维人员参考使用。

2025-10-27 19:14:27 731

原创 NumPy 系列(八):从numpy 到 tensor

PyTorch在NumPy语法基础上进行了扩展和优化,使其支持GPU加速的张量运算。两者核心语法基本一致:NumPy数组对应PyTorch张量,n维数组对应n阶张量,可通过torch.tensor()和np.array()相互转换。主要差异体现在部分函数上,如随机数生成(rand()替代random.random())、矩阵运算(matmul()替代dot())等,PyTorch对参数类型要求更严格(如exp()必须传入张量)。这些改动使PyTorch更适合深度学习场景,同时保持了NumPy的易用性。

2025-09-21 20:00:03 375

原创 NumPy 系列(七):numpy 布尔数组

本文介绍了NumPy中布尔型数组的创建与应用。主要内容包括:1)通过比较运算符创建布尔型数组,支持数组与标量或同维数组的比较;2)统计布尔数组中True数量的方法,包括np.sum()、np.any()和np.all()函数;3)使用布尔数组作为掩码筛选普通数组元素;4)利用np.where()函数查找满足条件的元素位置。这些操作在数据筛选、条件统计等场景中非常实用。

2025-09-21 19:59:07 346

原创 NumPy 系列(六):numpy 数组函数

本文介绍了NumPy中矩阵乘积和常用数学函数的应用。在矩阵乘积部分,详细讲解了向量与向量、向量与矩阵、矩阵与向量以及矩阵与矩阵的乘积运算规则和实现方法。在数学函数部分,列举了绝对值、三角函数、指数和对数等基本数学运算。最后介绍了聚合函数的使用,包括最大值、求和、求积、均值和标准差等运算,并说明了axis参数的作用以及处理缺失值的安全版本函数。通过这些功能,NumPy为科学计算提供了强大的数学运算支持。

2025-09-21 19:58:05 346

原创 NumPy 系列(五):numpy 数组的计算

本文介绍了NumPy中数组运算的基本操作。首先展示了数组与系数之间的基本算术运算,包括加减乘除、幂运算、取整和取余。接着讲解了同维度数组间的逐元素运算规则。最后重点介绍了NumPy的广播机制(Broadcasting),说明不同形状数组间运算的兼容规则:数组维度从右向左对齐,对应维度相等或其中一个为1时才能广播,缺失维度默认为1。文章通过具体代码示例,演示了向量与矩阵运算时自动广播的过程,帮助读者理解多维数组间的运算规则。

2025-09-21 19:56:25 377

原创 NumPy 系列(四):numpy 数组的变形

本文介绍了NumPy数组的基本操作,包括转置、翻转、重塑、拼接和分裂。主要内容包括:1)数组转置方法.T及向量转矩阵的转换;2)上下翻转np.flipud()和左右翻转np.fliplr()的使用;3)reshape()方法重塑数组形状的用法;4)concatenate()函数实现数组拼接的操作;5)split()函数实现数组分裂的方法。文中通过代码示例详细演示了各种操作在向量和矩阵上的应用,并强调了操作时需要注意的维度匹配问题。

2025-09-21 19:54:49 216

原创 NumPy 系列(三):numpy 数组的索引

本文介绍了NumPy数组的多种索引和切片操作方式,包括普通索引、花式索引和切片访问。主要内容包括: 访问数组元素的基本方法,向量和矩阵的不同索引语法; 花式索引的特点和使用方式,可以同时访问多个不连续元素; 数组切片操作,包括向量和矩阵的切片方法,提取行和列的不同方式; NumPy数组的特殊性质:切片仅是原数组的视图而非副本,赋值操作仅是绑定关系而非创建新变量; 需要创建独立副本时需使用.copy()方法。 这些操作方式体现了NumPy在内存管理上的优化设计,特别适合处理大规模数据时的性能需求。

2025-09-21 19:53:59 917

原创 NumPy 系列(二):numpy 数组的创建

本文介绍了NumPy创建数组的四种主要方法:1)使用np.array()从列表创建指定数组,包括一维、二维数组和矩阵;2)使用np.arange()创建递增数组;3)使用np.zeros()和np.ones()创建同值数组,默认生成浮点型;4)使用np.random模块创建随机数组,包括均匀分布、整数范围和正态分布的随机数组。这些方法为数据处理提供了灵活多样的数组生成方式。

2025-09-21 19:52:56 206

原创 NumPy 系列(一):numpy 数组基础

本文介绍了NumPy数组的基本概念和使用方法。主要内容包括:1) NumPy数组的数据类型分为整数型和浮点型,并遵循"同化定理"和"共同改变定理";2) 数组维度分为一维(向量)和二维(矩阵),可通过reshape()方法转换;3) 演示了创建不同维度数组、数据类型转换以及维度转换的具体操作。这些基础知识为后续深入学习NumPy和深度学习奠定了基础,特别强调了数组维度识别和转换的重要性。

2025-09-21 19:51:15 905

原创 ubuntu配置cuda与torch

本文详细介绍了CUDA Toolkit安装及多版本管理的方法。

2025-09-20 22:40:49 1593

原创 NumPy 系列(零):从 Python 到「数组」—— 为什么 NumPy 是数据科学的第一块基石

NumPy是Python科学计算的核心库,解决了Python原生list在高密度数值计算中的两大痛点:内存消耗大和运行速度慢。它提供高效的多维数组对象ndarray,采用连续内存块存储固定类型数据,支持向量化运算和广播机制,性能比原生list快50-80倍,内存占用仅为1/4。NumPy作为数据科学基础库,为Pandas、SciPy、Scikit-learn等高级库提供统一数据载体,同时通过内存接口与底层硬件无缝衔接。一个简单示例显示,NumPy的向量化加法比Python原生循环快两个数量级。

2025-09-18 15:22:11 333

原创 Ubuntu 系统下 `.tar.gz` 文件安装程序全指南

本文详细介绍了在Ubuntu系统中安装.tar.gz格式程序的完整流程。以Postman为例,内容包括:下载安装包(使用wget命令)、解压文件(tar命令)、部署到/opt目录、配置终端快捷启动(ln创建符号链接)以及创建桌面快捷方式(.desktop文件)。文章还提供了通用的安装模板,适用于其他.tar.gz格式软件,并包含卸载方法。通过这套标准化操作,用户可以灵活安装官方最新版软件,同时保持系统整洁有序。

2025-09-17 10:20:59 6423 2

原创 Flask 核心基础:从 路由装饰器 到 __name__ 变量 的底层逻辑解析

@app.route("/")实际上是Flask类方法实现的"装饰器工厂",通过实例方法支持多应用隔离,将URL路径与视图函数绑定到实例的url_map中。__name__变量则动态确定应用根目录,用于定位静态资源和模板文件,其值随运行方式变化(直接运行时为"__main__",导入时为模块名)。这两个设计体现了Flask巧妙运用Python语言特性,在简化代码的同时保证灵活性和资源隔离。

2025-09-09 22:57:12 858

原创 Python中内置装饰器

Python装饰器是一种在不修改原函数代码的前提下增强函数功能的语法工具。核心原理是通过高阶函数包装原函数,在执行前后添加额外逻辑。基础装饰器示例展示了计时功能的实现,带参数的函数需在包装函数中传递*args和**kwargs。装饰器本身也可带参数,通过嵌套函数实现。使用functools.wraps可保留原函数元信息。常见应用包括日志记录、权限验证、缓存等场景,体现了Python的开闭原则,在Flask等框架中被广泛使用。

2025-09-09 22:44:49 767 1

原创 Python argparse 模块:轻松搞定命令行参数解析

Python的argparse模块是标准库中处理命令行参数的高效工具,遵循"定义规则→解析输入→使用参数"的流程。它支持多种参数类型(数值、开关型等),可设置短/长选项、默认值和帮助信息,自动完成参数校验和错误处理。核心优点包括自动解析、类型检查、灵活配置和自动生成帮助文档。工作原理是通过ArgumentParser创建规则容器,添加参数定义后解析命令行输入,最终生成可直接使用的Python变量。argparse极大简化了命令行参数处理,是Python脚本开发中配置灵活参数的必备工具。

2025-09-07 23:20:51 431

原创 Conda 包管理器与环境管理使用指南

Conda是一个强大的包管理和环境管理工具,能够创建隔离的Python环境并管理各种系统包。本文介绍了Miniconda3的下载安装方法,以及环境管理的基本操作,包括创建、激活、退出和删除环境。还讲解了如何导出环境配置、从配置文件创建环境,以及进行版本升级。在包管理方面,详细说明了如何安装指定版本的包,查看安装路径,以及如何安装gcc等系统工具。这些功能使Conda成为管理多项目依赖和避免库冲突的理想工具。

2025-09-07 22:02:23 652

原创 pip常用指令小结

pip是Python的官方包管理工具,提供安装、升级和卸载Python第三方库的功能。常用命令包括:pip install安装包、pip uninstall卸载包、pip list查看已安装包、pip freeze导出依赖等。可通过国内镜像源(如阿里云、清华)加速下载,方法是在命令后添加-i参数或修改pip配置文件永久生效。配置文件中设置镜像地址和信任主机后,可避免每次手动输入参数。

2025-09-07 20:04:38 429

原创 Python常见设计模式3: 行为型模式

本文介绍了四种常见的设计模式及其Python实现。责任链模式通过链式对象处理请求,避免请求者与处理者耦合;观察者模式建立一对多依赖关系,实现状态变更自动通知;策略模式封装可替换算法,使算法独立于客户端;模板模式定义算法骨架,将特定步骤延迟到子类实现。每种模式均包含角色说明和Python代码示例,展示了不同模式的适用场景和实现方法。这些设计模式为软件设计提供了可复用的解决方案,有助于构建灵活、可维护的系统架构。

2025-08-27 21:33:31 371

原创 Python常见设计模式2: 结构型模式

本文介绍五种设计模式及Python实现:适配器模式(类/对象适配,解决接口不兼容,如适配银联支付)、桥接模式(分离事物维度,如形状与颜色独立变化)、组合模式(树形结构表“部分-整体”,统一单个与组合对象使用,如图形组合)、外观模式(为子系统提供高层接口,简化使用,如封装计算机CPU、硬盘等组件操作)、代理模式(控制对象访问,含虚代理(按需创建)、保护代理(限权)等)。每种模式均有角色定义与代码示例,清晰呈现核心逻辑与应用场景。

2025-08-27 15:56:45 485

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除