C++ lock_guard和unique_lock的区别

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

小猪学arduino—Wifi图传+遥控坦克

最近调研4G图传控制模组,发现一个不错的wifi图传模块,用起来很简单,但是只能基于模组自身的wifi信号传输而不能走4G。虽然没能满足4G的需求,但是依然可以在很多场景发挥作用,比如近场遥控汽艇、潜艇、无人机、坦克的视频监控,Wifi 2.4G的信号也还是可以传很远距离的,既然还有这么多应用场景,这里就记录下模组的设计和使用方法吧,方便做小玩意时用。 阅读全文

C++ std::static_pointer_cast详解

一、概述

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

机器人操作系统ROS—摄像头标定

最近使用摄像头做三维重建和激光雷达联合建图,发现摄像头所还原的三维点云与激光雷达的点云在不少位置存在明显偏差。使用两个点云构建的地图进行导航对比,还是激光雷达的更加精准,此时很有可能是摄像头的标定不精准导致的,本文就主要讲下如何对摄像头进行标定。 阅读全文

成长之路—激发团队智慧的管理工具

在激发团队活力、挥发团队智慧的过程中,当人数较多时,直接全员集体讨论很容易因大量沉默者、少量大嗓门、部分游离者导致效果不佳,这时作为组织者,通常需要使用一些管理工具,这些工具相互关联、常组合使用,今天在这里统一进行汇总整理。 阅读全文

小猪学arduino—使用QGPMotorShiled驱动板制作排爆机器人

五一疫情防控不能外出,呆在家里实在无聊,决定跟儿子一起做个排爆机器人,需要同时控制4个舵机、2个底盘电机、1个无线手柄的控制和接收,但L298P只有1个伺候,再外挂个16路舵机板的话有点太乱了。偶然间看到一块功能比较全面的驱动板,可以同时驱动电机、舵机、蓝牙、超声波等,我们就使用这块板子尝试做个排爆机器人。 阅读全文

成长之路—《精要主义》读后感

最近这两年感觉自己总是忙的晕头转向,工作、生活、健康、学习难以平衡,最后感觉哪方面都没做好,直到我看了一本书《精要主义》,读后根据书中的方法进行实践,发现生活确实美好了很多,虽然因此失去了一些东西,但也因此得到了一些更宝贵的东西。 阅读全文

机器人操作系统ROS—使用麦克风阵列实现声源定位及语音控制

上一次带大家实践视觉建图与导航后,有朋友留言想给机器人增加语音控制功能,本文就带大家一起实现。为了使效果更佳,例如当叫机器人“过来”、“到我这来”等时,需要机器人能找到说话所在的方向,所以我们将采用麦克风阵列。 阅读全文

机器人操作系统ROS—自研底盘的精准控制

我们完成SLAM建图后,如何在导航时让自己的底盘正常工作,是很多新手面临的问题。上位机大家通常采用pi或nvidia jetson nano甚至更强算力的板子,系统一般采用ubuntu,这使得上位机的库几乎是通用的;而底盘不同,单片机有stm32、arduino、51等,电机的种类就更多了,电机的精准度和质量参差不齐,容易在底盘动起来后难以实现精准控制。如何利用电机编码器进行精准的底盘移动并上报odom,不少人会在这里花费大量时间,本文将针对此类问题进行具体讲解。 阅读全文