Redis主从复制原理及其演变

Redis 的主从复制经历了多次演化,本文将从最基本的原理和实现讲起,并根据其版本迭代过程,逐步呈现其主从复制的演化,让大家了解到 Redis 主从复制的原理,以及各个改进版本解决了什么问题,最终看到 Redis 7.0 主从复制的全貌。 阅读全文

C++线程池ThreadPool实现解析

C++带有线程操作,异步操作,就是没有线程池。一般而言,当你的函数需要在多线程中运行,但是你又不能每来一个函数就开启一个线程,所以你就需要根据资源情况固定几个线程来执行,但会出现有的线程还没有执行完,有的又在空闲,如何分配任务呢?这时你就需要封装一个线程池来完成这些操作,有了线程池这层封装,你就只需要告诉它开启几个线程,然后直接往里塞任务就行,并通过一定的机制获取执行结果。 阅读全文

C++内存管理

内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存泄漏几乎在每个C++程序中都会发生,因此要想成为C++高手,内存管理一关是必须要过的,除非放弃C++,转到Java或者C#,他们的内存管理基本是自动的,当然你也放弃了自由和对内存的支配权,还放弃了C++超绝的性能。本期专题将从内存管理、内存泄漏、内存回收这三个方面来探讨C++内存管理问题。 阅读全文

多线程std::cout乱序问题解决方法

问题描述

在C++多线程编程中,开发者往往使用cout来打印一些信息,但是往往被人忽略的是,cout在使用时可能会存在线程之间的打印信息乱串的问题,这个问题的原因是”<<“这个操作符是线程不安全的,会造成竞争问题,当采用多个<<拼接时,打印可能在<<时中断,例如下边的写法: 阅读全文

机器人操作系统ROS—使用激光雷达RpLidar A1进行SLAM定位建图

移动机器人在环境中获取障碍物的具体位置、房间的内部轮廓等信息都是非常必要的,这些信息是机器人创建地图、进行导航的基础数据。考虑成本,买了一个SLAMTEC公司的低成本二维激光雷达RpLidar A1进行初步的学习,它可以最快10hz的频率检测360度范围内的障碍物信息,最远检测距离12米,适合室内移动机器人使用。本文讲解如何使用它感知周围环境。 阅读全文

机器人操作系统ROS—树莓派Pi4环境(Raspberry Pi OS + ROS Melodic)

新入手一个Pi4,4核1.5GHz 64位A72处理器、8G内存(想起我的第一台电脑,赛扬处理器+512M内存…),用来做机器人的控制中心。由于树莓派4暂时还无法使用Ubuntu MATE,本文讲解给它安装Raspberry Pi OS系统 + ROS Melodic的过程。 阅读全文

机器人操作系统ROS—入门

上次我们通过机器人操作系统ROS—初探了解了ROS的基本概念和运行机制,并用内置的小龟模拟器进行了测试。本文我们开始学习如何编写自定义的Service/Client节点进行指定msg格式通信、尝试bag的录制和回放、并简单了解下三维可视化。

一、创建ROS msg消息和srv服务格式

参考:Creating a ROS msg and srv

温习一下,上一次我们了解到topic里的Message、ROS Services概念:

消息(msg):

 msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。 阅读全文