- 博客(57)
- 资源 (6)
- 收藏
- 关注
原创 FAST-LIO公式推导
原代码对新手似乎不是很友好,所以用Eigen重新实现了Fast-LIO的核心功能https://gitee.com/ghowoght/simple_lio本文中变量命名与Fast-LIO论文中不尽相同,比如为了便于阅读而忽略了很多上下标,如有误解之处,敬请指正。
2022-09-06 19:53:59 4562 19
原创 轨迹优化 | Minimum-jerk
使用路径规划可以得到一系列的路径点,如下图所示有5个路径点,这条路径是很曲折的,这不利于机器人的移动,试想一个机器人直接沿着这条路径进行移动,当到达一个路径点后速度减到零,原地旋转,指向下一个路径点,再继续移动,这不仅智障,而且浪费能量。于是我们就想,能不能规划出一条轨迹,使机器人能够在每一个路径点处能够平滑过渡,从而表现得机灵一点。这就是轨迹规划问题。路径规划得到的路径点轨迹优化得到的轨迹(橙色)二次规划(Quadratic Programming, QP)由于轨迹规划问题
2021-12-11 21:19:42 5520 5
原创 Mahony姿态解算算法详解
本文将介绍Mahony姿态解算算法,不涉及磁力计部分,程序源代码见:https://x-io.co.uk/open-source-imu-and-ahrs-algorithms/姿态的表示方法欧拉角物体姿态最直观的表示方法就是欧拉角,一个坐标系相对于另一个坐标系的转动,可以通过围绕三个正交轴的转动来表示,这三个转动角被称为一组欧拉角。常用的欧拉角组是横滚角(rollrollroll,ϕ\phiϕ)、俯仰角(pitchpitchpitch,θ\thetaθ)、偏航角(yawyawyaw,ψ\psiψ),
2021-11-28 17:14:00 7780 4
原创 路径规划 | 图搜索算法:JPS
JPS算法全称为Jump Point Search,也就是跳点算法,可以视为A*算法的一种改进算法,它保留了A*算法的主体框架,区别在于:A*算法是将当前节点的所有未访问邻居节点加入openlist,而JPS则是使用一些方法将有“价值”的节点加入openlist,具体方法就是本文的内容。以下面两图为例,简单说说JPS的改进效果。两图中深蓝色的点表示在openlist中的节点,淡蓝色表示已经探索过的节点。可以观察到JPS算法的openlist最多只有4个节点,而A*算法的openlist中则有非常多的节点。
2021-04-22 17:00:28 8049 7
原创 路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT*
基于图搜索的路径规划算法主要用于低维度空间上的路径规划问题,它在这类问题中往往具有较好的完备性,但是需要对环境进行完整的建模工作,在高维度空间中往往会出现维数灾难。为了解决这些问题,本文将介绍基于随机采样的路径规划算法。这类算法适用于高维度空间,它们以概率完备性(当时间接近无限时一定有解)来代替完备性,从而提高搜索效率。概率路图算法(Probabilistic Road Map, PRM)PRM算法首先使用随机采样的方式在环境中建立路径网络图,将连续的空间转换为离散的空间,然后在路径网络图上进行路径规划
2021-02-18 09:54:13 6100 5
原创 路径规划 | 图搜索算法:DFS、BFS、GBFS、Dijkstra、A*
地图数据常常可以用图(Graph)这类数据结构表示,那么在图结构中常用的搜索算法也可以应用到路径规划中。本文将从图搜索算法的基本流程入手,层层递进地介绍几种图搜索算法。首先是两种针对无权图的基本图搜索算法:深度优先搜索(Depth First Search, DFS)、广度优先搜索(Breadth First Search, BFS)。它们的区别在于openlist(后面介绍)所选用的数据结构类型不同,前者使用栈,后者使用队列;之后引入一种启发式搜索算法:贪婪最佳优先算法(Greedy Best Firs
2021-01-25 13:28:33 7912
原创 语音信号处理 | 傅里叶变换、短时傅里叶变换、小波变换、希尔伯特变换、希尔伯特黄变换
在信号处理领域,存在诸多变换,比如标题中的五个变换。本文将对这五个变换进行介绍和比较。在开始之前,我们需要先理清什么是平稳信号,什么是非平稳信号。我们知道,自然界中几乎所有信号都是非平稳信号,比如我们的语音信号就是典型的非平稳信号。那么何谓平稳信号和非平稳信号呢?一个通俗的理解即,平稳信号在不同时间得到的采样值的统计特性(比如期望、方差等)是相同的,非平稳信号则与之相反,其特性会随时间变化。在信号处理中,这个特性通常指频率。通常傅里叶变换只适合处理平稳信号,对于非平稳信号,由于频率特性会随时间变化,为了
2020-06-25 21:06:10 23173 16
原创 语音信号处理 | 基于卡尔曼滤波的语音增强算法
文章目录1.概述2.卡尔曼滤波原理被估计的信号离散卡尔曼滤波算法参数选择3.基于卡尔曼滤波的语音增强算法语音模型分析参数确定4.程序实现语音数据的导入、加噪与分帧卡尔曼滤波器参数初始化卡尔曼滤波过程结果可视化5.运行结果与结果分析运行结果结果分析1.概述语音增强算法可从信号输入的通道数上分为单通道的语音增强算法与多通道的语音增强算法。单通道语音系统在实际应用中较为常见,如电话,手机等。这种情况下语音与噪声同时存在一个通道中 ,语音信息与噪声信息必须从同一个信号中得出。一般这种语音系统要求噪声比较平稳,以
2020-05-09 21:24:17 13166 6
原创 照片EXIF数据统计与可视化
拍的照片越来越多,想要了解一下日常拍摄的习惯,便于后面换镜头、调整参数等操作,所以写了这个脚本来统计照片的EXIF数据。该脚本用于统计指定文件夹下所有JPG图片的EXIF数据,包括快门速度、ISO、焦距、光圈和拍摄时间,并生成相应的分布图。
2024-09-22 10:57:06 527
原创 Sophus使用记录
/ Sophus::SO3可以直接从旋转矩阵构造// 亦可从旋转向量构造// 或者四元数// 从旋转矩阵和平移向量构造// 从四元数构造。
2023-09-16 21:31:31 425 1
原创 C++/Python文件读写
为了方便开发,写了一个文本读写程序,能够读写二进制/文本格式的文件,程序只由一个头文件组成,可以很方便地加入到现有程序。
2022-07-31 11:38:31 826 1
原创 Windows的C++开发环境搭建(基于vcpkg+CMake)
一直以来,作者都认为在windows中使用cmake开发C++是一件很难搞的事,windows不像linux那样能方便地对各种C++软件包进行管理,直到发现了vcpkg这个包管理器,才终于使我的windows C++开发体验好了起来。本文使用vcpkg作为包管理器,cmake作为项目的构建工具,在VS2022/VSCode等IDE或编辑器上搭建C++开发环境。.....................
2022-06-17 15:02:03 5092 4
原创 Ceres-Solver使用指南
使用Ceres求解非线性优化问题一般包含如下步骤:构建cost function构建待求解的优化问题配置求解器参数并进行求解求根求解12(10−x2)\frac{1}{2}(10-x^2)21(10−x2)的根:#include <iostream>#include <ceres/ceres.h>/* 1.构建代价函数 */class CostFunc{public: CostFunc()=default; template<type
2022-05-22 20:41:55 1422 2
原创 FRP + NoMachine远程桌面开发指南
在FRP内网穿透(远程ssh终端+rdp桌面配置)中介绍了如何远程使用FRP+RDP进行外网远程桌面访问,但是实测很卡(在两台Ubuntu主机上进行了测试,云服务器有8M带宽),所以对这种远程桌面访问方法不是很满意。最近接触到一个新的远程桌面软件,相较于之前使用的方法简直不要好太多。NoMachine也是一个桌面共享软件,支持Linux/Windows/MacOS/Android等系统,对于嵌入式平台,如Jetson Nano/树莓派等都有很好的支持。实测在局域网下能够非常流程的远程显示,同时操作非常便捷
2022-04-16 11:01:48 5921 2
原创 KD-Tree详解: 从原理到编程实现
在点云操作中,常常需要从大量点云中找到距离输入点最近的点,如果使用线性搜索,逐个判断与输入点的距离,那么搜寻耗时将会与点云规模呈线性上升趋势,时间复杂度为O(N)O(N)O(N)。显然这不是我们想看到的,在数据结构与算法中,对一维数据常用的搜索方法是二分查找,时间复杂度为O(logN)O(logN)O(logN),它本质上是构建一棵二叉搜索树,以空间换取时间。而KD-Tree(K-Dimension Tree),也就做K维树,则可以看做是二叉树在K维空间的扩展,它的搜索效率也能近似达到O(logN)O(lo
2022-04-08 20:12:14 8542 1
原创 FTP实现Ubuntu与Windows文件互传
FTP实现window与ubuntu文件互传本文将介绍如何使用FTP实现Ubuntu和Windows间的文件互传,基本方法是在Ubuntu主机上安装FTP服务端,在其他设备(Windows)上安装FTP客户端。以下是详细内容在Ubuntu上安装FTP Server参考:https://ubuntu.com/server/docs/service-ftp安装vsftpdsudo apt install vsftpd编辑/etc/vsftpd.conf来对FTP Server进行配置:sudo
2022-03-03 14:58:18 1935
原创 FRP内网穿透(远程ssh终端+rdp桌面配置)
硬件配置内网主机:ubuntu20.04 LTS 桌面版外网设备:windows笔记本云服务器:ubuntu20.04 serverFRP内网穿透(远程ssh终端+rdp桌面配置)使用FRP实现内网穿透的流程很简单,就是位于内网的主机将远程ssh终端和远程rdp桌面的端口映射到云服务器的端口,在外网设备上使用云服务器的公网IP+映射的端口即可访问内网的台式主机,如下图:#mermaid-svg-fedxd4bls7sggg63 {font-family:"trebuchet ms",verd
2022-02-24 20:27:14 4370
原创 使用Python调用C++库(基于pybind11)
本文将用C++编写一个简单的向量运算库,然后使用pybind11将其封装为python包,再使用python调用。C++程序使用CMake构建。使用C++调用Python模块见:另一篇博客安装pybind11使用pybind11可以将使用C++11以上标准编写的函数、类或者lambda表达式封装为python包。安装pytestpip3 install pytest下载pybind11git clone https://github.com/pybind/pybind11.git编译安装
2022-01-28 13:12:24 4680 4
原创 信号处理 | AR模型与Levinson-Durbin递推
模型形式由高斯白噪声驱动的全极点模型表示如下:e(n)=a0x(n)+a1x(n−1)+⋯+apx(n−p)=∑k=0pakx(n−k)\begin{aligned}e(n)&=a_0x(n)+a_1x(n-1)+\cdots+a_px(n-p)\\&=\sum_{k=0}^pa_kx(n-k)\end{aligned}e(n)=a0x(n)+a1x(n−1)+⋯+apx(n−p)=k=0∑pakx(n−k)其中:e(n)e(n)e(n)为高斯白噪声,噪声方差为
2022-01-11 11:18:36 2079 2
原创 信号处理 | 维纳滤波推导
首先给出互相关函数定义:rsx(m)=E[s(n)x(n−m)]r_{sx}(m)=E[s(n)x(n-m)]rsx(m)=E[s(n)x(n−m)]以及自相关矩阵定义:Rxx(i,j)=E[x(n−i)x(n−j)]R_{xx}(i,j)=E[x(n-i)x(n-j)]Rxx(i,j)=E[x(n−i)x(n−j)]开始推,令信号模型为:s^(n)=h(n)∗(s(n)+v(n))=h(n)∗x(n)=∑i=0Mh(i)x(n−i)\begin{aligned}\hat s(n)
2021-12-25 22:01:54 1942
原创 ROS开机自启设置
使用robot_upstart功能包即可实现节点的开机自启安装功能包安装robot_upstart功能包,本文使用的Ubuntu20对应的ROS版本为noeticsudo apt-get install ros-noetic-robot-upstart如果使用的是Ubuntu18,则还需要安装setprivsudo apt-get install setpriv自启动设置设置自启,以下命令即可设置<package_name>功能包下的<launch_file>.la
2021-10-02 17:07:33 1291 1
原创 使用C++调用Python模块(Linux)
工程配置本文使用的项目构建工具为CMake,使用FindPython工具在CMake工程中找到Python库,注意CMake最低版本为3.12,参考:https://cmake.org/cmake/help/latest/module/FindPython.html创建call_python.cpp文件,程序内容在下节详细说明。CMakeLists.txt文件如下:cmake_minimum_required(VERSION 3.12)project(CallPython)find_packag
2021-09-30 11:36:44 3716 5
原创 机器人自主导航 | ROS与移动底盘通信
本实验是实现机器人自主导航的重要步骤,对于轮式机器人,可以通过在底盘加装轮式里程计的方式来获得机器人的速度数据,这些数据可以用来辅助机器人实现自主定位,同时机器人还需要将控制指令发送给移动底盘,实现自主控制,本实验就将实现ROS与移动底盘的通信。实验环境软件环境:Ubuntu18.04 + ROS melodic、Windows + Keil 5、VSCode硬件环境:Jetson Nano(以下称为ROS端)、小车(以下称为STM32端)实验内容ROS与STM32的通信流程如图所示主要
2021-07-08 11:11:48 4390 3
原创 ROS话题发布和订阅节点的C++&Python实现
本文将分别使用C++和Python来实现话题发布者和订阅者,首先创建一个功能包,命名为topic_pub_sub,添加roscpp,rospy等依赖项。C++实现创建话题发布者在该功能包的src目录下创建publisher.cpp文件,添加如下程序:#include <iostream>#include <sstream>#include <ros/ros.h> // 该文件包含了ROS系统中大部分常用的头文件#include <std_msg
2021-07-02 17:11:48 4792 3
原创 使用VSCode进行远程C++开发
首先在VSCode中安装Remote - WSL插件,重启VSCode,如下图所示,连接WSL如下图所示即为连接成功,这时工作区里没有任何内容,可以选择打开一个文件夹作为工作区此时会弹出对话框,找到要打开的文件夹,点击确定即可(注:图中/mnt/c即表示Windows中的C盘路径)下面用一个简单的CMake工程作为示例,演示VSCode的开发流程。在开始之前,要继续给VSCode安装一些插件,如图首先在src路径下新建一个helloworld.cpp文件,内容如下:#include
2021-07-02 12:54:09 2250 4
原创 Ubuntu20安装ROS noetic
Ubuntu20对应的ROS版本为ROS noetic1. 打开Software&Updates,勾选main、universe、restricted、multiverse这四项。2. 添加ROS软件源,打开终端,执行以下指令:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'3. 添加
2021-06-13 18:07:18 865
原创 路径规划 | 随机采样算法:Informed-RRT*
在文章路径规划 | 随机采样算法:PRM、RRT、RRT-Connect、RRT*中,介绍了具备渐近最优性的RRT*算法。随着采样点数的增多,RRT*算法的规划结果会逐渐收敛到最优。但是可以观察到,RRT*算法是对自由空间进行均匀采样,搜索树上会生成很多冗余的分支,我们可以对RRT*算法的采样过程进行改进。Informed-RRT*算法就是对RRT*的采样过程进行优化得到的算法,它采用一个椭圆采样方式来代替全局均匀采样,如图:接下来介绍椭圆采样区域的表示方式标准椭圆方程为:x2a2+y2b2=
2021-05-14 16:05:48 7291
原创 ROS多机通信
配置主从机IP地址分别使用sudo vi /etc/hosts在主从机的/etc/hosts文件中添加下面的代码,其中pi是从机的用户名,esdc是主机的用户名。ip要相应的进行更改,可以使用ifconfig命令查看192.168.0.100 pi192.168.0.101 esdc编辑ROS_HOSTNAME和ROS_MASTER_URI分别编辑主从机的~/.bashrc文件vi ~/.bashrc从机(机器人端):export ROS_HOSTNAME=piexport R
2021-03-27 09:53:02 517 1
原创 移动机器人中地图的表示
在学习算法之前,首先要做的是理解数据,所以本专栏在开始介绍运动规划算法前,首先介绍一下地图的数据形式。地图有很多种表示形式,在移动机器人中比较常用的是尺度地图、拓扑地图、语义地图尺度地图:具有真实的物理尺度,如栅格地图、点云地图,常用于SLAM、小场景路径规划拓扑地图:只包含不同位置的连通关系和距离,不具备真实的物理尺度,常用于大规模的机器人路径规划语义地图:在尺度地图上添加标签,常用于人机交互我们平时接触比较多的应该是语义地图,对于人类来说,根据语义地图移动到目的地是轻而易举的,但是对机器
2021-01-25 13:38:49 1542
原创 搭建STM32开发环境
安装keil点击这里下载安装最新版的keil破解以管理员身份运行keil,打开File -> License Management复制CID,如下:运行keygen2032.exe,修改CID、Target,点击Generate,复制生成的License ID Code(LIC),如下:返回之前的许可证管理界面,粘贴上一步生成的LIC,点击Add LIC即可安装相关芯片的软件包打开Pack Installer打开之后它会先加载一段时间,当右下角加载
2021-01-04 17:46:38 1278
原创 Ubuntu18.04安装Neo4j
之前搞比赛有用到Neo4j,随手做了些记录,在这里分享一下安装JDK我使用的Nej4j要求JDK11以上,不然会报错:ERROR! Neo4j cannot be started using java version 1.8.0_261. * Please use Oracle(R) Java(TM) 11, OpenJDK(TM) 11 to run Neo4j.* Please see https://neo4j.com/docs/ for Neo4j installation instruc
2020-12-28 18:52:48 971
原创 Git操作详解以及在VScode中的使用
我们先理清Git和Github的区别,Git是个版本控制的工具,用来管理本地的代码工程,它可以记录代码内容的变更;而Github是一个代码托管平台,我们可以使用Git将本地代码上传到Github。那为什么要学Git,上面说到Git是一个版本控制工具,它可以记录代码内容的变更,方便我们对项目的管理,它主要有以下的用途:代码备份举一个简单的例子,写好一个程序后,想要再加一个新功能,添加这个新功能需要对很多个文件进行改动。但是添加完这个功能后发现,这个新功能是个坑,然后就会想着回退到上一个版本,这时候如
2020-11-06 20:35:42 8007
原创 语音信号处理 | Python实现端点检测
由于项目需要,我要使用Python对语音进行端点检测,在之前的博客使用短时能量和谱质心特征进行端点检测中,我使用MATLAB实现了一个语音端点检测算法,下面我将使用Python重新实现这个这个算法,并将其封装到VAD类中,如下是运行结果:软件环境Python3.8、scipy、pyaudio、matplotlib程序matlab程序转换到python还是挺容易的,VAD.py程序如下:#!/usr/bin/python3# -*- coding: utf-8 -*-import numpy
2020-10-28 15:45:04 4313 14
原创 STM32部分BUG及解决方法记录(不定期更新)
编译使用CubeMX生成的代码时报错:Error: L6218E: Undefined symbol HAL_PWREx_DisableUCPDDeadBattery (referred from stm32g4xx_hal_msp.o).解决方法:将HAL_PWREx_DisableUCPDDeadBattery改为HAL_PWREx_DisableUSBDeadBatteryPD使用LL库生成的SPI代码时,程序卡死在while(LL_SPI_IsActiveFlag_RXNE(ICM20.
2020-09-18 18:24:55 3570 3
原创 TCP实时图像传输
之前尝试过使用UDP进行图像传输,而UDP协议要求包小于64K,对于较大的图像,需要使用分片压缩的方式进行传输,操作较复杂,同时不能保证图片的每一部分都能够正确传输。详见:UDP实时图像传输,UDP实时图像传输进阶篇——1080P视频传输TCP对于传输的数据大小没有限制,同时TCP在发送失败时还有重传机制,可以保证传输的可靠性,所以本文将使用TCP协议来进行图像的实时传输。基本流程TCP连接过程见后面的程序,一般服务端创建一个套接字,绑定本地IP,开启监听,然后客户端也创建一个套接字,连接服务端就可以
2020-08-28 14:55:22 21961 11
原创 ROS与STM32通信
ROS与STM32通信2020.8.1主要内容制作ROS包,将控制命令传给STM32,并将接收到的数据作为话题进行发布STM32接收数据并将姿态数据传回给ROS接收:期望角速度、期望线速度返回:实际角速度、实际线速度STM32端ROS端之前运行的ROS项目都是在终端编译,用vim或者gedit修改代码,很不方便,函数跳转查看都没办法实现。所以今天先安装一个IDE试试ROS官网上有一个不同IDE的对比文章,网址我选择VScode...
2020-08-03 22:51:23 10425 8
原创 使用VScode搭建ROS开发环境
俗话说"工欲善其事必先利其器",之前在Ubuntu上运行的ROS项目都是用vim或者gedit编写和修改代码,然后在终端编译运行,很不方便,函数跳转查看都没办法实现。所以今天我决定找一个方便的开发工具,也就是找一个像Windows上的VS那样的集成开发工具(IDE),ROS官网上有一个不同IDE的对比文章,网址在这里我选择使用VScode.下载安装好VScode后,在扩展栏安装C/C++,CMake,CMake Tools,Code Runner,ROS(deprecated),Chinese 这些插件.
2020-08-02 20:39:36 24088 24
UDP实时图像传输Plus.zip
2020-05-13
KalmanFilter.zip
2020-05-12
基于积分法和欧拉恒等式法的圆周率计算C++程序.zip
2020-04-01
StudentsManageSystem.zip
2020-03-24
UDP实时图像传输.zip
2019-10-17
2013年国赛简易旋转倒立摆装置源代码
2019-01-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人