自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (2)
  • 收藏
  • 关注

原创 远程服务器或者docker运行GUI程序

目的:远程服务器或者docker运行GUI程序,可以不使用VNC等工具MAC电脑安装XQuartz:window电脑安装:MobaXterm。

2023-07-14 20:43:25 956

原创 dlopen 和 dlsym 动态链接库调用函数

Linux提供了一套API来动态装载库。下面列出了这些API:函数- dlopen,打开一个库,并为使用该库作些准备。spa- dlsym,在打开的库中查找符号的值。命令行- dlclose,关闭库。指针- dlerror,返回一个描述最后一次调用dlopen、dlsym,或dlclose的错误信息的字符串。codeC语言用户须要包含头文件dlfcn.h才能使用上述API。glibc还增长了两个POSIX标准中没有的API- 接口-dladdr,从函数指针解析符号名称和所在的文件。-

2022-03-28 14:51:52 2159

原创 ROS系列之Nodelet---示例nodelet-Node封装为Nodelet

介绍如何将节点封装为Nodelet处理过程添加必要的#includes#include <nodelet/nodelet.h>#include <pluginlib/class_list_macros.h>去掉int main()继承子类 nodelet::Nodeletnamespace systemExample { class SystemNodelet : public nodelet::Nodelet { public:

2022-02-12 22:05:35 810

原创 ROS系列之Nodelet---基础知识

nodelet参考API为什么需要NodeletROS是一种基于分布式网络通讯的操作系统,整个机器人控制系统是由一个Master主节点和若干个功能相对独立的Node子节点组成,这也是ROS系统最主要的特点就是分布式以及模块化的设计。在ROS通讯过程中Master节点存储着各个子节点的topics和services的注册信息,每个功能节点在请求服务之前先向主节点进行注册,然后节点之间就可以直接进行信息传递。ROS的底层通信都是基于XML-RPC协议实现的。XML-RPC协议是XML Remote Pr

2022-02-12 18:04:52 5214

原创 ROS使用catkin_make编译单个功能包和所有功能包

编译功能包catkin_make -DCATKIN_WHITELIST_PACKAGES="需要单独编译的包名"但是如再次使用catkin_make编译所有功能包时会出现仅仅只编译上次设置的单独功能包,如果想要再次使用catkin_make编译所有功能包,需要执行:catkin_make -DCATKIN_WHITELIST_PACKAGES=""切换到所有功能包;...

2021-08-24 10:28:33 8238

转载 解决cv_bridge和opencv之间版本匹配问题

在机器人、无人机项目中会用到ROS,linux下安装ROS时,cv_bridge默认连接的opencv版本是4.0+。但。。。很多开源项目支持的opencv版本是2.0+、3.0+,会导致编译失败。比如:error: ‘CV_RGB2GRAY’ was not declared in this scope那就需要安装新版本的opencv,并且让cv_bridge和新版本opencv正常连接匹配。网上大多数经验都是让你找到cv_bridge的cmake文件,修改opencv新版本的路径,但这种方法治

2021-08-22 23:04:36 2235 1

原创 编译kalibr踩坑之路

使用Eigen库时,遇到Eigen/***: No such file or directory的情况通常Eigen3在/usr/include或者/usr/local/include目录下;在工程使用#include <Eigen/***>时,就会遇到上述问题;解决方案:拷贝Eigen3目录下的Eigen目录到上一级目录或者使用cd /usr/local/include sudo ln -sf eigen3/Eigen EigenNUMPY宏定义为NULLnumpy/core/

2021-08-22 22:58:49 1015 1

转载 相机标定原理 用ROS camera_calibration 功能包 在gazebo中进行 相机校准

相机标定原理 用ROS camera_calibration 功能包 在gazebo中进行 相机校准

2021-01-25 16:12:45 609

转载 Kobuki入门教程-Kobuki控制系统

Kobuki入门教程-Kobuki控制系统说明介绍kobuki控制系统的概念介绍控制系统不同的组件及之间如何交互介绍NodeletsNodelets在kobuki控制系统中被大量使用,相比一般的节点有诸多优点。其最重要的是避免消息在TCP/IP传输中进行序列化和反序列化。它通过将指针传递给消息而不是消息本身来完成的,这意味着信息更快的处理和传输。当使用大的消息,如点云,这也可以显着降低了处理器的消耗。这就是为什么我们实现控制器和Kobuki的控制系统的其他对速度敏感的部分都作为nod

2021-01-23 17:38:05 1977

原创 平面直角坐标系的 旋转矩阵和平移向量

2021-01-05 16:53:53 1335

原创 Calculate distance, bearing and more between Latitude/Longitude points

参考链接:Calculate distance, bearing and more between Latitude/Longitude points#include <string>using namespace std;class PointLatLngAlt{public: double lat; double lng; double alt; string tag;public: PointLatLngAlt(); Poin

2020-12-31 16:15:20 199

原创 UTM坐标与wgs84坐标转换关系

类定义 需要安装Proj库#ifndef PROJECTION_H#define PROJECTION_H// #include <projects.h>#define ACCEPT_USE_OF_DEPRECATED_PROJ_API_H#include <proj_api.h>class Projection{private: projPJ m_pj_wgs84; //球体:wgs84、投影:经纬度投影 projPJ m_pj_utm;

2020-12-31 11:05:47 2498

转载 ROS学习系列:第五讲 — SDF模型文件常用传感器模型

IMU、GPS、磁罗盘IMU、GPS、磁罗盘的观测模型都可用下式描述:• xmx_mxm​为测量值,xxx为真值• bbb为漂移误差• nnn和nbn_bnb​都是高斯噪声,其中nnn为定常误差,nbn_bnb​为bbb对时间的梯度。<plugin name='rotors_gazebo_imu_plugin' filename='libgazebo_imu_plugin.so'> <robotNamespace/> <linkName>/imu_link

2020-12-25 16:56:57 1227 1

原创 ROS学习系列:第四讲 — gazebo模型建立

gazebo模型元素World Files文件包含机器人、灯光、传感器、静态物体。文件格式SDF,后缀扩展名.world。gazebo服务端gzserver读取world文件产生和构成world。Model Files文件格式SDF,但是仅仅包含标签<model> ... </model>。目的是提高模型文件的复用性,并简化world文件。world文件包含model文件:官方提供了很多关于model的数据集。<include> <uri>mo

2020-12-23 14:40:52 1346

原创 运行LIO-SAM踩坑问题

问题描述Same issue when upgrading ROS Melodic code from 4.0.2 to 4.0.3 on Ubuntu 18.04. ROS code compiled correctly however at runtime gave error:error while loading shared libraries: libmetis-gtsam.so: cannot open shared object file: No such file or directo

2020-12-21 16:35:03 4142 3

原创 ROS学习系列:第三讲 — URDF进阶

常规URDF文件用户体验较差,采用xacro模型文件替换;URDF模型文件的进阶xacro模型文件精简模型代码创建宏定义文件包含提供可编程接口常量变量数学计算(所有数学运算都会转换成浮点数进行,以保证运算经度)条件语句模型显示将xacro文件转换成URDF文件显示$ rosrun xacro xacro.py mbot.xacro > mbot.urdf直接调用xacro文件解析器<arg name = "model" default = "

2020-11-20 15:58:02 386

原创 ROS学习系列:第二讲 — URDF机器人建模

URDF定义Unified Robot Description Format,统一机器人描述格式;可以解析URDF文件中使用XML格式描述的机器人模型;ROS同时提供URDF文件的C++解析器;<link> 连接描述机器人某个刚体部分的外观和物理属性;<visual>:描述机器人link部分的外观参数;<inertial>:描述link的惯性参数;<collision>:描述link的碰撞属性;用法:<link name = "&

2020-11-04 11:50:11 659

原创 ROS学习系列:第一讲 — ROS入门

ROS基础同一个工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。通过设置ROS工作空间的环境变量,即可实现ROS工作空间的Overlaying机制,即工作空间的覆盖,实际为切换。ROS通信编程话题编程。服务编程。动作编程。什么是动作(action)一种问答的通信机制;带有连续反馈;可以在任务过程终止运行;基于ROS的消息机制实现;动作(action)接口:goal:发布任务目标;cancel:请求取消任务;status:通知客户端当前的状态;

2020-11-02 16:21:51 676

原创 CPlusPlus基础

CPlusPlus基础const定义:在声明的变量或参数前加上关键字const用于指明变量值不可修改(如const int foo),为类中的函数加上const限定表明函数(常成员函数)不会修改类成员变量的状态( class Foo {int Bar(char c) const; }; )。优点:便于编译器进行类型检测:const常量与#define宏定义常量的区别:~~const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只是简单的字符串替换,不能进行安全检查。

2020-08-25 15:01:09 845

原创 算法推导——卡尔曼滤波

理论推导

2020-07-21 18:01:08 583

转载 [转]UDP(udp通信、广播、组播),本地套接字

转发:c/c++:UDP(udp通信、广播、组播),本地套接字 目录1. udp1.1 udp通信流程1.2 操作函数send、sendtorecv、recvfrom2. 广播2.1 广播通信流程2.2 设置广播属性函数:setsockopt2.3 广播代码3 组播3.1 组播地址3.2&nb

2020-07-16 22:46:28 347

转载 C/C++程序从文本文件中读取(保存)数据

在C程序中:与程序代码外的数据(文件)打交道,我们使用到流(stream)这个概念,实现进程的虚拟内存与文件之间的数据交换。——文件流:C标准库提供了FILE(之所以命名为FILE,因为linux将所有机制都视为文件) ,FILE对象是一个包含了管理流所需的所有信息的结构,包括缓冲区信息、各种标记(如文件结束标记和错误标记)以及用于实际I/O的文 件描述符等。——输入流,输入流:数据从文件传送到内存的叫输入流,数据从内存传送到文件的叫输出流。——打开文件:FILE对象通过调用fopen函数创建的。如

2020-07-08 14:13:05 16109 3

原创 TX2 ubuntu CPU占用率、占用物理内存、占用虚拟内存、进程ID、系统温度

文件解释在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统/proc计算某进程内存占用的程序实现方法.首先, 为什么会有所谓的 伪文件 呢. Linux系统的文件类型大致可分为三类: 普通文件, 目录文件和伪文件. 伪文件不是用来存储数据的, 因此这些文件不占用磁盘空间, 只是存在于内存中. /proc让你可以与内核内部数据进行交互, 获取有关进程的有用信息.下面主要介绍一下 /proc下面的四个文件:/proc/stat, /proc/memi

2020-07-06 10:55:23 644

原创 ORB-SLAM2之线程间数据传递

线程间数据传递System.cc入口函数System::System中初始化跟踪线程 //Initialize the Tracking thread //(it will live in the main thread of execution, the one that called this constructor)mpTracker = new Tracking(this, //当跟踪丢失后,用于系统复位 mpVocabulary, //字典

2020-05-17 22:53:34 613

原创 ORB-SLAM2之局部地图SearchInNeighbors函数

SearchInNeighbors函数数据来源:与当前关键帧共视程度最高的相邻关键帧,以及与邻帧共视程度最高的相邻关键帧;更新的信息:更新融合后的3D点,并更新共视关系;Step 1 获取数据1、获取与当前关键帧共视程度最高的相邻关键帧;2、获取与相邻关键帧共视程度最高的相邻关键帧,添加到待融合的关键帧向量中。Step 2 将当前帧的所有地图点与所有的待融合关键帧融合融合函数matcher.fuse(关键帧,地图点向量)投影当前帧的MapPoints到相邻关键帧pKFi中,并判断是否有重复的

2020-05-17 22:52:24 572

原创 ORB-SLAM2之局部地图CreateNewMapPoints

CreateNewMapPoints函数数据来源:与当前关键帧共视程度最高的相邻关键帧;更新的信息:成功三角化的3D点,添加到成员变量mpMap局部地图句柄。另外将生成的3D点添加到待检验的地图点队列中,进行地图点检验。Step 1 获取数据1、在处理新的关键帧函数中更新连接关系函数已经将与当前关键帧具有共视关系的关键帧进行排序,因此,此处只需要获取权值最高的几组关键帧数据即可。2、获取当前关键帧的变换矩阵:由旋转矩阵和平移矩阵组成3、获取相机中心计算世界坐标系到相机坐标系的平移向量:Rcw

2020-05-11 15:17:08 1367 2

原创 ORB-SLAM2之LocalMapping::ProcessNewKeyFrame()

LocalMapping::ProcessNewKeyFrame()函数需要处理的变量:私有成员变量std::list<KeyFrame*> mlNewKeyFrames;数据来源:Tracking::createNewKeyFrame()函数调用了局部地图中LocalMapping::InsertKeyFrame(KeyFrame *pKF)此函数,将关键帧插入到列表中,同时将终止局部BA的标志置为true。更新的信息:私有成员变量KeyFrame* mpCurrentKeyFrame

2020-05-11 15:15:08 554

原创 常用C++容器

list容器list容器知识list是一种序列式容器,其完成的功能实际上和数据结构中的双向链表很相似,具备链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。常用序列式容器vector:和数组类似,拥有一段连续的内存空间,能非常好的支持随机存取,即[]操作符,但由于是连续的内存空间,在中间的插入和删除会导致内存块的拷贝。list:双向链表,内存空间不连续的,通过指针访问数据。deque:支持[]操作符,也支持

2020-05-11 15:14:25 153

原创 回环检测-入门词袋模型

回环检测的意义前端提供特征点的提取和轨迹、地图的初值,而后端负责对所有这些数据进行优化。回环检测解决整个SLAM过程中的累计误差,形成全局一致的轨迹和地图。回环检测的方法:基于外观(Appearance based)的几何关系。需要理解的概念:感知偏差(Perceptual Aliasing)又称假阳性(False Position FP):不一样的地点,看起来很像的两张图像;感知变异(Pe...

2020-04-18 23:32:39 1097

原创 C/C++中函数参数传递

C/C++中函数参数传递C或C++中函数的参数传递包括:值传递、指针传递、引用传递这三种方法。以经典的交换两个整数为例:问题描述:输入描述:两个待交换的整数。程序输出:交换后的两个整数。值传递#include<stdio.h>void myswap(int x, int y){ int t; t=x; x=y; y=t;}int m...

2020-04-17 21:30:57 222

转载 C++中static在类中使用的含义

static修饰类中成员,表示类的共享数据static修饰类成员C++primer里面说过,static类成员不像普通的类数据成员,static类数据成员独立于一切类对象处在。static类数据成员是与类关联的,但不与该类定义的对象有任何关系。即static不会像普通类数据成员一样每一个类对象都有一份,全部类对象是共享一个static类成员的。例如A类对象修改了static成员为1,那么B对...

2020-04-10 14:54:04 498

原创 Git快速入门

SSH进行git clone利用SSH的方式进行git clone需要在GitHub账户中添加SSH key。$ 打开Git Bash // 此处必须打开Git Bash,不是windows的shell。$ ssh-keygen -t rsa -b 4096 -C “[email protected]” // 一直Enter即可$ clip < ~/.ssh/i...

2020-04-10 14:17:30 142

原创 从ORB-SLAM2的源码工程中学习C++编程——关键帧二

关键帧(共视图)——更新连接关系(和流程相关)/** * @brief 更新图的连接 * * 1. 首先获得该关键帧的所有MapPoint点,统计观测到这些3d点的每个关键与其它所有关键帧之间的共视程度 * 对每一个找到的关键帧,建立一条边,边的权重是该关键帧与当前关键帧公共3d点的个数。 * 2. 并且该权重必须大于一个阈值,如果没有超过该阈值的权重,那么就只保留权重最大的边...

2020-04-05 11:40:51 323

原创 从ORB-SLAM2的源码工程中学习C++编程——关键帧

首先会看到long unsigned int类型的数据:long占四个字节;int的尺寸和平台有关系:①在16位的系统中,int 占据2个字节②在32位系统中,占用4个字节const与static的关系关键帧——初始化函数初始化:关键帧数据库,地图,帧ID,网格用于快速匹配,位姿。KeyFrame::KeyFrame(Frame &F, Map *pMap, KeyFra...

2020-04-05 00:09:31 477

原创 从ORB-SLAM2的源码工程中学习C++编程——关键帧数据库

关键帧数据库构建关键帧数据库,可以联系链表等常用数据结构的构建过程:创建、增加元素、删除元素、清理。首先需要明确数据存储的数据类型:以关键帧作为数据库的元素。这个地方需要理解两个概念:单词(词库)和关键帧。单词(词库):预先构建好的。...

2020-04-04 14:08:01 514

原创 学习史

引言俗话说“活到老,学到老!”。作为一个已经入职工作岗位将近一年的菜鸟,总是有些力不从心。充电工作的研究方向总是会令一个初入职的菜鸟感觉有些不符合心理预期,于是产生很多迷茫的想法。有人曾说“工作是个完全输出的过程。”学生生涯的我们真的学到足够我们输出的程度了么?我们不由的想要否定。由于各种自学提高的想法油然而生,能够坚持下去的学习计划,也总是因为这样或者那样的工作原因而搁浅。我们很多人都知道...

2020-03-22 23:46:48 213 1

转载 g2o图优化应用

参考链接那么,g2o最基本的类结构是怎么样的呢?我们如何来表达一个Graph,选择求解器呢?我们祭出一张图:  这个图第一次看,可能觉得有些混乱。但是随着g2o越用越多,你会发现越来越喜欢这个图……现在请读者跟着我的顺序来看这个图。先看上半部分。SparseOptimizer 是我们最终要维护的东东。它是一个Optimizable Graph,从而也是一个Hyper Graph。一...

2020-02-22 11:45:07 184

原创 相机标定——单目、双目

双目标定https://www.cnblogs.com/polly333/p/5013505.html#include "opencv2/calib3d/calib3d.hpp"#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <vector>#incl...

2020-02-18 15:20:54 407 1

原创 单目相机成像模型——针孔相机模型

本节主要注意四个坐标:世界,相机,归一化相机,像素。针孔相机模型相机坐标转换成像素坐标,由内参数矩阵决定。相机位姿决定世界坐标转换成相机坐标:即外参数矩阵内参数矩阵K为3X3矩阵,对于三维空间点,旋转矩阵R和平移矩阵t构成的外参数矩阵T为4X4矩阵,为了统一维度信息,对相机坐标进行归一化处理,得到归一化相机坐标。注:归一化的Z有可能小于1,因此此处归一化处理时,应该注意。流程:世...

2020-01-01 00:15:30 1966

原创 Ubuntu 命令行连接WiFi

使用iwconfig命令:iwconfig查看无线网络名称:wlan0,并且显示已经和CW-2017连接。使用如下命令,开启无线网络:sudo ip link set wlan0 up或者ifconfig wlan0 up搜索无线网 iwlist wlan0 scan 或 sudo iw dev wlan0 scan | less记下essid即无...

2019-12-17 16:45:30 6894

Quaternion_kinematics_for_the_error-state_KF.pdf

IMU相关推导,是基于误差随时间变化的递推方程;四元数运动学,可以和从零手写VIO相对应学习;以及一些需要和IMU进行数据融合的算法;

2020-12-09

Bags of Binary Words for Fast Place Recognition in Image Sequences.pdf

ORB-slam 最初相关论文,博客提供了全部翻译,主要描述二进制特征对于计算速度的优化。

2019-09-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除