泡泡一分钟:Efficient Trajectory Planning for High Speed Flight in Unknown Environments

本文介绍了一种针对无人机在未知环境中实现高速、动态飞行的有效轨迹规划方法。该规划结合了计算效率高的闭合形式轨迹生成、空间分区数据结构以及基于障碍物密度的安全速度规划。通过最小冲击轨迹和闭环跟踪,实现了稳定、高速飞行。实验结果表明,此方法在城市环境中,自动四旋翼飞行器的飞行速度可达9.4ms-1。

张宁  Efficient Trajectory Planning for High Speed Flight in Unknown Environments

高效飞行在未知环境中的有效轨迹规划
链接:https://pan.baidu.com/s/1l0HtSOU-6QSojq7ELrmLIA  提取码:ayc1

Markus Ryll, John Ware, John Carter and Nick Roy

There has been considerable recent work in motion planning for UAVs to enable aggressive, highly dynamic flight in known environments with motion capture systems. However, these existing planners have not been shown to enable the same kind of flight in unknown, outdoor environments. In this paper we present a receding horizon planning architecture that enables the fast replanning necessary for reactive obstacle avoidance by combining three techniques. First, we show how previous work in computationally efficient, closed-form trajectory generation method can be coupled with spatial partitioning data structures to reason about the geometry of the environment in real-time. Second, we show how to maintain safety margins during fast flight in unknown environments by planning velocities according to obstacle density. Third, our recedinghorizon, sampling-based motion planner uses minimum-jerk trajectories and closed-loop tracking to enable smooth, robust, high-speed flight with the low angular rates necessary for accurate visual-inertial navigation. We compare against two state-of-the-art, reactive motion planners in simulation and benchmark solution quality against an offline global planner. Finally, we demonstrate our planner over 80 flights with a combined distance of 22km of autonomous quadrotor flights in an urban environment at speeds up to 9.4ms-1.

最近在无人机的运动规划方面进行了大量工作,以便在具有运动捕捉系统的已知环境中实现积极,高度动态的飞行。然而,这些现有的规划者尚未被证明能够在未知的室外环境中实现同样的飞行。在本文中,我们提出了一种后退的地平线规划架构,通过结合三种技术,可以实现反应性避障所需的快速重新规划。首先,我们展示了先前在计算上有效的闭合轨迹生成方法中的工作如何与空间划分数据结构相结合,以实时推理环境的几何形状。其次,我们展示了如何通过根据障碍物密度规划速度来在未知环境中快速飞行期间保持安全裕度。第三,我们的后退运动,基于采样的运动规划器使用最小冲击轨迹和闭环跟踪,以实现平稳,稳健,高速飞行,具有精确视觉惯性导航所需的低角速率。我们将模拟和基准解决方案质量方面的两个最先进的反应式运动规划器与一个全局规划师进行比较。 最后,我们展示了超过80个飞行计划器,在城市环境中,自动四旋翼飞行器的总距离为22km,速度高达9.4ms-1。

转载于:https://www.cnblogs.com/feifanrensheng/p/11478630.html

<think>我们正在讨论的是分子动力学分析中的轨迹遍历问题。用户询问的是代码片段`for ts in u.trajectory:`的含义和使用方法,同时提供了之前的问答上下文和一些引用资料。 回顾之前的回答,我们使用MDAnalysis库处理分子动力学轨迹,其中`u`是一个Universe对象,代表整个模拟系统。`u.trajectory`是轨迹对象,包含多个时间步(帧)。 因此,`for ts in u.trajectory:`是一个循环结构,用于逐帧遍历轨迹。在每次迭代中,`ts`是一个Timestep对象,包含当前帧的原子坐标、时间、步数等信息。 下面我将详细解释这个循环结构: </think>### 代码 `for ts in u.trajectory:` 详解 #### 1. **核心含义** - **`u`**:MDAnalysis中的`Universe`对象,代表分子体系的所有结构信息 - **`trajectory`**:轨迹数据容器,包含按时间顺序排列的帧(frame) - **`ts`**:迭代变量,表示时间步(Timestep)对象 - **完整语义**:遍历轨迹中的每一帧,对每帧数据执行循环体内的操作 #### 2. **底层实现机制 ```python class Trajectory: def __iter__(self): self._frame = 0 return self def __next__(self): if self._frame < self.n_frames: ts = self._read_frame(self._frame) # 读取当前帧 self._frame += 1 return ts raise StopIteration ``` *数学表示*: 设轨迹总帧数为$N$,则迭代过程为: $$ \forall k \in \{0,1,\cdots,N-1\}, \quad \mathrm{ts}_k = \mathcal{F}(\mathrm{traj}, k) $$ 其中$\mathcal{F}$为帧读取函数 #### 3. **关键应用场景 | 情景 | 代码示例 | 物理意义 | |------|----------|----------| | **密度分析** | `density_grid = density.DensityAnalysis(...).run()` | $\rho(\mathbf{r}, t_k)$ | | **接触分析**[^3] | `distance = np.linalg.norm(atom1 - atom2)` | $d_{ij} < d_{\text{cutoff}}$ | | **RMSD计算**[^2] | `cpptraj rmsd @CA` | $\mathrm{RMSD} = \sqrt{\frac{1}{N}\sum_{i=1}^N \|\mathbf{x}_i - \mathbf{x}_i^{\text{ref}}\|^2}$ | | **轨迹优化**[^4] | `generate_optimal_trajectory()` | $\min \int \|\dddot{\mathbf{r}}(t)\|^2 dt$ | #### 4. **内存优化技巧 ```python # 低内存模式(推荐) for ts in u.trajectory[::10]: # 每隔10帧采样 process(ts) # 并行加速(需dask) from MDAnalysis.analysis import rms R = rms.RMSD(u, select='backbone').run(n_jobs=4) ``` #### 5. **注意事项 1. **帧索引一致性** `ts.frame`可能不从0开始,需用`u.trajectory[i]`直接访问特定帧 ```python critical_frame = u.trajectory[100] # 直接读取第100帧 ``` 2. **坐标单位** 默认单位为&Aring;(埃),速度单位为&Aring;/ps,可通过`ts.dimensions`获取盒子尺寸 3. **时间步关联** 实际时间$t$可通过时间步计算: $$ t_k = \mathrm{ts.time} = k \cdot \Delta t $$ 其中$\Delta t$由轨迹文件决定 4. **选择器优化** 避免在循环内创建选择器: ```python # 错误做法(性能差) for ts in u.trajectory: sel = u.select_atoms("protein") # 每帧重建 # 正确做法 protein = u.select_atoms("protein") for ts in u.trajectory: coords = protein.positions # 直接复用 ``` #### 6. **典型工作流 ```mermaid graph TD A[载入轨迹 u = mda.Universe] --> B{循环设置} B -->|完整遍历| C[for ts in u.trajectory] B -->|抽样分析| D[for ts in u.trajectory[::10]] C/D --> E[获取原子坐标 ts.positions] E --> F[执行分析算法] F --> G[输出结果] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值