设计模式
本文是阅读《(GoF:设计模式——可复用面向对象软件的基础》一书的笔记,对书中阐述的所有设计模式进行了总结,并额外参考了一些其他资料,结合了笔者的思考。 概述 设计模式是为了创建可复用的面向对象的软件而出现的。可复用有这么重要吗?答案是有的。可复用的软件有两大好处:一是方便快速构建类似的软件,二是能更好地适应变化。 对于前者,软件的可复用性一旦提高,就可以形成多个可复用的模块和框架,避...
本文是阅读《(GoF:设计模式——可复用面向对象软件的基础》一书的笔记,对书中阐述的所有设计模式进行了总结,并额外参考了一些其他资料,结合了笔者的思考。 概述 设计模式是为了创建可复用的面向对象的软件而出现的。可复用有这么重要吗?答案是有的。可复用的软件有两大好处:一是方便快速构建类似的软件,二是能更好地适应变化。 对于前者,软件的可复用性一旦提高,就可以形成多个可复用的模块和框架,避...
概述 我们在 ROS1 建图和导航实战 中使用的 ROS 版本为 ROS1 noetic,基于 Ubuntu 20.04, 使用的 SLAM 算法是 gmapping 和 cartographer,而导航算法是 navigation。在其中的“下一步计划”章节中,提到了“尝试 ROS2 及其新特性”,本文即是相应的尝试。本文使用的 ROS 版本为 ROS2 humble,基于 Ubuntu...
概述 本文介绍了如何使用 Docker 容器化技术搭建 ROS2 开发环境,包括官方镜像资源、相关学习资源、实践案例以及问题及解决方案等内容。通过容器化部署,可以实现环境隔离、快速部署和跨平台兼容,大大提升 ROS2 开发效率。 本文重点在于 Docker 和 ROS2 结合使用这一场景,着重说明遇到的几个案例及相关的配置文件,对于 Docker 本身的使用指南建议查阅 Docker 使...
概述 ROS(Robot Operating System,机器人操作系统)是一个为机器人软件开发提供的开源框架。它集成了硬件抽象、底层驱动、常用功能实现、消息传递、包管理等功能,支持模块化开发和分布式计算,广泛应用于学术和工业领域的机器人。需要注意的是,虽然它名为操作系统,实质上是个框架,也可简单理解为众多软件的集合。 ROS 中有众多开源组件可供使用,以实现一个机器人应该具备的各种功...
概述 虽然我是 vim/nvim 爱好者,但在用过 vscode 之后也不得不承认 vscode 也非常好用,甚至在某些方面比 vim 还好用,相比 vim/nvim,它有以下优势: 学习成本低:vscode 基本不需要通过专门阅读其官方文档来学习,它是直观的、容易理解的、形象的。 具备一定的定制能力:vscode 本身只是一个文本编辑器,类似记事本,也类似 vim/nvim。...
起因 很早以前就有相关教程,将 vim 打造成 IDE,但通常仅限于 Linux/MacOS,Windows 对于 Linux 相关的工具一直以来都不太友好,包括 vim。所以即使按照教程配置好了也无法在 Windows 上正常使用。之前我采用 Linux 虚拟机的方式,通过 ssh 连接到虚拟机,然后使用 vim 进行开发,但这样依然比较麻烦,比如文件同步问题等。 我尝试完全转到 Li...
STM32 作为单片机开发的代表之一,其众多理论和方法值得学习,本文是其学习/使用笔记。本文以 STM32F103C8T6 为例,大量参考了其官方手册,其它型号的芯片也有类似的手册。 官方手册 阅读官方手册是个好习惯,如果对官方手册比较熟悉,理解比较透彻,则通常会较少遇到问题,遇到问题也有大概的定位思路,尤其是所谓的“玄学”问题,常常能在其中找到答案,避免浪费大量时间在网上检索。 ST...
最近有重要资料需要备份,研究了下如何备份比较可靠的问题,一番搜索下来,发现光盘是相比移动硬盘(包括固态和机械)更可靠的方式,而光盘中,又以 M-DISC 保存时间最久,其官网宣称可保存千年之久。而我手上正好有两张 M-DISC 光盘,容量为 4.7 GB,它是我在购买华硕光驱(型号为 SDRW-08U7M-U)时赠送的,现在该光驱还在卖:https://item.jd.com/2319041...
本文探讨在 C 语言中如何实现一个队列。 用 C 语言实现队列(或其他数据结构)有以下几个要点: 如何实现泛型?即所有类型适用,即使是自定义结构体。C++ 使用模板可轻松实现。C 语言中实现泛型主要有两种方式:void * 和宏定义。 如何高效地进行内存管理?由谁负责队列本身和数据的内存管理?调用者还是队列模块本身? 基于数组还是链表?一般基于数组比较简单 时空性能?时...
概述 Qt 是 C++ 语言中最流行的 GUI 框架,完全开源,用于开发跨平台的图形界面程序。由于具备跨平台的能力,写一套代码即可在各个平台上运行,且效果基本一致。这里的跨平台包括 Windows、Linux/X11、MacOS、IOS、Android 等。Linux 下的许多应用都使用 Qt 开发。 它的优势主要包括: 使用高效的 C++ 语言。C++ 基于 C 语言,其性能仅...