- 博客(90)
- 资源 (13)
- 收藏
- 关注
原创 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 763
原创 GPU独显下ubuntu屏幕亮度不能调节解决方法
我自己用pyqt写了一个ui界面,直接调整 /sys/class/backlight/xxx/brightness的亮度:
2024-02-16 10:31:21 713
原创 C++类成员变量初始化顺序陷阱
因为成员变量的初始化次序是根据变量在内存的次序有关系,而变量的内存排列顺序,早在编译期就根据变量的定义次序决定了。这里a_和b_按照定义的顺序来初始化,也就是a_初始化的时候b_还没初始化呢,a_不一定是5。下面这种也是一样的,a_和b_是按照定义的顺序来初始化,即a_初始化的时候b_还没初始化呢。这里肯定是a_先初始化,b_后初始化。,更好的做法是都在构造函数内部初始化。
2024-01-25 22:49:02 413
原创 PX4经纬度转东北天坐标c++代码
附上geo.h和geo.cpp,编译的时候可以把geo.cpp编译成一个library再链接到你的程序,或者和你的程序一起编译。float的精度是不能满足小数点后七到八位的要求的。
2024-01-25 22:30:52 410
原创 mavros和PX4中的海拔高与椭球高转换
同一个位置的两种高度值一般可以相差几十米,只是因为当地平均海平面是和地形有关的,凹凸不平没有规律。而ellipsoid height采用的基准是地球标准椭球模型,它的高度值和地形没有关系,只和到地心的距离有关。下文的mavros指ros1 noetic版本的,ros2版本的我还没研究。
2024-01-25 22:13:40 910
原创 c++信号槽signal2的用法
这里连接信号connect后的函数不能呢个直接用ClassA::func,因为它还没有实例化。所以这里必须用boost::bind处理一下这个类里的函数,把this包含进去,从而让程序在运行时能知道这个函数具体是那个对象的。placeholders时占位符,函数有几个参数就需要几个占位符。c++ boost库提供的signal2很好用,适用于某一处需要执行多个函数,但是具体的函数个数和种类需要在运行时调整的情况。类似的std库里也有std::bind和std::placeholders。
2024-01-25 20:59:23 367
原创 c++类中实例化对象的正确方法
通过拷贝内部的shared_ptr巧妙地解决了这个问题。这是我在阅读ROS1源码时学到的方法,ROS1的subscriber、publisher、timer都是这种构造方式。
2024-01-25 17:27:45 571
原创 ROS1 nodelet用法
nodelet的好处:进程内的ROS话题发布和接收可以省去序列化和反序列化、socket通信的过程,而是通过shared_ptr共享内存实现,对于数据量大的话题也许可以降低延迟减少丢包。但前提是publisher必须用shared_ptr的方法发布话题,比如:
2024-01-25 16:32:30 324
原创 ROS1节点到底有几个线程
python版本的ROS1节点会给每个subscriber,每个timer新建一个线程。c++版本的ROS1节点要复杂得多。roscpp建立了一个global callback queue回调队列,所有的subscriber和timer都将自己的回调add到这个callback queue上.
2024-01-25 15:55:42 1198
原创 ROS导出library供其他ROS包使用
如果想用自己的so动态链接库,一种方法时在target_link_libraries时把这个so库的路径加上。当然如果这个so库本身也是ROS包导出的,那么可以导出到catkin_libraries,这样。
2024-01-24 17:27:01 400
原创 慎用少用c++的static和extern变量-几个常见错误
普通的变量是局部的,只存活于它所在的那个大括号(局部作用域)里,程序运行到超出这个区域后就会被销毁。static修饰的静态变量由于存储于进程的全局数据区,即使程序运行超出了它所在的大括号,该变量依然保持。这貌似给写程序带来了一些便利,但由于类中的static变量是由该类的所有实例化对象所共有,这往往不是我们想要的。举几个常见的例子:比如要写一个周期判断函数,需要记录上一时刻的时间: 这个func函数为了完成计时功能,需要让类ClassA定义一个last_time。如果用static变量就会让f
2024-01-24 17:01:24 1014
原创 c++模板函数的声明和定义必须在一个文件
非要分开写的话,需要在cpp文件中进行模板的显式实例化,但这需要把所有用到的T都列出来。或者在头文件末尾include 这个cpp文件,但这本质和写在一个头文件没有区别,而且由于cpp文件往往没有防止重复include的机制,链接时容易报错重复定义。不同于一般c++函数,声明可以在头文件,定义可以在cpp文件。模板函数的声明和定义必须放在一起,否则编译链接会报错。
2024-01-24 14:58:50 422
原创 ubuntu20根目录扩容
首先,如果你是双系统,需要从windows系统下磁盘压缩分配一部分未使用的空间给ubuntu,注意压缩的空间要邻接ubuntu所在盘的位置。ubuntu根目录/ 或者 /home文件夹有时出现空间满了的情况,可以用gparted工具进行空间的重新分配。resize分配好后点击确认即可,根据硬盘空间大小重分配空间大概需要10MB/s,我用了接近1个小时完成。首先,制作一个安装ubuntu20的系统安装U盘。如果仅仅是把/home文件夹的空间分给/ ,则不需要压缩新空间。退出u盘系统,重新进入ubuntu。
2024-01-24 13:58:35 610
原创 C++函数返回值类型不确定处理办法-函数重载
这样定义肯定是会报错的。因为同名函数的重载只能用于参数列表或者实现(定义)不同,而不能用于返回值不同的情况。对于需要改动的值不加const,对于输入值可以加const保护一下不被修改。换一个思路,可以利用c++函数参数的。
2023-12-14 12:35:05 158
原创 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 202
原创 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 1546
原创 旋翼无人机常用仿真工具
可能需要运行在gazebo上,和无人机的接口也是个问题,可以参考PX4和Ardupilot中关于airsim仿真的描述。简单的质点(也可以加上动力学姿态),用urdf模型在rviz中显示无人机和飞行轨迹、地图等。由于每架飞机真的在运行PX4飞控固件仿真,因此比较占用cpu,一般一台电脑顶多仿真10架(这也是PX4 SITL支持的上限)。支持gazebo、flightgear、jMAVSim、AirSim等仿真软件。利用gazebo仿真,提供gazebo中的简单四旋翼模型。采用虚幻引擎,戴博士搭建的?
2023-05-24 18:30:59 1351
原创 xubuntu安装VNCviewer远程桌面开机自启
树莓派cm4安装了ubuntu20.04(xubuntu桌面,不是gnome桌面),需要实现vnc远程桌面登录树莓派。此处选择tigervnc,其他的vnc比如tightvnc和vnc4server貌似不好用。
2023-05-15 23:21:35 897
原创 ubuntu20安装electron并用electron-packager打包
这是一个用javascript写的,基于electron和nodejs的可以用浏览器打开的gui界面,其中3d显示的部分用的是Three.js。electron有一个好处是可以跨平台。
2023-05-02 19:49:12 1621
原创 多机器人集群网络通信协议分析
本文讨论的是多机器人各层的情况和协议。每个机器人连接一个数据传输通信模块(以下简称为,也泛指市面上的图传或图数一体的通信模块),数传之间进行组网来传递信息。根据ISO的划分,网络通信的OSI模型分为从低到高的7层。电气接口、线缆连接。如网口(RJ45)、RS232串口等。这一层只和硬件有关,传输的是0和1的。数传一般提供串口,但有的数传也同时提供多个串口和网口。对于单片机飞控来说,连接和使用数传的串口是比较容易的。
2023-03-07 16:28:43 2411 1
原创 ROS话题queue_size的含义与设置技巧
publisher中的10就是queue_size,大小并不太重要,一般设置为超过1就行。subscriber中的queue_size大小很重要,需要最新消息的时候queue_size要设置成1,不能遗漏消息时queue_size要设置大一些。
2023-03-04 15:52:55 1933
原创 APM飞控使用动捕等外部定位
机载计算机通过WIFI和vrpn_ros_client获取动捕系统(vicon或者nokov)的无人机定位数据(x,y,z+四元数),然后通过 /mavros/vision_pose/pose 的ROS话题发送给APM飞控。/mavros/local_position/pose 中的四元数可能和 /mavros/vision_pose/pose 中的四元数并不相同,比如可能转了180°。机头朝向动捕坐标系y轴正向时,mission planner上显示偏航角是0°或者360°,方向是正北。
2023-03-03 21:04:44 1351 1
原创 ubuntu Ad-Hoc组网通信
ad-hoc。无中心,自组网,不需要路由器。各个节点即是client,也都具有路由功能。配置表现为所有节点都是一个“热点”,“热点”名称相同的节点自动连接。断开WIFI,再重新打开即可自动连接到my-ad-hoc。(edimax 7811Un,7822UAn都可以)。设置手动IPv4(网关可以不设置)实测相互ping延迟均只有1ms。
2023-01-06 19:50:41 1913 1
原创 集群多机ROS通信中间件:swarm_ros_bridge
最近写了一个无线网络环境下(比如WIFI)多机ROS通信的项目swarm_ros_bridge
2023-01-06 15:45:03 3261 8
原创 安装windows+两个ubuntu(三系统)成功案例
在已有的win10+ubuntu18.04双系统基础上,再安装一个ubuntu20.04
2022-10-04 15:51:04 6739 2
原创 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 3568 4
原创 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 4083
原创 ubuntu下matlab安装使用问题汇总
ubuntu18或者ubuntu20下安装matlab 2018a安装包和参考教程:MATLAB Linux 下载安装与激活运行 - Linux - 蓝色域界 简介 MATLAB是 matrix & laboratory 两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国 MathWorks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,...
2022-03-09 20:01:52 3275 1
原创 最优化方法matlab代码(二) 大规模优化问题
大规模优化问题的变量数量n很大(几千几万),普通拟牛顿类方法每步都需要用大n^2量级的hessen矩阵,因此需要很大的内存并且极大降低了计算速度。因此衍生出了一些解决大规模优化问题的方法:1、L-BFGS方法全称limited-memory BFGS法,是在拟牛顿方法BFGS法(一种对称秩2方法)的基础上,改用前m步的梯度和变量位置来计算拟hessen矩阵的方法。由于前m步的梯度和变量都只是向量而非矩阵,因此L-BFGS方法不需要存储前一步的hessen矩阵,极大减小了内存,因此得名。计算速度上会比
2022-01-03 14:18:18 3364 1
原创 最优化方法matlab代码(一) 牛顿类方法
针对优化问题,常见的优化方法及其特点如下:最速下降法SD迭代点处目标函数泰勒展开用一次函数近似,下降方向dk=-gk,步长alpha由(非)精确线搜索得到,x(k+1)=x(k)+alpha*dk),优化速度慢,迭代次数多,实际应用中几乎不使用了。基本牛顿方法Newton迭代点处目标函数泰勒展开用二次函数近似,dk=-inv(Gk)*gk,步长alpha=1。优化速度快。但是Hessen矩阵Gk不一定是正定和非奇异(可逆)的,而且可能出现迭代方向dk和梯度gk接近正交的情况导致目标函数f下降
2021-11-29 22:52:23 3344 1
原创 四旋翼利用mavros进行GPS坐标指点飞行
先介绍一般px4飞控的xyz坐标指点飞行:利用mavros的 /mavros/setpoint_raw/local 话题可以发送东北天(ENU)坐标给px4飞控进行指点飞行。ENU坐标原点在起飞点,东向为x坐标,北向为y坐标,天向为z坐标。z坐标高度对应/mavros/local_position/local 中的z坐标,根据px4设置的不同可能是气压计、高度传感器或者差分GPS高度。下面介绍如何进行gps坐标指点飞行:户外我们往往希望给定一个gps坐标让四旋翼飞过去,而不是给定一个相对于起..
2021-11-23 17:34:13 4919 1
VScode 针对latex workshop插件的settings.json 模板
2023-06-03
树莓派4b上的ubuntu-server18镜像(16GB卡)网盘地址
2022-10-09
大规模优化问题matlab代码-LBFGS/FR/PRP/BB.zip
2022-01-03
最优化方法牛顿方法matlab代码-从零开始
2021-12-08
iris_usb_camera_down.zip
2021-05-07
协同测距matlab程序和数据.rar
2021-05-01
GHOST WIN7_WIN8系统安装详细.DOC
2020-05-27
matlab的gui的slider滑动条和可编辑文本框动态调整某个参数.zip
2020-05-09
vrep和python联合仿真资料.zip
2020-03-27
乒乓球游戏机protues仿真.zip
2019-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人