- 博客(104)
- 收藏
- 关注
原创 进程编译连接动态库,需要将动态库改为lib***.so
1、本身该库可能编译成npuDetect.so,但是需要改其名字为libnpuDetect.so,CMakelists才能找到该库2、进程中连接动态库,如果该库还依赖别的动态库,则需要继续把其他的库也要连接进来
2021-09-30 09:33:01
225
原创 将Linux系统下交叉编译的依赖库推到ARM平台下无法建立以来关系解决
问题:平常把opencv库使用源码交叉编译好之后,从windows推到飞机里发现,该库的依赖关系都没有了,导致程序运行的时候报该库大小有问题解决办法:1、将linux下的库推到ARM平台中的一个文件夹中,然后将ARM平台下的文件夹再拉出来,这样一去一来,这些库的依赖关系都会消失,然后就可以把该文件的库copy到windows下2、最终从windows下推到ARM平台的opencv库就会显示正常大小...
2021-08-09 22:12:11
590
原创 结构体指针需要申请指针内存,结构体对象不需要申请对象内存
struct frame_info{char* data;//图像数据int bufsize;//图像大小};1、struct frame_info* finfoDT = new struct frame_info;finfoDT->data = new 1280*7202、struct frame_info finfoDT = new struct frame_info;finfoDT.data = new 1280*720..
2021-08-03 14:38:02
648
原创 ROS系统中的多个版本Boost问题
1、删除多余的boost版本,只需要删除该版本的libboost*库以及Boost的头文件,不需要使用sudo apt-get rm --pugre libboost-devsudo apt-get armove libboost-dev;这种卸载会把很多Boost依赖的库删掉;想要单纯的只删除当前版本的Boost库,只需要找到libboost库所在目录删掉就行2、...
2021-07-28 00:24:09
1355
原创 传输协议上的字节解析问题
1、 低字节在前,高字节在后2、0x01高字节 , 0x00 低字节,如何组合成一个字节3、0x01 = 0000 0000 0000 00014、0x00 = 0000 0000 0000 00005、按照组合规则,低字节在前,高字节在后组合成的新数据6、0x01 + 0x00 = 0x0001...
2021-07-18 21:48:20
1161
原创 linux的进程与库之间的通信两种方式
文章目录前言一、进程A与算法库b的通信方式之一:动态dlopen加载算法库b具体的实施细节:二、进程A与算法库b的通信方式之二:进程A编译的时候连接上算法b具体的实施细节:2.读入数据总结前言像我平常主要是视觉算法的落地应用,有时候算法效果实现了,但是要想要用产品上需要工程的实践来串联起算法和整个产品的连接关系。大部分AI的产品,算法一般实现之后,对外只会留两个接口:1)输入图像、激光雷达、Imu等数据;2)输出算法的结果:机器人的状态估计位置、速度、方向、图像的检测推理后筛选的坐标等;但是这仅仅..
2021-07-18 21:37:12
378
1
原创 python读取excle表格数据,将数据编辑到图像上工程
这里写目录标题一级目录:python读取excel表格内容二级目录:python如何分割字符串三级目录:python如何在图像的相应位置编辑文字或者字母、数字一级目录:python读取excel表格内容二级目录:python如何分割字符串三级目录:python如何在图像的相应位置编辑文字或者字母、数字...
2021-07-02 22:48:19
173
原创 C++11 多线程库使用说明
多线程基础1.1 进程与线程根本区别:进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位开销方面:每个进程都有自己独立的代码和数据空间,程序之间的切换开销较大。线程可以看作是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换开销小。所处环境:一个操作系统能同时运行多个进程(程序)。在一个进程中,可以有多个线程同时执行。内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间。对线程而言,系统不会为线程分配内存(线程.
2021-06-06 14:56:30
609
原创 memcpy(cv::Mat.data,unsigned char *,320x240),保存数据失真问题解决方法
1、memcpy(unsigned char *C,cv::Mat.data A,,320x240),首先A是图像完整的,通过copy到C中的时候,再copy到新的cv::Mat 图像的对象上时,图像发生失真memcpy(cv::Mat B.data,unsigned char *C,320x240),保存数据失真问题解决方法...
2021-05-09 15:52:01
2045
1
原创 ROS环境下跑orb-slam2 单目相机
1、配置环境、安装ROS ubuntu16.04 + kinetic2、安装依赖 cmake opencv Eigen3:sudo apt-get install libeigen3-dev3、创建catkin_ws 文件夹,并ROS初始化工作空间mkdir -p ~/catkin_ws/srccd ~/catkin_ws/srccatkin_init_workspacecd ~/catkin_ws/catkin_make4、git或者手动下载ORB-SLAM2的源代.
2021-03-02 22:31:33
793
2
原创 linux安装VScode
1、从官网下载Visual Studio Code 安装包下载地址:https://code.visualstudio.com/docs?dv=linux642、解压下载的VScode安装包tar -xzvf code-stable-1554971043.tar.gz3、将解压的文件夹 VSCode-linux-x64移动到目录 /usr/local下mv VSCode-linux-x64 /usr/loacl/4、赋予刚刚文件夹所有权限sudo chmod -R 777 /..
2021-02-06 21:46:20
718
原创 C++中静态成员数据初始化问题
C++中静态成员数据初始化问题1、静态成员变量:定义为静态成员意味着它能被所有的实例化对象所共有,其修改值为该类的其它所有实例所见。下面看一个例子class people{public: people(int i):id(i) { num++; } private: static int num; int id;};num为静态成员,每调用有参构造一次num就自加.
2021-02-04 23:49:35
1808
原创 orb-slam2 代码逻辑梳理
一、include头文件内容梳理1、System.hclass System 一个系统类System(const string &strVocFile, const string &strSettingsFile, const eSensor s
2021-01-26 10:44:50
99
原创 orb-slam2在PC和ARM上运行
标题这里写自定义目录标题标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何
2021-01-26 00:03:26
728
原创 C++获取一段算法程序耗时方法
1、添加头文件库#include <chrono>2、代码编写std::chrono::steady_clock::time_point t1 = std::chrono::steady_clock::now();std::chrono::steady_clock::time_point t2 = std::chrono::steady_clock::now();std::chrono::duration<double> time_used12 = std::ch..
2021-01-12 15:50:34
216
原创 VIO-slam 系统构建
文章目录系列文章目录 前言 一、VIO系统数据的获取:图像传感器选型、IMU传感器选型 二、建立linux系统+ROS环境 三、如何读取图像数据 四、如何读取IMU传感器数据 五、标定图像和IMU数据的外参、相机的内参 六、移植VINS-MONO或者VINS-FUSION:主要调试获取图像和imu的订阅数据 总结1、基础矩阵、单一性矩阵、本征矩阵为什么能计算出相机的旋转和平移;其原理是什么2、相机旋转的时候为什么能用IMU进行测量其旋转的角度...
2020-12-27 22:48:59
900
2
原创 SLAM后端优化之-核函数
1、核函数作用:保证每条边的误差不会大的没边,掩盖掉其他的边在SLAM后端优化中,BA优化了所有的相机姿态和所有路标点,使用的最小化误差项作的二范数平方和作为目标函数;当我们的误差来源特别大的时候;BA优化会朝着错误的方向优化,这个是我们不想看到的;出现这种问题的原因是,当误差项来源很大的时候,二范数增长的太快了,这个时候核函数的作用就体现出来了:未来保证每条优化的边误差项不会大到无法接受。...
2020-12-14 23:39:24
733
原创 opencv的pnp()算法接口是相对于3D点,输出的是相机与3D点之间的R和T
1、情况一:两帧图像 -》 提取特征-》特征匹配-》通过2d-2d计算 F基础矩阵、E 本质矩阵 、H 单一性矩阵 -》解析出 相机自身的运动R和T -》再通过三角化,将2d点转为相机的3d点(每个空间点在两个相机坐标系下的投影3D坐标与像素2D坐标)再通过pnp()算法,输入3d 、2d 、R、T-》输出相机相对于空间3D点的R和T的关系2、情况二:一张图像-》获取2d点和计算图像平面上的2d点相对于固定平面中心点O的每个3D点-》再通过pnp()算法,输入3d 、2d 、R、T-》..
2020-12-01 18:52:51
683
1
原创 视觉slam重点知识笔记
1、除了基本矩阵和本质矩阵,我们还有一种称为单应矩阵(Homography)H 的东西,它描述了两个平面之间的映射关系。若场景中的特征点都落在同一平面上(比如墙,地面等),则可以通过单应性来进行运动估计。这种情况在无人机携带的俯视相机,或扫地机携带的顶视相机中比较常见。2、...
2020-11-30 19:31:23
207
原创 图像之间特征匹配之后,深度d计算方法
for ( DMatch m:matches ) { ushort d = d1.ptr<unsigned short> (int( keypoints_1[m.queryIdx].pt.y )) [ int ( keypoints_1[m.queryIdx].pt.x ) ]; if ( d == 0 ) // bad depth continue; float dd = d/5000.0; ...
2020-11-27 17:36:40
640
原创 SLAM系统工程,常用数据集下载链接(TUM KITTI DSO Mono EuRoC)
TUM链接:https://pan.baidu.com/s/1nwXtGqH 密码:lsgrKITTI链接:https://pan.baidu.com/s/1htFmXDE 密码:uu20DSO链接:https://pan.baidu.com/s/1eSRmeZK 密码:6x5bMono链接:https://pan.baidu.com/s/1jKaNB3C 密码:u57rEuRoC链接:https://pan.baidu.com/s/1miXf40o 密码:xm59K
2020-11-01 17:28:44
727
原创 (视觉和激光传感器)SLAM 做室内GPS与室外真实GPS在无人机上的对比
1、室外无人机GPS的作用1)记录实时无人机起飞点与当前飞行无人机的绝对位置关系,显示当面无人机离起飞点的真实距离2)做室外无人机悬停的功能,使用GPS当前点与悬停点GPS经纬度做对比3)无人机上层应用,像汽车的导航一样,无人机在天上进行导航2、视觉和激光传感器)SLAM 做室内GPS作用1)记录实时无人机起飞点与当前飞行无人机的绝对位置关系,显示当面无人机离起飞点的真实距离2)做室内无人机悬停的功能,使用无人机slam系统计算的位置i>在有地图的情况下,也能给出无人.
2020-10-29 11:48:40
1927
原创 explicit关键字详解(C++ )
一:首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式).class CxString // 没有使用explicit关键字的类声明, 即默认为隐式声明 { public: char *_pstr; int _size; CxString(int size) ...
2020-10-28 11:12:32
157
原创 C++函数返回引用的含义
引用的意思就是说返回变量的地址而非变量本身。这样子函double数结束之后存储返回值的内存单元不会被销毁,保留了它的地址。例如下面这个例子:int a=1,b;b=a;b++;这个例子里执行完之后a为1,而b为2。但这个例子:int a=1;int *b;b=&a;//指针b获取了a的地址(*b)++;a和b的值都会变为2...
2020-09-17 23:49:49
702
原创 stdout标准输出、stderr标准错误输出 标准输入、标准输出、标准错误输出分别被定义为0、1、2。
$ make > compile.log 2>&1首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到 compile.log 这个文件中。这样我们就可以将所有的输出都存储到文件中了。
2020-08-27 16:10:17
915
原创 使用视觉信息,为什么能把移动机器人的空间位置信息记录下来
1、首先由相机的世界坐标系,物体的世界坐标-》相机坐标-》到投影面坐标-》到像素坐标;最终一个世界中物体的三维点被记录在相机的一个转化的坐标系中;当同时拿到很多的物体坐标时候,此时相机中就拥有了该整个观察到物体的坐标位置;但是有个问题,怎么把相机1的观察到的物体坐标信息;传递给相机2因为相机2观察到的坐标可能与相机1观察到的物体坐标,转换后的位置不一样...
2020-08-23 17:22:49
143
原创 C++的命名规范
1、 变量名前缀i_ 类内数据成员(对象级成员) instance scopec_ 类内静态数据成员(类级成员) class scopeg_ 全局变量 global scopef_ 文件作用域变量(静态变量) file scope2、 类型名首字母大写,末尾加_T。如: class TnppCoverageArea_T{…};...
2020-08-22 14:19:54
197
原创 在linux系统中安装VSCode(Visual Studio Code)
1.从官网下载压缩包(话说下载下来解压就直接可以运行了咧,都不需要make)访问Visual Studio Code官网https://code.visualstudio.com/docs?dv=linux64我是64位的:wgethttps://az764295.vo.msecnd.net/stable/7ba55c5860b152d999dda59393ca3ebeb1b5c85f/code-stable-code_1.7.2-1479766213_amd64.tar.gz2.解压 ..
2020-08-14 22:44:16
867
1
原创 Cmakelists一版教程
cmake_minimum_required(VERSION 3.00)project(just_test)set(CMAKE_CXX_STANDARD 11 )# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread" )set(SOURCE_FILES main.cpp)SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -g -Wall")# OpenMPFIND_PACKA.
2020-08-11 18:56:00
306
原创 PID控制无人机
1、有效的办法就是,根据距离目标值的远近来调节云台的速度,离得远就转快一些,离得近就慢一些。这样就需要我们实时获取云台当前的实际角度,然后和目标角度做对比,根据差值来动态地调整云台的速度和方向。2、根据无人机距离停机目标的高度,高度较远控制量就大一些,高度较近的时候,控制量就小一些。...
2020-06-28 10:51:26
1530
原创 使用宏的可变参数来构造打印Log宏
#define Test_Debug#ifdef Test_Debug #define DBG_ERR(fmt,args) printf(fmt,__FILE__,__FUNCTION__,__LINE__,##args)#endifvoid printf_erro(int a,int b){ if (a < b) { //DBG_ERR("%d\n",888); //printf("%s %s %d %d\n", __FILE__...
2020-05-17 22:38:52
228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人