- 博客(44)
- 资源 (7)
- 收藏
- 关注
原创 C++11+ 泛型编程(模板)
泛型编程是 C++ 的核心特性之一,通过模板机制实现了类型无关的代码复用。它是 STL 的基础,使 C++ 能够提供强大而灵活的容器和算法库。掌握泛型编程需要理解模板、迭代器和类型系统的深层交互,以及如何平衡代码的通用性和可读性。随着 C++ 标准的演进(如 Concepts 的引入),泛型编程的表达力和易用性正在不断提升。作者:小芝,干了二十多年的C++开发。开发过桌面软件,干过古早功能手机游戏开发,做过几个IOS/Android客户端APP。现在对AI开发和机器人开发有兴趣,同时也在了解产品相关知识。
2025-09-22 22:08:47
536
原创 C++11+ 原子操作 `std::atomic`,现代并发编程的核心
重排是理解内存序的核心基础。在计算机系统中,程序指令的实际执行顺序与程序员在源代码中编写的顺序不一致的现象就是你写在代码里的语句顺序。比如你先写变量A = 10;,然后再写B = 20;。就是 CPU 实际执行这些指令的顺序,或者这些指令的效果(特别是内存读写)对其他 CPU 核心可见的顺序。而重排则是指执行顺序没有严格按照程序代码顺序进行。重排不是错误,也不是随意的行为。它是现代计算机系统为了追求极致性能而进行的一系列复杂优化的必然结果。主要包括和。
2025-07-24 19:17:42
991
原创 C++11 同步机制:互斥锁和条件变量
本文介绍了C++11中的同步机制,重点解读了互斥锁和条件变量的使用方法。在互斥锁部分,详细讲解了std::mutex、递归锁、超时锁等类型,推荐使用RAII包装器lock_guard和unique_lock管理锁的生命周期,并提供了预防死锁的方法和性能优化建议。条件变量部分阐述了其线程同步机制,包括等待操作和内部执行流程。文章通过代码示例展示了正确用法,并指出了常见错误,为C++并发编程提供了实用指导。
2025-06-23 18:24:51
591
原创 C++11 的线程管理(`std::thread`)
本文总结了C++11线程管理的关键内容,重点分析了std::thread的使用方法。文章介绍了线程创建方式(通过函数、Lambda表达式等),详细讲解了线程生命周期的状态管理(可连接与不可连接状态),并强调析构时必须确保线程处于不可连接状态。此外,文章提出了三种线程管理方案:等待线程完成(join)、分离线程(detach)以及推荐的RAII自动管理模式。通过状态转换图和代码示例,说明了如何安全地管理线程生命周期,避免资源泄漏和程序崩溃。
2025-06-14 16:21:05
638
原创 C++11 智能指针:`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`
总结 C++11 智能指针:`std::unique_ptr`、`std::shared_ptr`和`std::weak_ptr`。
2025-06-12 08:32:49
844
原创 C++11之后的 Lambda 表达式 以及 `std::function`和`std::bind`
C++11之后的 Lambda 表达式 以及 `std::function`和`std::bind`
2025-06-09 13:07:45
748
原创 ROS2性能狂飙:C++11移动语义‘偷梁换柱’实战
本文深入探讨了C++11移动语义在ROS2开发中的关键作用。作者通过翻译ROS2官方文档发现,C++11特性如右值引用和移动语义对性能优化至关重要。文章详细解析了左值/右值概念,并重点介绍了移动语义的实现方式:通过右值引用和移动构造函数避免深拷贝,直接转移资源所有权。借助std::move可将左值转为右值引用,显著提升容器操作和函数返回值处理的效率。文中通过MyString类示例展示了传统拷贝与移动的对比,并列举了三大典型应用场景。最后强调注意事项:正确实现移动操作、标记noexcept以及避免滥用std:
2025-06-04 19:40:49
1058
原创 ROS2 Jazzy:高效使用回调函数(回调组)
ROS2回调组使用指南 摘要:本文介绍了ROS2中回调组的基本概念和使用方法。回调组分为互斥型和可重入型两种,分别控制回调的串行或并行执行。文章详细说明了如何创建和分配回调组,并指出默认情况下使用互斥回调组。关键点包括: 互斥回调组确保回调按顺序执行 可重入回调组允许多回调并行执行 不同回调组的回调始终可以并行执行 文章还提供了避免死锁的实用建议,特别针对同步服务调用场景,建议将调用方和被调用方分配到不同回调组或统一使用可重入组。最后通过服务节点和客户端节点示例,展示了回调组的实际应用场景。正确使用回调组可
2025-05-26 14:53:15
993
原创 ROS2 Jazzy:如何使用节点接口模板类访问节点信息(C++)
首先,需要明确的是:并非所有的 ROS 节点都是一样的!例如,和类没有共同的继承树,这意味着当 ROS 开发者想编写一个以 ROS 节点指针作为参数的函数时,可能会遇到编译时的类型问题。为了解决这个问题,rclcpp包含了模板类型,它是向函数传递常规节点和生命周期节点的首选方式。接下来将向你展示如何使用为所有 ROS 节点类型生成可靠且简洁的接口。模板类为管理节点接口提供了一种简洁高效的方法。当处理不同类型的节点(如和)时,因为这些节点没有相同的继承树,这个模板就非常有用。
2025-05-14 08:30:00
443
原创 ROS2 Jazzy:配置高效的进程内通信
如上面的示例图像所示,我们有一个图像中所有指针都相同,另一个图像的前两个条目指针与第一个图像相同,但第二个图像的最后一个指针不同。本文的例子将重点展示如何通过手动组合节点,也就是说在不修改节点代码或限制其功能的情况下,将节点分开定义,然后以不同的进程布局来组合它们。例子包括多种类型:一些是用于展示进程内通信功能的简单示例,另一些是使用 OpenCV 的端到端示例,展示了将节点重组为不同配置的能力。启动了这个循环流程,人这时起,每个节点在其自己的订阅回调中调用publish发布消息,在节点之间来回传递消息。
2025-05-13 08:30:00
592
原创 ROS2 Jazzy:执行器
ROS2 中的执行管理由执行器(Executor)处理。执行器利用底层操作系统的一个或多个线程,在接收到消息和事件时调用订阅者、定时器、服务服务器、动作服务器的回调函数。显式的Executor类(rclcpp 中的、rclpy 中的或 rclc 中的executor.h)提供了与ROS1 API 非常相似的,但是比 ROS1 中spin机制更精细的执行管理控制。以下我们主要关注 C++ 客户端库 rclcpp。
2025-05-12 08:15:00
1547
原创 ROS2 Jazzy:关于组合的概念
推荐的组件代码编写方式类似于nodelet,在ROS2中称之为组件 `Component`。`Component` 的本质是一种模块化、可插拔的代码单元,既可独立运行为节点,也可动态加载到容器进程中,这使得向现有代码添加常见概念变得更容易。
2025-05-09 08:15:00
953
原创 ROS2 Jazzy:在单个进程中组合多个节点
这里展示了一种运行时组合的替代方法,即创建一个通用的容器进程,并在不使用 ROS 接口的情况下显式地传递要加载的库。
2025-05-06 08:30:00
730
原创 Trae CN + Figma MCP 从 UI 设计到微信小程序代码生成保姆级教程
MCP是AI模型Claude所属的研发公司Anthropic在2024年提出的一项开源协议,全名为。它允许大语言模型(LLMs)访问自定义的工具和服务。根据Trae官方文档所说,Trae中的智能体作为MCP客户端可以选择向MCP Server发起请求,使用它们提供的工具。而且可以自行添加MCP Server,并添加到自定义的智能体中来使用。而Figma UI设计工具提供了#Figma MCP,也就是说我们可以让Trae利用设计好的Fiagma UI数据直接生成UI界面代码。
2025-04-30 13:00:34
2011
原创 ROS2 Jazzy: 编写可组合节点(C++)
假设你有一个常规的`rclcpp::Node`可执行文件,你希望它能和其他节点在同一个进程中运行,以实现更高效的通信。
2025-04-30 08:00:00
355
原创 ROS2 Jazzy:用C++实现一个动作服务器和客户端
一个动作定义由三部分消息定义组成,由动作客户端发送给动作服务器,用于发起新目标。当目标完成时,由动作服务器发送给动作客户端。动作服务器定期发送给动作客户端,提供目标的进度更新。动作的一个实例通常称为一个“目标”。假设我们要定义一个名为“Fibonacci”的新动作,用于计算斐波那契数列。
2025-04-29 08:30:00
1039
原创 ROS2 Jazzy:创建并使用插件(C++)
恭喜!你刚刚编写并使用了你的第一个插件。关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料。
2025-04-27 08:34:21
869
原创 机器人操作系统ROS2:使用ros2doctor识别设置中的问题
ros2doctor会告知你ROS2设置和正在运行系统中的问题。你可以使用--report参数更深入地查看这些警告背后的信息。不过要记住,ros2doctor不是用来调试代码的,代码里的错误或者系统具体实现上的问题,它解决不了。关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料。
2025-04-27 08:31:36
868
原创 机器人操作系统ROS2:在类中使用参数(C++)
你将创建一个带有自定义参数的节点,该参数可通过启动文件或命令行进行设置。你将依赖项、可执行文件和启动文件添加到软件包配置文件中,以便编译和运行它们,并观察参数的实际效果。
2025-04-27 07:59:57
525
原创 机器人操作系统ROS2:创建自定义的消息和服务接口(C++)
在你刚刚创建的目录中,创建一个名为Num.msgint64 num这是一个自定义消息,用于传输一个名为num的 64 位整数。同样在你刚刚创建的目录中,创建一个名为Sphere.msg这个自定义消息使用了另一个消息包中的消息(在这种情况下是回到你刚刚创建的目录,创建一个名为int64 aint64 bint64 c---int64 sum这是你的自定义服务,它请求三个名为ab和c的整数,并以一个名为sum的整数作为响应。
2025-04-24 07:30:00
1089
原创 机器人操作系统ROS2:编写一个简单的服务端和客户端(C++)
你创建了两个节点,通过服务进行数据请求和响应。你将它们的依赖项和可执行文件添加到软件包配置文件中,以便能够构建和运行它们,并看到一个服务/客户端系统的实际运行情况。
2025-04-23 07:30:00
1268
原创 机器人操作系统ROS2:写一个简单的发布者/订阅者(C++)
你创建了两个节点,通过话题发布和订阅数据。在编译和运行它们之前,你将它们的依赖项和可执行文件添加到了软件包配置文件中。
2025-04-22 07:30:00
967
原创 机器人操作系统ROS2:如何使用colcon创建并编译ROS2工作空间
这是一篇关于如何使用 colcon 创建并构建 ROS2 工作空间的简要教程。它是一个实用性教程,并非用于替代核心文档。
2025-04-21 10:12:42
1183
原创 机器人操作系统ROS2之记录和回放数据
你可以使用ros2 bag命令记录ROS 2系统中通过话题和服务传递的数据。无论你是要与他人分享工作,还是对自己的实验进行内省,这都是一个非常实用的工具。
2025-04-18 08:30:00
834
原创 机器人操作系统ROS2之理解动作
动作类似于服务,它允许你执行长时间运行的任务,提供定期反馈,并且可以被取消。一个机器人系统很可能会使用动作来进行导航。一个动作目标可以告诉机器人前往某个位置。在机器人导航到该位置的过程中,它可以沿途发送更新(即反馈),然后在到达目的地时发送一个最终的结果消息。Turtlesim有一个动作服务器,动作客户端可以向其发送用于旋转乌龟的目标。在本文中,你对 /turtle1/rotate_absolute 这个动作进行了深入探究,更好地理解了动作是什么,以及它们是如何工作的。
2025-04-17 08:30:00
870
原创 机器人操作系统ROS2之理解参数
节点通过参数来定义它的默认配置值。你可以从命令行获取和设置参数值。你还可以将参数设置保存到文件中,以便在未来的会话中重新加载。关注【智践行】公众号,发送 【机器人】 获得机器人经典学习资料。
2025-04-16 08:30:00
725
原创 机器人操作系统ROS2之理解服务
节点可以使用ROS2中的服务进行通信。与主题不同,主题是一种单向通信模式,节点发布可以由一个或多个订阅者使用的信息,服务则是一种请求/响应模式,客户端向提供服务的节点发出请求,服务处理请求并生成响应。通常,服务不适用于连续调用;使用话题(Topic)或动作(Action)会是更好的选择。
2025-04-15 08:30:00
1849
原创 机器人操作系统ROS2之理解话题
节点通过话题发布信息,它允许任意数量的其他节点订阅和获取数据。本节中,您使用rqt_graph和命令行工具检查了多个节点通过话题建立的连接关系。
2025-04-14 08:45:00
879
原创 机器人操作系统ROS2之launch节点
到目前为止,你所做的工作的意义在于,你用一个命令运行了两个海龟仿真节点。一旦你学会编写自己的launch文件,就可以用命令以类似的方式运行多个节点并设置它们的配置。
2025-04-12 10:31:25
331
原创 ROS2进阶之ROS_DOMAIN_ID
如前所述,ROS2用于通信的默认中间件是DDS。在DDS中,让不同的逻辑网络共享一个物理网络的主要机制被称为域ID(Domain ID)。同一域中的ROS2节点之间可以自由相互发现并发送消息,而不同域的ROS2节点则不能。
2025-04-07 09:06:24
821
原创 Trae开发实战之转盘小程序
Trae的基本操作了解之后,就可以实战了。但是一直不知道做点什么。上周四的时候突然想到做一个替我做选择的转盘小程序。比如,晚饭不知道吃什么时候,转一转就有答案了。
2025-04-01 13:23:04
1478
原创 Java泛型实现四向节点矩阵链表
上周碰到一个Java的四向链表题,题目要求用泛型实现具有上下左右指针的四向节点,写一个算法生成 n x n 的四向节点矩阵链表,并写一个main函数接受输入n进行测试。
2025-03-27 12:08:29
619
原创 机器人操作系统ROS2之安装(Ubuntu 24)
根据官网说明,ROS2是支持MAC的,本来打算在手头的MAC 15.3.2装一个,虽然要自己编译ROS2系统,但是想着比虚拟机性能好,就兴冲冲的开始了,也没在意官网提示尽量还是装安装版。比如,如果装的是22版,最后是找不到ROS2 Jazzy的(不要问我为什么知道)。然后再打开另一个终端,同样也是配置环境,然后启动一个Python listener。首先,打开一个终端,输入以下命令配置环境,并打开一个C++ talker:。在使用ROS2前需要先设置环境:。
2025-03-22 17:51:18
1034
原创 机器人操作系统ROS2之简介
节点可以向已经命名的主题(Topic)发布消息,将数据传递给其他节点,或者订阅命名的主题,从订阅的节点获取数据。对于长时间运行的计算,节点可以作为动作客户端(Action Client),让另一个节点代表自己执行计算操作,或者作为动作服务器(Action Server),为其他节点提供功能。同样的,每个动作名称应该始终只对应一个动作服务器。ROS 为各行业的开发者提供了一个标准的软件平台,帮助他们从研究和原型设计一直推进到部署和生产,从驱动程序到最先进的算法,再到强大的开发工具,无需重复造轮子。
2025-03-15 15:48:20
4089
原创 从职高到外企,二十年编程逐梦路
当年以两分之差落榜高中,入学市里最好的第一职业高中,成绩是不错,还入选了专门参加比赛的集训队,每学期都会比赛。每天中午都泡在机房做赛题,当然了,高中生嘛,题目自然也不会那么的难。一是时间上是不对,原稿是初中上的培训班,然后上的职高的计算机专业。也不知道是幸运还是初生牛犊不怕虎,在北京找到了开发的工作,就这么一路从800块的小公司一直干到了外企,到现在了二十多年开发呢!有意思的是今日闲来无事,将此文原稿同样喂给DeepSeek R1润色, 然后出来了一篇让我感觉很是意外的武侠感,而且进行了艺术加工的文章。
2025-03-09 21:15:42
464
原创 Trae国内版发布,安装试试
只见它跳转到了网页,显示输入手机号,看到+86总算是放心了,果然是国内版!后面就正常验证登录即可。左边代码部分,右边可以看到有chat模式和builder模式,builder 还是Alpha版。之前字节跳动预告说3月3日发布Trae国内版,一直在期待中。接着是导入配置和安装Trae终端命令行,程序员应该最喜欢命令行吧,当然也可以跳过。今天一早, 跳动字节果然没有食言:Trae国内版发布了!我打开了一个小程序目录,左边就可以看到文件列表和选中的js文件了!好的,初体验到此,大家可以去愉快的玩耍Trae了!
2025-03-09 21:11:40
805
原创 AI浪潮下的“人味” 之思:想和真人吵一架,都得付费!
到时绘画有AI代劳,文章由AI创作,程序开发也能借助AI之力,甚至连看病都有AI医生,健康管理也能交给AI负责。照此发展下去,或许用不了20年,甚至更短的时间,工作将不再是生活的必需,每个人都成为被服务的一方。赶紧一查,天啊,东京似乎已经出现了 “真人吵架俱乐部”,好家伙,收费高达每小时200美元。我想也许就是真人服务。同时,我相信,届时也会有许多 “叛逆” 的人类,组建返璞归真的社群,重新体验没有智能的生活。不难想象,按照这样的发展速度,AI融入各个行业只是时间问题,智能化、机器化的时代马上就要到来。
2025-03-09 21:04:53
209
Java泛型实现四向节点矩阵链表源码
2025-05-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人