自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(92)
  • 收藏
  • 关注

原创 C++多线程编程基础

C++多线程编程基础

2022-12-21 20:02:56 581 1

转载 C++ 内存分配和new delete的使用

内存划分在C++中内存分为5个区,分别是堆、栈、全局/静态存储区、常量存储区和代码区。栈:保存局部变量。栈空间用来存放函数运行时的参数值和局部变量,当一个函数运行结束时,在这个函数中声明的局部变量也会自动销毁。栈的特点是无需人工管理但空间大小有限。堆:由malloc(C++程序员因避免使用)或者new运算符分配的内存。其生命周期由free(和malloc对应)或delete(释放new分配的空间)决定。堆中占用的空间在没有释放之前会一直存在,直到程序结束。堆的特点是自由度高,空间比较大,但程序员必须通

2022-02-23 11:00:42 477

原创 Ubuntu挂载硬盘

格式化目标磁盘sudo mkfs -t ext4 /dev/sda1说明:-t ext4 表示将硬盘分区格式化成ext4文件系统类型。新建dataset目录,并将硬盘挂载到此目录下

2022-01-25 17:03:19 644

原创 QByteArray QString 进制转换

Qt串口的数据传输一般是字符串或16进制字节流,Qt中QByteArray可以看做是c语言中 char*的升级版本。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据。进制转换QString ss = QString("十进制64转为十六进制%1").arg(64, 0, 16);//0代表宽度,16表示16进制,空位补零数字转QString,并保留小数点位数//整数转QStringint num1=123;QString str1 = QStr

2021-09-09 21:27:53 4207

原创 KF和EKF的理解

现实是我们的处理和测量模型都是非线性的,结果就是一个不规则分布,KF能够使用的前提就是所处理的状态是满足高斯分布的,为了解决这个问题,EKF是寻找一个线性函数来近似这个非线性函数,而UKF就是去找一个与真实分布近似的高斯分布。EKF 通过雅克比和偏导数近似非线性模型,但是忽略了高阶导数, EKF的中心思想就是将非线性系统线形化后再做KF处理。Kalman滤波分为2个步骤,预测(predict)和校正(correct)。预测是基于上一时刻状态估计当前时刻状态,而校正则是综合当前时刻的估计状态与观测状态,估

2021-08-26 20:52:35 2767

原创 Jetson Nano安装ubuntu18 + ros melodic

1. Jetson Nano开发板GPU:128 核心 MaxwellCPU:4 Core ARM A57 @1.43 GHzRAM:4 GB LPDDR4储存:Micro SD 至少16GB (我使用的是32GB TF卡)接口:MIPI CSI-2 DPHY x2;千兆以太网接口;M.2 Key E(我这里用于安装无线网卡);显示:HDMI和DPUSB:USB 3.0 x4;USB 2.0 Micro-USB x1GPIO接口注意:充电可以用micro usb或 圆口充电头,但是圆口充

2021-08-05 20:30:56 934

原创 vscode + ros调试

1.vscode下载根据需要选择合适的版本下载,我用的是Jetson Nano开发板,所以选择arm64版,网速可能很慢,可以用迅雷下载vscode版本下载2. 编译在工作空间的src目录下,终端打开vscode方法(arm版): code-oss .按F7,选择gcc编译编译完成后, 按F5调试,此时选择gdb,......

2021-08-05 11:29:40 638

原创 C++ vector在多线程操作中出现内存错误解决方案

C++ vector的reserve和resize详解reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。加入新的元素时,要调用push_back()/insert()函数。resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,就可以引用容器内的对象了,因此当加入新的元素时,用operator[]操作符,或者用迭代器来引用元素对象。此时再调用push_back()函数,是加在这个新的空间后面的。vector在多线程中操作举例:有

2021-07-14 11:27:29 2705

原创 ubuntu16 安装wireshark并使用

wireshark 软件是一款抓包工具,适用于Windows、Linux系统;它能直接与网卡进行数据报文交换。其功能是网络封包分析,即撷取网络封包,并尽可能显示出最为详细的网络封包资料。1.安装1)添加wireshark 下载链接地址,然后更新软件源sudo apt-add-repository ppa:wireshark-dev/stablesudo apt-get update2)在命令行安装wiresharksudo apt-get install wireshark安装过程选择ye

2021-07-03 10:07:19 4938 1

原创 qt自定义信号与槽及关键字emit的使用

一、自定义信号信号从类Dogs 传到类Cats中关键字:signalsclass Dogs{public: Dogs(); { }; ~Dogs(){}; signals : void ageChanged(int age); //虽然是一个函数,但是无需实现,参数age会传递到槽函数public: void Dogs::emitSignal(int age);};class Cats{public: Cats(); void on_a

2021-06-28 20:21:52 1874

原创 linux下qt中使用opencv显示图片

1. 添加opencv库到qt pro中终端中使用命令pkg-config --cflags opencv // 查看头文件目录pkg-config --libs opencv // 查找库文件拷贝显示的路径至qt pro文件中INCLUDEPATH += /usr/include/opencv/LIBS += -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_ar

2021-06-21 19:35:52 789

原创 opencv练习

#include <opencv2/opencv.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>//#include <opencv2/nonfree/nonfree.hpp>#include <opencv2/features2d/features2d.

2021-06-21 19:10:05 152

原创 Linux下sftp的使用

sftp(Secure File Transfer Protocol)是一种安全的文件传送协议,是ssh内含协议,也就是说只要sshd服务器启动了,sftp就可使用,不需要额外安装,它的默认端口和SSH一样为22。sftp通过使用加密/解密技术来保障传输文件的安全性,因此sftp的传输效率比普通的FTP要低,但sftp的安全性要比ftp高,因此sftp通常用于报表、对账单等对安全性要求较高的场景。在同个局域网下,简单使用sftp点击左侧文件,在最下面可以看到其他位置选项,进入到下面这个界面在最下面的

2021-04-20 14:38:02 634

原创 ubuntu16.04 设置动态ip和静态ip及route命令的使用

ubuntu16.04 网卡命名 在给ubuntu的有线网卡或者无线网卡设置静态ip之前,首先我们需要了解有关网卡命名的知识。 在unbuntu16.04之后,ifconfig会发现网卡名eth0变成了enp2s0,wlan0变成了wl类似的名称。1.网卡命名的规则在udev-builtin-net_id 中还提到了网卡的新命名规则/* * Two character prefixes based on the type of interface: * en — Ether

2021-04-20 14:07:08 5268

原创 远程桌面TeamViewer, 向日葵, NoMachine 和 远程控制MobaXterm软件

1. TeamViewer官网下载:termViewer注意:安装teamViewer要选择个人非商业用途,要不然安装不了。teamViewer有windows版本和linux版本2. 向日葵SunloginClient3. NoMachinex86系统下远程可以用向日葵,teamviewer等软件,arm下就没法用,在arm下ZeroTier+nomachine即可实现远程。VLAN(Virtual Local Area Network)的中文名为"虚拟局域网"。虚拟局域网(VLAN)是一

2021-04-01 19:25:26 2081

原创 rosbag包的录制和回放使用详解

1. 话题录制1.1 录制所有发布出来的话题,此时默认将话题保存在一个以当时时间戳命名的文件夹中:rosbag record -a1.2 录制指定话题rosbag record /topic1 /topic12 -o out.bag2. 话题回放2.1 基本回放rosbag play <your bagfile name>2.2 等待一定时间之后发布bag文件中的内容rosbag play <your bagfile name> -d <delay ti

2021-03-10 10:14:46 9156

原创 Window 安装Unity和MapToolbox

Unity安装可参考:Unity 安装个人免费版步骤详解MapToolbox网址:MapToolbox1. MapToolbox 描述:a. This a unity plugin helps user create lanelet2 maps for Autoware efficiently.b. For vector map format (which will become obsoleted), ref to vector_map branch.2.软件要求Windows 10, pat

2021-03-01 20:23:11 944

原创 Ubuntu18安装VTK8.2

视觉化工具函式库(VTK,Visualization Toolkit)是一个开放源码,跨平台的系统,主要用于三维计算机图形学、图像处理和可视化等。1. 安装ccmake 和 VTK 的依赖项:sudo apt-get install cmake-curses-guisudo apt-get install freeglut3-dev2.下载VTK-8.2.0库VTK官方网址自己选择合适的版本进行下载,解压到VTK文件夹下,再新建文件下名为build3. 配置VTK进入build文件夹下:

2021-03-01 15:03:17 9482 14

原创 VSCode+CMake搭建C++编译调试环境-linux版

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、Linux 和 macOS 等操作系统的免费代码编辑器,在2019年的Stack Overflow组织的开发者调研中,VS Code被认为是最受开发者欢迎的开发环境。VS vode特点:开源,免费;自定义配置集成git智能提示强大支持各种文件格式(html/jade/css/less/sass/xml)调试功能强大各种方便的快捷键强大的插件扩展本文主要介绍在linux系统下,利用VSCo

2021-02-19 15:14:52 904

原创 Lambda 的语法

1. Lambda 的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}可以看到,Lambda 主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable 或 exception 声明、-> 返回值类型、{函数体}.示例:[] (int x, int y) { return x + y; } // 隐式返回类型[] (int& x) { ++x; } // 没有 return 语

2021-02-07 19:49:51 2763

原创 multimap和priority_queue的排序问题

multimap和priority_queue的默认排序问题两者默认的都是less模式,但1.multimap构造multimap<T1, T2>时,其实是有个默认的比较函数 multimap<T1, T2, less> ,即按key的升序排列2.priority_queue默认的也是less模式,但是大顶堆即降序排列定义:priority_queue<Type, Container, Functional>Type 就是数据类型,Container 就是容器

2021-02-07 13:17:11 568

原创 Mqtt协议的使用

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量

2021-02-05 17:17:16 2205

原创 linux下利用cmake编译protobuf

protobuf也叫protocol buffer, 是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。protobuf在各种r

2021-01-26 20:37:54 3342

原创 Frenet和笛卡尔坐标系互转

Frenet坐标系在无人驾驶领域被普遍使用,特别是在城市、高速等道路交通环境下无人驾驶的路径规划系统中。Frenet坐标系使用参考线的切线向量和法线向量建立坐标系。相比笛卡尔坐标系,Frenet坐标系简化了路径规划问题。参考论文:Moritz Werling经典的《Optimal trajectory generation for dynamic street scenarios in a Frenét Frame》公式的推导主要有2种多种:a.通过向量关系进行推导. 可以参考:Cartesian 坐

2020-12-29 21:32:04 8182 4

原创 Dijkstra规划算法原理及C++实现

1. 算法原理参考此篇足矣:Dijkstra算法图文详解2. C++ 实现问题描述:有四个节点( 0,1, 2, 3),已知 0和1之间的距离为3米, 1和2之间的距离为4米,2和3之间的距离为2米, 0和3之间的距离为5米。求:1 --> 3的最短距离是多少?思路:采用邻接矩阵法,通过二维vector保存相邻节点的距离,其中:自节点距离为0,不相连节点的距离初始化为一个很大的值INFvector<vector<int>> global_map = {

2020-12-11 11:59:22 257

原创 二维vector的遍历方式和二维数组当函数参数的方式

1. 二维vector的遍历方式1.1 下标法#include <iostream>using namespace std;int main(){ vector<vector<int>> vec = { {1, 2, 3}, {4, 5, 6} }; for(int i = 0; i < vec.size(); i++) { for(int j

2020-12-11 10:36:20 2472

原创 C/C++ 一维,二维数组和二维vector初始化

vector的初始化有很多方式,在N维初始化时还会一些容易出现错误的地方。下面进行总结以下的总结均以int作为模板参数1.一维vector的初始化vector的构造函数通常来说有五种,如下:vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSizevector(int nSize,const t& t):创建一个vector,元素个数为nSize,且值均为tvector(const vector&):复制构造函数v

2020-12-10 10:25:56 2427

原创 ROS中关于移动机器人坐标变换TF详解

一般在urdf文件中都要定义base_link,它代表了机器人的主干,其它所有的frame都是相对于base_link定义并粘在一起的,但本文所述的TF坐标变化不涉及关于urdf的知识点。ROS中常用的定位模块是AMCL, 而AMCL必须需要里程计信息odom才行, 但并不是所有定位模块都需要里程计信息odom才能定位, 如差分GPS等。(能否通过NDT呢,待确定)1. 带里程计odom的TF变换base_link -> velodyne:base_link是移动机器人本体坐标系,激光雷达

2020-12-03 15:46:10 2332

原创 轨迹规划-二次规划QP

1. 二次规划的由来在1940年左右(1939年 Leonid Kantorovich 总结发表了线性规划), 线性规划LP被提出来, 10年后, QP作为Non-Linear Programming, NLP被总结发表。顾名思义, 二次规划就是把一次规划(线性规划, LP)的目标公式扩展到二次函数:这里 Q 是对称矩阵(Symmetric Matrix)那么这样修改目标之后, 会带来什么改变?首先从图上来看, 最大的变化就是二次带来等高线( contour line )不再是直线, 这样使得最

2020-12-01 11:49:21 5963 1

转载 最小二乘法LS

参考这两篇文章即可:最小二乘法的本质是什么?一步一步走向锥规划 - LS

2020-12-01 11:13:33 653

原创 轨迹规划-动态规划DP和最短路径问题

1.简介动态规划Dynamic Programming: 这里的“Programming”并非指编写程序代码,而是指一种表格计算法(A tabular method),即基于表格查询的方法计算得到最优结果。动态规划与分治法(The Divide-and-Conquer Method)有些类似,也是将问题分解为多个子问题,并且基于子问题的结果获得最终解。二者的区别是,分治法将初始问题划分为多个不关联(Disjoint)的子问题(Subproblem)(即子问题相互之间互不依赖),递归地解决子问题,然后将子

2020-11-30 18:37:14 4467

原创 Python中 bisect、diff、cumsum函数及 Python中append和extend的区别

1. bisect1.1 查找 bisect.bisect(array,item)bisect是Python内置模块,主要用于有序序列的插入与查找!使用这个模块的函数前先确保操作的列表是已排序的查找 bisect(array, item)若列表array中无itembisect.bisect 系列返回的是插入索引的位置!import bisecta = [1, 8, 9, 10, 11, 15]pt = bisect.bisect(a, 7)print(pt)print(a)#结果

2020-11-24 20:39:39 238

原创 轨迹规划-三次样条函数插值

1. 原理及公式推导参考此篇足矣:三次样条函数插值(Cubic spline function interpolation)2. 代码实现import mathimport numpy as npimport bisectclass Spline: """ Cubic Spline class """ def __init__(self, x, y): self.b, self.c, self.d, self.w = [], [], [],

2020-11-24 19:06:50 1616

原创 轨迹规划-贝塞尔曲线

1. 简介贝塞尔曲线于 1962 年,由法国工程师皮埃尔·贝济埃(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计,贝塞尔曲线最初由保尔·德·卡斯特里奥于1959年运用德卡斯特里奥算法开发,以稳定数值的方法求出贝塞尔曲线.贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制.先感受一下贝塞尔曲线:贝塞尔曲线2. 公式及原理一阶贝塞尔曲线中

2020-11-24 10:08:48 10398 3

原创 轨迹规划——五次多项式曲线拟合

1.五次多项式求解为了获得一个加速度连续的轨迹,位置和速度需要合适的初始和终止条件,也需要合适的初始和终止加速度值。这样共有六个边界条件,因此需要采用五次多项式:函数关系式为:注意:v(t)公式错误,系数c1后面没有t已知起点(x0, v0, a0), 终点(x1, v1, a1),两点之间,一段轨迹规划的起始时间是t0,结束时间是t1。一般情况下,起点时刻默认为t0 = 0 ,根据五次多项式及其一阶和二阶导,可求得系数:c0, c1,c2将求得的c0, c1,c2再带回原式及其一阶和二

2020-11-23 21:45:20 19610

转载 占据栅格地图构建原理和实现

占据栅格地图构建(Occupancy Grid Map)

2020-11-23 20:39:19 2468

原创 如何利用ros自定义生成局部代价地图以供导航避障使用

1. 想法虽然ros的costmap_2d包对障碍物的考虑很全面,但它主要用在move_base导航包中,而且耦合性很强,很难单独提取出来使用,那如果我手里有个二维激光雷达,而我又不想使用move_base包,那该如何生成局部的代价地图供后续的导航使用,基于此,便写了这两篇文章:主要思路是:sensor_msgs::LaserScan —> sensor_msgs::PointCloud2 —> nav_msgs::OccupancyGrid2. sensor_msgs::LaserScan

2020-11-23 19:37:29 2611 7

原创 将sensor_msgs::LaserScan转化为sensor_msgs::PointCloud2

1. 如何将二维激光雷达数据转化为三维点云,主要用到laser_geometry// laser_geometryvoid transformLaserScanToPointCloud (const std::string &target_frame, const sensor_msgs::LaserScan &scan_in, sensor_msgs::PointCloud &cloud_out, tf::Transformer &tf, int channel_o

2020-11-23 17:42:10 3333

原创 Ubuntu18安装 ros-qtc-plugin并在qt中配置ros环境

1.安装自带 ros-qtc-plugin插件的qt creator(即不需要提前安装qt)qtcreator_ros-qtc-plugin1.1 终端启动命令:qtcreator-ros1.2启动后可以在qt中看到ros插件2.如何将已有的ros工作空间和qt联系起来一般ROS工程没有XXX.workspace文件,无法以工程形式导入。但是我们可以通过新建一个ROS工程,并以与现有工程名相同的工程来打开。第一步、打开装有ROS插件的QT creator第二部、新建ROS工程第三步、

2020-11-19 11:24:43 2018 3

转载 Ubuntu18.04配置Ipopt,CppAD

最简单的配置参考这篇:配置Ipopt,CppAD

2020-10-23 10:32:21 1194

空空如也

空空如也

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

TA关注的人

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