分类目录归档:研发dev

分布式实时通信—DDS概述

DDS最早应用在美国海军系统,目前已广泛应用于军工、机器人、自动驾驶等领域,国际主流军工厂商、ROS2操作系统等均将DDS作为其控制系统的核心中间件,为各类战舰、机器人等提供可靠、高实时的分布式通信功能。今天就带大家一起了解一下。 阅读全文

C++ lock_guard和unique_lock的区别

C++多线程编程需要对共享的数据进行写保护,以防止多线程在对共享数据成员进行并发写时造成资源争抢而导致出现崩溃或其他不符合预期的结果。通常的做法是在修改共享数据成员前先对互斥锁mutex进行lock加锁,在修改后再进行unlock操作,这个场景中经常会出现由于疏忽或异常导致lock之后未能unlock,最终导致死锁。 阅读全文

C++ std::static_pointer_cast详解

一、概述

static_pointer_cast从表面上看就是静态指针类型转换。细细看来,并不是那么简单,有一个隐形的限制条件。首先这个是c++11里的,更老的编译器不支持,其次指针是shared_ptr类型的,对于普通指针是无效的。还有一般只用在子类父类的继承关系中,当子类中要获取父类中的一些属性时,或工厂模式等需要通过父类参数接收不同子类实例的场景(当然了子类通过多态拥有自己的父类继承来的属性和行为,但是还想知道父类相应的属性和行为,这时,将父类的shared_ptr通过static_pointer_cast转化为子类的shared_ptr,这样就可以使得子类可以访问到父类的方法)。 阅读全文

机器人操作系统ROS—树莓派Pi4B+激光雷达SLAM建图环境搭建(Ubuntu20.04.3 + ROS Noetic)

之前学习ros,nvidia jetson nano板子装的ubuntu18.04系统比较正常,但是pi4b的板子装的raspberry系统会出现各种依赖问题。最近想充分利用下几块Pi4B的板子,反复试了pi4安装官方/非官方的ubuntu18.04.5+ROS Melodic版本,最终都会卡在map-server或rviz等依赖上。最终用Pi4B + Ubuntu20.04.3 + ROS Noetic + RpLidar安装测试成功,记录一下安装过程。 阅读全文

小猪学U3D—塔防-地图布置(TowerDefense-Maze)

上一次,我们学习了U3D的入门,并尝试了简单的弹跳、发射、碰撞效果制作技巧。这次,我们试图挑战下,尝试做一个粗糙版的塔防游戏:通过在敌人必经之路上建造防御塔,以在敌人到达目的地之前消灭它们。我们将通过这个简单游戏的制作来练习地图布置、敌人寻路、锁定敌人并攻击、弹道轨迹、爆炸效果、游戏场景管理、过场动画、3D模型导入、热加载等技术点。 阅读全文

Docker容器内连接宿主机Mysql

今天用docker部署一个web服务时遇到总是连不上宿主机mysql数据库的问题,报SQLSTATE[HY000] [2002] Connection refused,经过测试,宿主机用相同配置可以连上,登入docker容器内就连不上,初步判断容器内通过localhost或127.0.0.1是连不上宿主机的。具体原因和解决方法如下: 阅读全文

Redis主从复制原理及其演变

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

C++线程池ThreadPool实现解析

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