点云配准汇总
配准比较常用的套路就是法线提取,然后fpfh特征提取,粗配准,最后再来精配准,基本就能得到比较准确的旋转矩阵和模板点云配上。
特征提取
轮廓提取
1 |
|
配准比较常用的套路就是法线提取,然后fpfh特征提取,粗配准,最后再来精配准,基本就能得到比较准确的旋转矩阵和模板点云配上。
1 | #include <pcl/features/boundary.h> |
首先是最简单的容易理解的立方体的剪裁滤波,根据对角点确定一个立方体然后获取立方体内或外的点,并且还可以在这立方体基础上加平移或旋转,因为根据两个点确立的立方体只是坐标轴正方向的,不一定能满足所有需求。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#include <pcl/filters/crop_box.h>
/// <summary>
/// 立方体滤波
/// </summary>
/// <param name="cloud_in">输入点云</param>
/// <param name="cloud_out">输出点云</param>
/// <param name="min">最小点位 x y z 1</param>
/// <param name="max">最大点位 x y z 1</param>
/// <param name="negative">默认值为 false,输出点云为在设定字段的设定范围内的点集,如果设置为 true 则刚好相反</param>
void cropFilter(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_in, pcl::PointCloud<pcl::PointXYZ>::Ptr &cloud_out, Eigen::Vector4f min, Eigen::Vector4f max, bool negative) {
pcl::CropBox<pcl::PointXYZ> box_filter; //滤波器对象
box_filter.setMin(min); //Min和Max是指立方体的两个对角点。每个点由一个四维向量表示,通常最后一个是1.
box_filter.setMax(max);
//box_filter.setRotation(rotation); //旋转 rx ry rz
//box_filter.setTranslation(tanslation);//仿射矩阵 Affine3f 旋转加平移
//box_filter.setTransform(transformax);//平移 tx ty tz
box_filter.setNegative(negative);
box_filter.setInputCloud(cloud_in);
box_filter.filter(*cloud_out);
}
more >>
这波主要自己闲下来了,帮之前兼职区块链公司搞定了Android和iOS的BLE无网通信请了假,准备去自考本科最后四门,结果疫情太厉害直接取消了,本来还想着年中就可以申请毕业直接再准备一下考研请的是长假。。。结果计划永远赶不上变化,毕竟搞学历对现在的自己只是解个心结去个遗憾,对自己工作生活没啥用调整好情绪重新继续正经创业或工作吧,借着长假的时间思考思考人生,搞一搞之前没空处理的遗留项目。下面就直接进入主题把!
现在由于默认是NEW PM所以经常有人邮件我移植很完美编译也成功,就是没效果,这里做一下解答。主要两种方式解决,一种是在cmake的时候加一下-DLLVM_ENABLE_NEW_PASS_MANAGER=OFF来禁用掉NEW PM,这样在编译完成后使用的时候就可以了,还有一种就是走默认开启这,然后用ollvm编译自己项目时加上-flegacy-pass-manager的cflag,再加-mllvm原来哪些就可以正常使用了
主要是StringObfuscation.cpp里面的两个地方,第一个是宏的修改编译时机,第二个就是CreateGEP,CreateLoad等多个方法需要传递指针类型了,原来不传会设置为null到了13.0里就开始内部通过对象获取类型,就像修改的这样,到了14.0干脆就是强制你必须传类型了。
more >>
这里首先记录下当时调研的一些路由器系统,这方面的资料再网上比较少。
开源的智能路由系统其实挺多不少这个后面再说,比较偏向专业Mesh组网的智能路由系统比较少下面就列一下我了解到的几个还不错的。

1.libremesh
http://libremesh.org/
支持各种漫游协议,各种连接方法,固件支持常见路由,但7620系统无线有bug,mini系统有简易配置页面,全系统可设置更改全面协议,理论上只要设备足,覆盖一个城都没有问题,而且最牛逼的是持续更新开发者都很活跃,参与人较多,文档较全,而且有每月互动email可以演习。我们当时户外版就是采用的这个系统,这倒是跟区块链很配绝对去中心,而且是完全自治独立于现有互联网的平行网络。
这里无网通信指的是没有互联网的通信方式,之前在区块链公司是做这块,现在怕自己以后忘了写一遍,之前搞工业机器人实在太忙,整个博客停了,也不搞移动了,现在离职了,创业也败了,该恢复一下之前的技术调整心态继续找工作了。
所谓无网通信其实是不同设备互相发现然后连接进行通信,而互相发现的方式可以归纳成三种
而前两种是最稳定的方式,可以使用Wifi Direct实现,而蓝牙BLE的方式就比较鸡肋了距离有限制大小也有限制,能Wifi直连肯定不用蓝牙。然而蓝牙的发现连接标准其实各个设备基本都遵循的是一套,但Wifi Direct则是实现方式多种多样像UPnP、Bonjour、DLNA、SLP抑或是其他技术都能实现。iOS用的自家Bonjour,而Android4.0后开始支持直接就叫Wifi Direct,不同设备直连基本都会遇到问题。这里以Android和iOS为例实现的基本逻辑其实都由MDNS与DNS-SD演化而来。
确定了Wifi Direct以后又会发现一个问题就是这解决的是设备与设备的通信,也就是一对一,而理想的无网通信是多对多,信息流之间希望有多跳的能力也就是Mesh,这个最终我们也没完美解决,虽然Android和iOS里有一定的解决方案(创建群组实现多对多)但也有不同系统无法互通的问题和群组上限问题,但当时我们选择了更简单的方式就是由路由器去Mesh其他路由器,而设备加入到路由器的网络里直接用MDNS去发现然后链接通信,专业设备做专业事,Mesh组网和设备通信分摊到两个地方。
简介里介绍完基本就确定了技术点就是Wifi Direct,而这项技术则是由MDNS(Multicast DNS)与DNS-SD(DNS Service Discovery)演化而来。
首先MDNS和DNS-SD是DNS协议的两个扩展。MDNS扩展了域名服务系统,在链路本地多播上运行。DNS-SD添加了通过DNS发现网络服务的支持。MDNS原理就是在基于udp加入网络后向所有主机组播一个消息。
基本流程就是基于某个自定义域名发布服务,发现设备,连接设备

tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent:
meta: false
pages: false
posts:
title: true
date: true
path: true
text: false
raw: false
content: false
slug: false
updated: false
comments: false
link: false
permalink: false
excerpt: false
categories: false
tags: true