整体思路:探索 -> 视角生成 -> 任务分配(多机)-> 规划轨迹 Surface Frontier-based Exploration 表面前沿体素 $v_{sf}$ 定义 步骤: 对 $v_{sf}$ 聚类,求质心 在多个类的质心的某个半径内采样生成不同高度、yaw 的候选视角 对每个类上的候选视角选择一个作为代表,标准为视角可以看到最多的 $v_{sf}$...
SOAR: Simultaneous Exploration and Photographing with Heterogeneous UAVs for Fast Autonomous Reconstruction
Motor Selection
估算选型 无人机重量:1kg 螺距:3英寸(7.26cm) 直径:90mm 螺旋桨重量:2.35g 给定以上条件,给电机选型,从已有的两种电机二选一。 确定悬停所需转速 首先考虑推力和转速的关系,便于从无人机重量反推悬停所需转速。根据动能定理: \[Q = A \cdot (v_{in} + \Delta v_{1})\] \[\begin{align} T &= m...
FC-Planner: A Skeleton-guided Planning Framework for Fast Aerial Coverage of Complex 3D Scenes
1 Skeleton-based Space Decomposition Skeleton Extraction 该方法参考自 Tagliasacchi et al. 2009 使用 ROSA( generalized rotational symmetry axis) Points 来表达点云骨架。 \[r_p...
Robust and Efficient Quadrotor Trajectory Generation for Fast Autonomous Flight
arxiv 1907.01531 如果能预先了解 A* 算法,那么理解本论文的 Kinodynamic Path Searching 会容易许多。A* 算法的伪代码如下: C = dict() P = PriorityQueue() P.push(node_start, 0) while not...
Handcraft Ray Tracing
本文将介绍如何手搓光线追踪。先上效果图: 代码仓库:handcraft-MVS。 实现了: 漫反射 基于菲涅尔定律的折射与反射 允许多光源 球体相交检测 TODO: 其他几何体的相交检测 另起一篇实现光栅化 简介 通过程序模拟光线从光源发出后到达相机光心的路径,来渲染出接近现实光照变化的图像。 漫反射的实现 本节考虑的物体表面都只会发生漫反射。漫反射是指,由于物体表面的粗糙,一束光线击中表面后,会向各个方向反射,反射光线与入射光线角度越大,反射光线的强度越弱。 最朴素的思考则是从光源出发,思考光线的传播,所谓 正向。考虑只有单次漫反射这一最简单的情况,当光源发出的光线第一次打到物体时,如前文所述,会向各个方向反射,而这么多法反射的光线中,只有穿过成像平面的光线是对渲染有意义的,其余的反射光线我们则不关心。 因此,利用光路的可逆性,我们反过来思考,所谓 反向: 从相机光心出发射出一条光线,判断是否会打到物体表面的一个点上 若能打到,再从这个点上发出一条光线,判断是否会打到光源上...
Handcraft Your Own Matrix Library
视觉惯性里程计的前后端的一些计算,涉及矩阵的运算,一些问题的求解,最终都会转变为方程组的求解, 也与矩阵的运算或线性代数相关,想要从零实现一个 VIO 的前端,主要涉及到 多视角几何(MVS), 而 MVS 中的问题的求解绝大部分也都是转换为方程组的求解,因此从零实现一个矩阵运算库就变成了必要条件。 本文将记录笔者用 C++ 实现一个简单的矩阵运算库(类似于 Eigen 库)的过程。 代码仓库:handcraft-MVS。 实现的功能有: 矩阵多种方式的构造(初始化)与析构 矩阵的操作或运算 加减乘,以及标量除法 赋值 矩阵的转置、L2...
Coding isn't Programming
Coding isn’t Programming(Leslie Lamport) 算法不应该被用特定的编程语言来表示, 应该关注想法,而不是使用哪种语言。 这是一种简化,因为具体的编程语言需要考虑 高效的执行 和 大型程序的组织 考虑一种比较难的场景,编写并发(concurrancy)的算法和程序。并发算法和程序都很难写,但算法更简单。 所以,我们需要抽象(abstraction),合理的抽象可以帮助我们把注意力放在真正重要的地方上,减少思考的负担, 但这是在有思考的前提下。引用 Lamport 的话: thinking before you code thinking...
Back to the Basics! Essentials of Modern C++ Style
在现代 C++ 中应该使用的一些默认写法。 tl;dr: loops: for( auto& e: c ) { ... use(e); ... } pointers & references: 在参数传递中默认使用原始的 */&...
Extraction, Update and Optimization of Domain Diretions and Structual Lines
本文将介绍在现有的里程计上,如何加入主方向的提取与结构线筛选、主方向的迭代更新、后端中的主方向约束因子。 整体框图如下: 前置内容 2D 线的表示、3D 线的表示以及之间的转换(投影:3D->2D;三角化:2D->3D)见 TODO 对环境结构的假设 考虑的环境是结构化环境,存在一个垂直主方向,多个水平主方向,多个倾斜主方向。所有水平主方向和垂直主方向垂直, 每个倾斜主方向都和某个水平主方向(可以不是同一个水平主方向)垂直。 主方向的表达 什么是主方向呢?我们可以认为,许多条平行的 3D 线的共同方向便是主方向(Domain Direction, 简称 DD) 因此对于一个 3D 空间中的方向,我们可以自然地将其表示为...
Representation of Paths
起始配置 和 目标配置之间的连续曲线,称为路径: \[y: [0, 1] \rightarrow \mathcal{C}\] $q_I = y(0)$ 是起始配置(initial configuration),$q_G = y(1)$ 是目标配置(goal configuration)。configuration 的含义是机器人某一时刻的一种可能的状态,例如机械臂各个关节的角度、速度、角速度等。 有许多类型的函数可以刻画一条曲线,下面介绍在机器人领域中最常用的三种类型。 分段线性表示(Piecewise-linear...
Total views. cowboys. Hits