- 博客(38)
- 收藏
- 关注
原创 【ROS包launch报错】ERROR: cannot launch node of type或者Resource not found:
【ROS包launch报错】ERROR: cannot launch node of type或者Resource not found:
2023-12-08 15:27:04
1763
原创 ubuntu yaml库出现undefined reference to `YAML::detail::node_data::convert_to_map错误
【代码】ubuntu yaml库出现undefined reference to `YAML::detail::node_data::convert_to_map错误。
2023-12-04 21:36:32
566
原创 ubuntu中ROS出现无法定位xxx安装包,尝试apt-update
sudo apt-get update会出现一段key报错复制下来。按照重新配置ROS中的导入key。
2023-11-28 11:10:07
204
原创 引用作为函数的返回值
2). 返回堆区对象的引用,这种情况要特别注意,这时候返回函数的引用是作为一个临时变量出现,没有将它赋值给一个实际存在的变量,那么这个堆区对象的内存空间就没有释放,可能造成内存泄漏。”的时候就会把临时变量的值再拷贝给a,假设这个临时变量是t,相当于做了这两个赋值的步骤:t = temp;返回引用实际返回的是一个指向返回值的隐式指针,在内存中不会产生副本,是直接将temp拷贝给a,这样就避免产生临时变量,相比返回普通类型的执行效率更高,而且这个返回引用的函数也可以作为赋值运算符的左操作数,但是这时候需要。
2023-09-10 10:13:04
139
原创 OSI模型
1) IP协议:互联网协议,定义网络层的地址2) ICMP:网络控制消息协议;探测网络连接情况3) ARP:地址解析协议;将IP地址解析为MAC地址4) IGMP:网络组消息协议1) TCP传输:1) HTTP:超文本传输协议, FTP, TFTP,SMTP,SNMP2) DNS:域名服务。
2023-08-08 16:08:35
85
原创 如何解决Git提交版本冲突?
1) 我在分支dev01里修改该文件的内容,例如file02.txt中的count = 2,然后切换到master分支,并且在master中修改file02.txt中的count = 3;2)然后将dev01分支合并到master分支,执行指令git merge。2) 删除报错消息,修改该变量为你需要的值。3)出现merge conflict报错。1) 在当前分支下面打开test.cpp。
2023-08-08 15:04:16
168
原创 Linux线程与进程的区别
资源执行调度的基本单位;有独立的PCB,没有独立的进程地址空间,地址空间共享。资源分配的基本单位;有独立的进程地址空间。
2023-08-06 17:16:59
262
原创 Linux中断处理方式
总的来说,Linux中断处理方式采用了中断向量表和中断处理程序的机制,通过中断信号触发、查找中断处理函数、执行中断处理程序等步骤来处理硬件设备发生的事件。中断处理函数执行:一旦找到了对应的中断处理函数,CPU会跳转到该函数的入口地址,开始执行中断处理程序。中断向量表查找:CPU收到中断信号后,会暂停当前执行的任务,然后根据中断信号的编号,在中断向量表中查找对应的中断处理函数。中断处理程序结束:一旦中断处理程序执行完毕,CPU会恢复保存的进程上下文,并将控制权返回给被中断的进程,使其继续执行。
2023-07-21 14:53:26
252
原创 C++11新特性
右值引用(Rvalue references)和移动语义(Move semantics):引入了&&符号来表示右值引用,支持高效地移动对象而不进行不必要的复制。并发编程支持:引入了线程库(thread)和互斥量库(mutex)等,并提供了原子操作和条件变量等机制,方便进行多线程编程。空指针常量(nullptr):引入了空指针常量nullptr作为空指针的标识,取代了以前的NULL宏定义。统一的初始化语法:可以使用花括号{}来初始化各种类型的对象,包括数组、结构体、类等。
2023-07-20 16:19:22
49
原创 Ubuntu系统下使用VScode进行CMake编译调试C++程序
program为你make生成可执行文件的路径配置, MROR_exe为add_executable生成的可执行文件名称。必须确保你的cmake文件能够编译通过,并make生成可执行文件。一定要提前确保你的程序能够编译并且运行,否则不能调试!给你的程序打上断点,然后按F5,进入调试。1.设置CMakeLists.txt。2.VScode调试。
2023-04-06 16:42:18
1281
原创 CMake 链接时出现undefined reference to 错误
执行cmake出现undefined reference toxx,显示main函数中的类成员函数调用没有声明,但是所有声明已经在MROR.h中写了。1) 可能MROR.cpp文件没有链接到项目,且cpp文件中含pcl库,可能未编译链接。2) 可能项目中使用了函数模板,导致cmake报错失败。将cpp实现文件与h文件合并为hpp。之前新建了一个项目项目文件分布为。
2023-04-06 15:17:11
10853
1
原创 rviz: symbol lookup error: /opt/ros/noetic/lib/librviz.so:报错
之前装了annaconda导致两个QT版本的链接库报错解决方法:把anaconda目录下关于qt5的动态链接库删除rviz就可以重新打开了
2022-12-06 21:17:31
1252
1
原创 Openpcdet训练自己的数据集
本人移植其他的数据集,由于我有自己的image数据,已经按照kitti数据集的格式转换为velodyne, calib, label, image四个文件,并且实现了评估,以及最终的检测结果,所以可能和其他博主不一样。这个函数主要用来生成你的数据字典,一般以.pkl后缀,如果你不需要评估,可以将其中的评估部分删除,原理也很简单。之前训练之后检测框并没有出来,后来我才发现可能是自己的数据集太少,出来的检测框精度太低,于是我在。部分作了一点修改,并在之前加入一个mask限制条件,结果果然出来检测框了。
2022-11-28 17:42:02
5761
12
原创 UKF滤波的简单理解与仿真
一、简单理解(不严谨)UKF的本质是利用随机采样的条件均值代替均值,使用被估计量和量测量的再现样本点计算两者的方差阵。通常通过选取(2n+1)个Sigma点来拟合均值和方差,再用得到的方差去更新卡尔曼增益系数和状态误差。假设存在非线性系统:1)首先选取Sigma点(也就是常说的UT变换),使其满足:2)将得到的Sigma点矩阵乘以相应的状态转移矩阵,得到预测点Xi(或者表示为Xk|k-1),再次重复步骤1,根据预测值,再次使用UT变换,得到新的sigma点集同理...
2022-05-16 17:20:34
1000
原创 视觉slam14讲ch7
已知文件夹pose_estimation_2d2d下面两幅图像1.png 2.png单目相机2d-2d:对极几何验证#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/features2d/features2d.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/calib3d/cal
2022-03-30 21:08:37
423
原创 视觉slam14讲ch6
Ceres拟合曲线#include <iostream>#include <opencv2/core/core.hpp>#include <ceres/ceres.h>#include <chrono>using namespace std;//代价函数struct CURVE_FITTING_COST{ CURVE_FITTING_COST(double x, double y):_x(x),_y(y){} //有参构造函
2022-03-29 14:55:29
159
转载 EKF滤波Matlab代码
close all;clear all;%% 真实轨迹模拟kx = .01; ky = .05; %阻尼系数g = 9.8;t = 15; %仿真时间Ts = 0.1; %采样周期len = fix(t/Ts); %仿真步数dax = 3;day = 3; %系统噪声X = zeros(len, 4); X(1,:) = [0, 50, 500, 0]; %状态模拟的初值%% 建立.
2021-11-02 21:50:25
1768
1
原创 C++学习篇:static局部静态对象
#include <iostream>using namespace std;size_t count_calls(){ static size_t ctr = 0; return ++ctr;}int main(){ for (size_t i = 0; i != 10;i++) cout << count_calls() << endl; return 0;}程序将输出1~10的数字,程序运行时每次static变量都会保存上一次的值.
2021-10-31 15:49:21
310
原创 列主元Gauss消去法的C++实现
#include<iostream>#include<vector>#include<math.h>using namespace std;void print_func(float(*arr)[15], int n);void exchange_func(float(*arr)[15], int n);void sol_func(float(*arr)[15], int n);int main(){ size_t n; float a[15][.
2021-10-30 14:55:15
528
原创 C++学习篇:使用迭代器实现二分法查找
#include <iostream>#include <string>#include <vector>using namespace std;//使用迭代器完成二分搜索int main(){ vector<string> text; auto beg = text.begin(), end = text.end(); //beg和end是要搜索的范围 auto mid = text.begin() + (end - b.
2021-10-30 14:48:31
355
原创 C++学习篇:指针与二维数组
#include <iostream>#include<vector>#include<string>using namespace std;//指针与二维数组的访问int main(){ int v[2][3] = { {1,2,3},{4, 5, 6} }; int(*a)[3] = v; cout << *a << endl; //输出1的地址 cout << (*a + 1) <.
2021-10-30 14:41:09
104
原创 Yacobi迭代法的C++实现
雅克比方程组的公式大家从网上可以找到,这里给出程序的C++代码实现。#include<iostream>#include<math.h>using namespace std;//Jacobi迭代法求解方程组的解int n;double a[100][100], b[100], x[100][100];double e; //定义全局变量void input()
2021-10-29 20:24:50
3108
1
原创 Gauss-Seidel迭代法的C++实现
高斯赛德尔迭代法大家可以从网站上找到相关的公式推导,这里给出它的C++算法实现和运行的结果。#include<iostream>#include<math.h>using namespace std;int n; //定义全局变量double a[100][100], b[100], x[100][100];double e;void input_fun
2021-10-29 20:16:03
5067
1
原创 Newton迭代法的C++实现
#include<iostream>#include<math.h>using namespace std;//1.编制Newton法解方程f(x) = 0的通用程序float func_x(float x); //函数声明float diff_func(float x);int main(){ float x0, e1, x1,tol; int cont = 1; cout << "Please input a roo.
2021-10-29 13:09:01
500
原创 计算N = 1/n*n-1 + 1/(n-1)(n-1)-1 + ...... + 1 / 2*2-1的C++实现
float s1(float N1) //从大到小的计算顺序函数{ float i,sum1 = 0; for (i = 2 ;i <= N1 ; i++) { sum1 += 1.0 / (i * i - 1); } return sum1; //函数返回值}float s2(float N2) //从小到大的计算顺序函数...
2021-10-29 09:51:23
209
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人