| by YoungTimes | No comments

自动驾驶定位算法(十五)基于多传感器融合的状态估计(muti-Sensors Fusion)

1、传感器(Sensor)选取

自动驾驶系统中用于状态估计(State Estimation)的常用传感器包括GPS/GNSS、IMU、激光雷达(Lidar)。

状态估计(State Estimation)选用传感器需要考虑哪些因素:

1)误差不相关性。也就是说,用于Sensor Fusion的传感器其中单个传感器(Sensor Measurement)测量失败,不会导致其它传感器(Sensor)由于相同的原因而同时失败。

2)传感器的相互补充性。 比如IMU可以填充GPS两次定位间隔期间的定位输出,用于平滑GPS/GNSS的定位结果;GPS为IMU提供初值,消除I[……]

继续阅读

Read More
| by YoungTimes | No comments

任意简单多边形求差集(difference)

在日常开发中会遇到从一个多边形扣除掉部分区域的需求,如下图所示:

CGAL提供了CGAL::difference函数用于实现多边形差集的功能。函数原型如下:

其中type1和type2支持的类型如下:

Type1Type2Polygon_2Polygon_2Polygon_2Polygon_with_holes_2Polygon_with_holes_2Polygon_2Polygon_with_holes_2Polygon_with_holes_2General_polygon_2General_polygon_2General_polygon_2General[……]

继续阅读

Read More
| by YoungTimes | No comments

TensorFlow:tf.space_to_depth函数通俗解释

函数原型:

tf.space_to_depth将Input Tensor的height、weight维度的值移到Output Tensor的depth维度。

通俗的讲,就是实现如下的功能:

Input Tensor: [batch, height, width, channels]

Output Tensor: [batch, height / block_size, width / block_size, channels * block_size * block_size]

应用示例

Input Tensor的shape为[1, 2, 2,[……]

继续阅读

Read More
| by YoungTimes | No comments

找到那个更优解

在初学编程的时候,看到这么一句话:编程能力强的人和编程能力差的人,它们写出的代码性能会相差无数倍…

工作久了,也深刻体会到“隔行如隔山”,每个行业、每项技术都有它的机巧之处,而行业中精英人士总是更善于找到那个更优秀的解决方案。

抱怨的消费者

某英语培训机构刚成立的时候,凭借自己对消费者心理的推测,将自己的收费模式设置为”标准收费方案”和”更好的服务收费方案”,二者的课程完全相同,只是”更好的服务收费方案“提供了更好的服务。

从常人的角度看,这样的文案完全没有什么毛病。然而大规模推广之后,“更好的服务收费方案”收到了大量的投诉和谩骂,它们觉得这样的收费方案纯粹是为了骗[……]

继续阅读

Read More
| by YoungTimes | No comments

判断点在多边形内部、在多边形边界上还是在多边形外部

在网上已经有大量判断点是否在多边形内部的算法介绍。

如何判断一个点是否在多边形内部?
(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。
(2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。
(3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。

CGAL提供了相关的方法,可以避免日常使用时重复造轮子。

点在多边形内部时返回CGAL::ON_BOUNDED_SIDE;点在多边形边上时返回CGAL::ON_B[……]

继续阅读

Read More
| by YoungTimes | No comments

判断多边形为顺时针或者逆时针

CGAL的Polygon函数提供了判断多边形点序列顺序的函数,直接返回多边形是否为顺时针或者逆时针。

下面实现一个检测多边形的点序列顺序是否为逆时针,如果为非逆时针,则旋转点顺序为逆时针。

判断多边形是否为简单多边形

上述多边形点顺序检测需要一个先决条件:Polygon必须为简单多边形。什么是简单多边形,引用百度百科的解释如下:

定义一:周界不自交的多边形。

定义二:满足如下条件的多边形:
1)顶点与顶点不重合。
2)顶点不在边上。

定义三:边与边不相交的多边形。

Polygon也提供了检测多边形是否为简单多边形的方法。

简单多边形又分为[……]

继续阅读

Read More
| by YoungTimes | No comments

判断点位于有向线段的左侧或者右侧

如果r位于有向线段pq的左侧返回CGAL::LEFT_TURN;如果r位于有向线段pq的右侧返回CGAL::RIGHT_TURN;如果r与有向线段pq共线返回CGAL::COLLINEAR。

如果u和v是left turn关系返回CGAL::LEFT_TURN;如果如果u和v是right turn关系返回CGAL::RIGHT_TURN;如果u和v共线返回CGAL::COLLINEAR。

参考材料

https://doc.cgal.org/latest/Kernel_23/group__orientation__grp.html

[……]

继续阅读

Read More
| by YoungTimes | No comments

Object Detection-YOLOv2 Input And Output Encoding

本文主要学习在PASCAL VOC2012数据集上训练YOLOv2时的Input Encoding和Output Encoding。

Import PASCAL VOC2012 data

PASCAL VOC2012支持的Object类别如下:

假设PASCAL VOC2012数据集的本地路径如下:

通过前文定义的parse_annotation准备训练数据。

Input/Output Encoding

YOLO的Input Encoding是非常简单的,只需要读取一张图片,然后将其缩放到指定的大小即可。

Input的图片缩放之后,Ou[……]

继续阅读

Read More
| by YoungTimes | No comments

多边形求并集(Union)

CGAL计算多边形并集

CGAL提供一系列的join函数用于计算两个Polygon的并集(Union)。

Type1和Type2支持的类型如下,简单的说就是,它支持计算任意简单多边形和带洞(hole)多边形求并集。

Type1Type2Polygon_2Polygon_2Polygon_2polygon_with_holes_2Polygon_with_holes_2Polygon_2Polygon_with_holes_2Polygon_with_holes_2General_polygon_2General_polygon_2General_polygon_2Gene[……]

继续阅读

Read More
| by YoungTimes | No comments

Python中type()和isinstance()的区别

Python中的每个对象(object)都有一个数据类型,它可能是内置的类型,如int、str、numpy array等;也可能是自定义类的对象。

type(obj)返回obj的数据类型;isinstance(obj, dtype)用于检测obj是否是dtype的实例,如果为dtype的实例返回True,反之返回False。

它们的区别在于isinstance()考虑继承关系,但是type()==dtype不考虑继承关系。

如下代码,Rectangle类继承自shape类,Square类继承自Rectangle类。

定义一个Square对象,分布调用type()和i[……]

继续阅读

Read More
| by YoungTimes | No comments

拥抱不确定性

整个世界从来不是线性的,以人类目前的认知能力,尚无法知晓整个世界的运行机制,它们只能处理线性或者近似线性的问题。

程序员每天的工作却是追逐确定性,同样的代码逻辑、同样的输入条件,必须有严格一致的输入。如果我们发现不满足确定性,那么这个程序一定是存在缺陷的。

日复一日的与机器协同合作,极大的摧毁着程序员的创造性,大部分程序员沦为一台翻译的机器,把人类的逻辑翻译为机器的语言。它们追求程序运行的精准性,却逐渐丢失了自我对于不确定性的处理能力。

中国的大部分程序员处理不确定性的情况很少,原因在于原创性的技术确实不多,大部分时间都在做业务。它们拿到手的已经是经过层层理解形成的MRD文档[……]

继续阅读

Read More