笔记
文章平均质量分 62
集智飞行
机器人,无人机,集群协同控制领域,软硬件经验分享
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
c++函数传参的几种推荐方式
只读 →const T&可能接管 →T(值传递或者std::move())强制接管 →T&&别对const T&用std::move。原创 2025-12-16 15:32:07 · 405 阅读 · 0 评论 -
shared_ptr 快照用于安全地并发读取,无需拷贝
不要维护x,维护std::shared_ptr<const T> x_ptr。然后B线程加锁复制 x_ptr_copy = x_ptr (只是创建了shared_ptr新增计数,没有发生拷贝),然后锁可以释放,B线程后续读取x_ptr_copy时读的是旧内容,即使此时x_ptr被A线程改变了,也不影响B的旧内容。需求:A线程会修改T类型的变量x,B线程要读取x,由于x很大,B读取和操作的时候需要加锁,这样会占用很长的x的时间。B线程先加锁拷贝x到x_copy,然后锁可以释放,后面操作x_copy。原创 2025-12-16 14:22:05 · 196 阅读 · 0 评论 -
A*原理、最优性、一致性、可采纳性理解
https://www.redblobgames.com/pathfinding/a-star原创 2025-10-24 11:13:15 · 153 阅读 · 0 评论 -
约束优化问题的常用解决办法及优缺点、轨迹规划中应用
但是每段多项式中间的采样点处的避碰约束就不能用微分同胚变换,是因为他们关于优化变量(q,T)——也就是中间点位置和时间——是很复杂的变换,没办法写出简单的同胚变换。高飞组的gcopter,egoswarm等的连续时间不等式约束(速度限制、避障等)都是采用的这种罚函数方法来转化为无约束优化,从而用L-BFGS这种无约束优化器求解。目标函数中加入-1/x或者-ln(-G(x)),惩罚接近0的约束,从而转化为无约束优化问题求解。简单的不等式约束如T>=0,可以换一个优化变量。,这里c(x)是等式约束。原创 2025-09-24 20:20:56 · 1126 阅读 · 0 评论 -
usb_cam ros包话题说明,image transport包使用
theora是一个开源的编码解码库,相较于H264性能差一些,也不支持硬件加速,默认是cpu软件编码解码。theora相较于jpeg和png,考虑了帧之间的联系,因此。png是无损压缩,压缩时间更长,一般视频流用jpeg压缩,图片或者深度图可以用png压缩。读取这些话题,除了image_raw可以直接用ros subscriber订阅,其余。如果不使用动态调整工具,可以直接通过 ROS 参数服务器修改相关参数。图像处理和分析,例如使用 OpenCV 处理图像。,我理解每帧只传输了帧之间的差异。原创 2024-11-27 11:12:33 · 700 阅读 · 0 评论 -
word图题表题公式按照章节编号(不用题注)
预期效果:其中3表示第三章,4表示第3章里的第4个图。标题、公式编号也是类似的。为了达到这种按照章节编号的效果,原本可以用插入题注里的“包含章节编号”但实际情况是,这不仅需要一级标题的序号是用“开始->多级列表”自动生成的,而且一级标题对应的章节号往往是汉字“一”、“二”,而不是阿拉伯数字。所以改用另一种方法,自己插入域代码:参考。原创 2024-06-27 17:49:41 · 1860 阅读 · 0 评论 -
Word多级标题编号不连续、一级标题用大写数字二级以下用阿拉伯数字
Word多级标题编号不连续 :原创 2024-06-09 15:24:01 · 1184 阅读 · 0 评论 -
git文件夹瘦身
git历史commit中可能包含一些build文件夹,想要删掉缩小git大小。原创 2024-03-26 14:30:34 · 916 阅读 · 0 评论 -
ubuntu20修改xorg.conf实现双屏幕输出
其中Identifier可以自己命名,区分开就行,Driver其实没那么重要,因为系统会根据插槽上实际的显卡来安排Driver,里面也不是所有参数都是必须的,缺省的系统会自动安排。但有时候有的屏幕输出不对,想手动固定一下配置。如果显卡工作正常是不需要自己手动编写xorg.conf的(这个文件一般不存在或者是空的),系统会根据xorg.conf的缺省自动设置屏幕。我的电脑输出是01:00.0是nvidia显卡,0:2.0是intel集显,注意是十六进制,busID是十进制。原创 2024-02-16 11:18:29 · 4156 阅读 · 0 评论 -
GPU独显下ubuntu屏幕亮度不能调节解决方法
我自己用pyqt写了一个ui界面,直接调整 /sys/class/backlight/xxx/brightness的亮度:原创 2024-02-16 10:31:21 · 2448 阅读 · 2 评论 -
C++类成员变量初始化顺序陷阱
因为成员变量的初始化次序是根据变量在内存的次序有关系,而变量的内存排列顺序,早在编译期就根据变量的定义次序决定了。这里a_和b_按照定义的顺序来初始化,也就是a_初始化的时候b_还没初始化呢,a_不一定是5。下面这种也是一样的,a_和b_是按照定义的顺序来初始化,即a_初始化的时候b_还没初始化呢。这里肯定是a_先初始化,b_后初始化。,更好的做法是都在构造函数内部初始化。原创 2024-01-25 22:49:02 · 576 阅读 · 0 评论 -
c++信号槽signal2的用法
这里连接信号connect后的函数不能呢个直接用ClassA::func,因为它还没有实例化。所以这里必须用boost::bind处理一下这个类里的函数,把this包含进去,从而让程序在运行时能知道这个函数具体是那个对象的。placeholders时占位符,函数有几个参数就需要几个占位符。c++ boost库提供的signal2很好用,适用于某一处需要执行多个函数,但是具体的函数个数和种类需要在运行时调整的情况。类似的std库里也有std::bind和std::placeholders。原创 2024-01-25 20:59:23 · 624 阅读 · 0 评论 -
ROS1工作空间内多个包先后编译顺序、包内编译顺序
在ros工作空间里有packageA和packageB两个包,其中第二个包依赖第一个包。原创 2024-01-25 20:35:14 · 1364 阅读 · 0 评论 -
c++类中实例化对象的正确方法
通过拷贝内部的shared_ptr巧妙地解决了这个问题。这是我在阅读ROS1源码时学到的方法,ROS1的subscriber、publisher、timer都是这种构造方式。原创 2024-01-25 17:27:45 · 1371 阅读 · 0 评论 -
ROS1 nodelet用法
nodelet的好处:进程内的ROS话题发布和接收可以省去序列化和反序列化、socket通信的过程,而是通过shared_ptr共享内存实现,对于数据量大的话题也许可以降低延迟减少丢包。但前提是publisher必须用shared_ptr的方法发布话题,比如:原创 2024-01-25 16:32:30 · 739 阅读 · 0 评论 -
ROS1节点到底有几个线程
python版本的ROS1节点会给每个subscriber,每个timer新建一个线程。c++版本的ROS1节点要复杂得多。roscpp建立了一个global callback queue回调队列,所有的subscriber和timer都将自己的回调add到这个callback queue上.原创 2024-01-25 15:55:42 · 1744 阅读 · 0 评论 -
ROS导出library供其他ROS包使用
如果想用自己的so动态链接库,一种方法时在target_link_libraries时把这个so库的路径加上。当然如果这个so库本身也是ROS包导出的,那么可以导出到catkin_libraries,这样。原创 2024-01-24 17:27:01 · 818 阅读 · 0 评论 -
慎用少用c++的static和extern变量-几个常见错误
普通的变量是局部的,只存活于它所在的那个大括号(局部作用域)里,程序运行到超出这个区域后就会被销毁。static修饰的静态变量由于存储于进程的全局数据区,即使程序运行超出了它所在的大括号,该变量依然保持。这貌似给写程序带来了一些便利,但由于类中的static变量是由该类的所有实例化对象所共有,这往往不是我们想要的。举几个常见的例子:比如要写一个周期判断函数,需要记录上一时刻的时间: 这个func函数为了完成计时功能,需要让类ClassA定义一个last_time。如果用static变量就会让f原创 2024-01-24 17:01:24 · 1516 阅读 · 0 评论 -
c++模板函数的声明和定义必须在一个文件
非要分开写的话,需要在cpp文件中进行模板的显式实例化,但这需要把所有用到的T都列出来。或者在头文件末尾include 这个cpp文件,但这本质和写在一个头文件没有区别,而且由于cpp文件往往没有防止重复include的机制,链接时容易报错重复定义。不同于一般c++函数,声明可以在头文件,定义可以在cpp文件。模板函数的声明和定义必须放在一起,否则编译链接会报错。原创 2024-01-24 14:58:50 · 1027 阅读 · 0 评论 -
ubuntu20根目录扩容
首先,如果你是双系统,需要从windows系统下磁盘压缩分配一部分未使用的空间给ubuntu,注意压缩的空间要邻接ubuntu所在盘的位置。ubuntu根目录/ 或者 /home文件夹有时出现空间满了的情况,可以用gparted工具进行空间的重新分配。resize分配好后点击确认即可,根据硬盘空间大小重分配空间大概需要10MB/s,我用了接近1个小时完成。首先,制作一个安装ubuntu20的系统安装U盘。如果仅仅是把/home文件夹的空间分给/ ,则不需要压缩新空间。退出u盘系统,重新进入ubuntu。原创 2024-01-24 13:58:35 · 1422 阅读 · 0 评论 -
C++函数返回值类型不确定处理办法-函数重载
这样定义肯定是会报错的。因为同名函数的重载只能用于参数列表或者实现(定义)不同,而不能用于返回值不同的情况。对于需要改动的值不加const,对于输入值可以加const保护一下不被修改。换一个思路,可以利用c++函数参数的。原创 2023-12-14 12:35:05 · 667 阅读 · 0 评论 -
c++用#define宏定义来批量实例化对象
如果之后还要对这些对象都进行统一的一系列操作,比如obj1.update(), obj2.update(), ...那就会显得代码非常冗长。此时可以用宏定义来生成类似的模板。参考自 PX4-Autopilot/platforms/common/include/px4_platform_common/param.h。如果要定义的类很多,那 DEFINE_CLASSES 宏定义就会写的特别长。,里面包含了APPLY_ALL宏定义,最多支持149个参数。其中 __VA_ARGS__ 表示 (...) 中的参数。原创 2023-12-14 11:19:35 · 593 阅读 · 0 评论 -
VScode+texlive+sumatraPDF实现正反向搜索
注意:如果不先打开SumatraPDF,而是直接在vscode中 ctrl+alt+V 打开SumatraPDF,反向搜索会失效。SumatraPDF是一个PDF阅读器,也可以不安装而用vscode内部的PDFviewer,但是实现不了正反向搜索功能。:先打开SumatraPDF,再在vscode中 ctrl+alt+V 打开PDF,然后在sumatraPDF中双击。安装完成后打开cmd,输入`tex --version`能显示安装版本,则表示安装成功。安装路径必须是英文。原创 2023-06-05 10:38:55 · 3929 阅读 · 0 评论 -
安装windows+两个ubuntu(三系统)成功案例
在已有的win10+ubuntu18.04双系统基础上,再安装一个ubuntu20.04原创 2022-10-04 15:51:04 · 15348 阅读 · 4 评论 -
github/gitee Readme markdown插入公式方法
github/gitee Readme markdown插入公式方法原创 2022-09-07 22:40:07 · 2244 阅读 · 1 评论 -
GPG error: https://download.docker.com/linux/ubuntu bionic InRelease: The following signatures could
解决报错GPG error: https://download.docker.com/linux/ubuntu bionic InRelease:The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8原创 2022-09-01 14:44:58 · 5651 阅读 · 4 评论 -
解决ubuntu网卡失效-更换内核版本
解决ubuntu网卡和显卡失效的问题-更换ubuntu内核版本原创 2022-08-30 18:39:38 · 3339 阅读 · 1 评论 -
解决ubuntu开机变慢;删除耗时启动项
本文从开机启动项、卸载snap、限制journal大小等方面解决了ubuntu开机慢的问题。原创 2022-08-30 17:58:54 · 15434 阅读 · 2 评论 -
科里奥利力的物理理解、推导与加速度变换
详细介绍科里奥利力的推导、物理意义,以及速度和加速度变换原创 2022-07-07 18:19:37 · 38755 阅读 · 9 评论 -
win10找不到d3dx9_43.dll,无法正常启动0xc000007b
Win10电脑,安装PhoenixRC时,安装好后点击运行,报错找不到d3dx9_43.dll按照网上的一些教程下载d3dx9_43.dll并放到C:\Windows\System32\下再运行regsvr32 d3dx9_43.dll 并没有作用。正确解决办法:1、腾讯电脑管家--工具箱--电脑诊所--软件硬件--丢失dll文件--丢失d3dx**.dll--立即修复。 然后它会帮你安装好DirectX2、之后点击运行PhoenixRC可能会报错“无法正常启动0xc000007b”原创 2022-05-05 22:13:57 · 4327 阅读 · 0 评论 -
ubuntu下matlab安装使用问题汇总
ubuntu18或者ubuntu20下安装matlab 2018a安装包和参考教程:MATLAB Linux 下载安装与激活运行 - Linux - 蓝色域界 简介 MATLAB是 matrix & laboratory 两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国 MathWorks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,...原创 2022-03-09 20:01:52 · 5441 阅读 · 1 评论 -
autosub字幕自动识别生成-最新windows配置方法
给没有字幕的视频或者音频自动生成字幕文件,现阶段没有免费又好用的软件。大致阵营分为两类:1、收费软件太多了,网上一搜一堆。特点是好用,准确,功能丰富。果然钞能力还是好的。2、免费软件没有现成的免费软件。一般网上会告诉你上传youtube后可以自动生成字幕,我看现在这个功能也没了。还有facebook好像也有(国内视频或者社交网站目前都没有自动生成字幕功能,生成中文字幕应该更复杂且收费)唯一的希望落在了一个开源项目autosub:BingLingGroup/autosub: Comma原创 2021-09-28 22:27:35 · 7251 阅读 · 2 评论 -
pdf嵌入字体(不用adobe pdf打印机)
外文会议、期刊投稿一般要求pdf中的字体应当是嵌入状态,避免其他电脑缺失字体导致pdf中文字无法正常显示。1、检查字体是否嵌入可以用Adobe Reader或者Acrobat等pdf阅读器打开后,查看属性->字体,看是否全部字体已经嵌入。此时有字体没有嵌入。也可以用Adobe Acrobat的“印前检查”功能进行PDF分析,该功能可以在 工具->印刷制作 或者 优化PDF 中找到。使用这种方法的好处是可以发现PDF中哪些位置的字体没有嵌入,如下图,双击...原创 2021-09-02 21:34:27 · 22406 阅读 · 9 评论 -
plotjuggler实时绘制ros topic数据流
ros里安装plotjuggler用:sudo apt install ros-melodic-plotjuggler-ros不要用:sudo apt install ros-melodic-plotjuggler这样,plotjuggler才会显示出ros topic subscriber!!!原创 2021-04-26 16:46:53 · 6546 阅读 · 4 评论 -
git项目版本管理经验
使用git管理我的项目1、分支设计gitee上的远程仓库只给一条main分支,作为代码可供他人下载的最新版本。本地的仓库使用git pull和远程的origin/main保持一致,同时每次有改动时新建一个dev分支进行开发,改好后合并到本地的main分支,再git push到远程。git branch dev //新建dev分支,但不转到该分支上git checkout -b dev //新建并转到dev分支git branch -a //查看所有分支和目前所在分支,包括remote远原创 2021-03-27 17:46:42 · 1260 阅读 · 0 评论 -
synergy:多设备共享键鼠win10+ubuntu
如果想用一套无线键鼠同时控制两台电脑,一种方法是购买硬件上就能支持跨设备的键鼠,其原理是一台电脑连接键鼠接收器,其他的电脑用蓝牙连接键鼠,这种设备比较贵,而且一般只有无线鼠标。还有一种方法是安装软件实现,只需要不同电脑连接在同一个局域网下面。常用的跨设备键鼠共享软件有mouse without border,share mouse,synergy。synergy使用好评,好像也只有它可以同时用在windows、mac、linux上。在两台电脑上都安装synergy并打开,一台用作服务器,一台用作客户原创 2021-03-25 11:22:42 · 1294 阅读 · 0 评论 -
四旋翼与四元数学习笔记
为了实现四旋翼无人机的编队控制,重点学习了四旋翼加速度转换为姿态角和推力指令的具体手段,详细学习了四元数、旋转矩阵、欧拉角在四旋翼上的应用,学习了四旋翼的几何控制法、姿态角控制器设计,学习了mavros、c++中四元数有关内容。1、学习了四元数在四旋翼无人机上的应用常见的加速度指令并不是转换为姿态角来控制四旋翼,而是转化为四元数。在mavros的控制程序中,也没有使用欧拉角,而是采用了四元数。这是因为欧拉角存在多种表达方式难以统一定义,而且存在奇异点(俯仰角为90度时),无人机进行大机动时欧拉角容易原创 2021-03-22 17:52:11 · 4129 阅读 · 0 评论 -
ubuntu系统屏幕分辨率只有一个无法修改
新装好的ubuntu系统,如果没有办法调节适当的分辨率和刷新率,多半是没有装显卡驱动。安装方法也很简单,在software&Update里面选择Additional Drivers,选择自己显卡的驱动安装即可,比如我的是nvidia-driver-460安装后重启电脑,分辨率就正常了。在setting->display里面也能调节分辨率和刷新率了。当然,还有一种不装显卡驱动,强制转换分辨率的方法,不推荐:1、打开software updater2、sudo gedit.原创 2021-01-27 10:38:20 · 14100 阅读 · 4 评论 -
pixhawk4 mini重启后死机
pixhawk4 mini通过供电口供电,telement1口连接数传,usb口连接树莓派(机载计算机)此时如果用QGC地面站数传发送reboot指令,pixhawk4 mini关机后就不会再开机了。这个问题可能是供电问题或者信号,因为usb口和供电power口同时连接着pixhawk,usb口和telement1口相当于连接了两个地面站。这是不行的,拔掉连接树莓派的usb线,再通过数传reboot,pixhawk就能正常重启了。因此建议机载计算机不要通过usb口连接pixhawk,尽量还是原创 2021-01-17 18:56:15 · 582 阅读 · 2 评论 -
ubuntu18 xfce安装vnc并设置开机自启
为ubuntu18(xfce桌面,不是gnome桌面)安装远程桌面在介绍安装vnc之前,先推荐一下nomachine远程桌面,对linux友好,官网找到对应系统(x86或者arm64等)的安装包,一步安装,无需任何配置,适用任何桌面。而且默认开机自启,传输的是ubuntu本地的真实视频数据,而不是新开一个桌面,帧率高视频质量好,但是连接后占用cpu也比较高,树莓派4b上可能占用30%cpu。尝试了一下tightvncserver和xrdp,试图用win10自带的远程桌面就能连接ubuntu。没成功,原创 2021-01-13 17:58:29 · 2986 阅读 · 0 评论
分享