You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Livox Horizon及同类LiDAR扫描模式的数学描述与程序实现咨询

Livox Horizon 扫描模式的数学建模与程序实现

一、数学描述

Livox Horizon采用非重复螺旋扫描模式,区别于传统机械式LiDAR的周期性往复扫描,其轨迹由水平方位角的匀速旋转和垂直俯仰角的慢变周期扰动合成,核心特点是长时间内轨迹无重复,实现逐步覆盖全场景。

1. 方位角(Azimuth)变化

水平方向为连续匀速旋转,角速度记为$\omega_a$(单位:rad/s),任意时刻$t$的方位角:
$$\theta_a(t) = \omega_a \cdot t + \theta_{a0}$$
其中$\theta_{a0}$为初始方位角(rad)。

2. 俯仰角(Elevation)变化

垂直方向是缓慢线性漂移+周期振动的复合运动,覆盖范围约-25°~+15°,数学表达式:
$$\theta_e(t) = \theta_{e0} + k \cdot t + A \cdot \sin(\omega_e \cdot t + \phi)$$
参数说明:

  • $\theta_{e0}$:初始俯仰角(rad)
  • $k$:俯仰角线性漂移系数(rad/s,控制垂直方向覆盖速度)
  • $A$:俯仰振动振幅(rad)
  • $\omega_e$:俯仰振动角频率(rad/s)
  • $\phi$:振动初始相位(rad)

关键特性:俯仰振动周期与水平旋转周期的比值为无理数,确保扫描轨迹不会在有限时间内重复。

3. 点云坐标转换

结合LiDAR测量的距离$d(t)$,将极坐标转换为笛卡尔坐标(传感器坐标系下):
$$
\begin{cases}
x(t) = d(t) \cdot \cos(\theta_e(t)) \cdot \cos(\theta_a(t)) \
y(t) = d(t) \cdot \cos(\theta_e(t)) \cdot \sin(\theta_a(t)) \
z(t) = d(t) \cdot \sin(\theta_e(t))
\end{cases}
$$

二、程序实现(Python示例)

以下是基于上述数学模型的模拟实现,参数参考Livox Horizon官方标称值:

1. 定义核心参数

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 水平扫描参数
omega_a = 2 * np.pi * 10  # 10转/秒,转换为rad/s
theta_a0 = 0.0  # 初始方位角(rad)

# 俯仰扫描参数
theta_e0 = np.deg2rad(-25)  # 初始俯仰角(对应最低位置)
k = np.deg2rad(0.08)  # 垂直方向漂移速度,约0.08°/s
A = np.deg2rad(4)  # 俯仰振动振幅,约4°
omega_e = 2 * np.pi * 0.15  # 振动频率0.15Hz
phi = 0.0  # 初始相位

# 模拟配置
total_time = 8  # 模拟8秒扫描
point_freq = 240000  # Livox Horizon标称点频24万点/秒
t_steps = np.linspace(0, total_time, total_time * point_freq)

2. 计算角度与点云坐标

# 计算每个点的方位角、俯仰角
theta_a = omega_a * t_steps + theta_a0
theta_e = theta_e0 + k * t_steps + A * np.sin(omega_e * t_steps + phi)

# 模拟距离数据(实际为LiDAR测量值,这里固定为10m)
d = np.full_like(t_steps, 10.0)

# 极坐标转笛卡尔坐标
x = d * np.cos(theta_e) * np.cos(theta_a)
y = d * np.cos(theta_e) * np.sin(theta_a)
z = d * np.sin(theta_e)

3. 扫描轨迹可视化

# 3D轨迹展示
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, s=0.5, alpha=0.4)
ax.set_xlabel('X (m)')
ax.set_ylabel('Y (m)')
ax.set_zlabel('Z (m)')
ax.set_title('Livox Horizon Scan Trajectory Simulation')
plt.show()

# 俯视图(XY平面)
plt.figure(figsize=(8, 8))
plt.scatter(x, y, s=0.3, alpha=0.4)
plt.xlabel('X (m)')
plt.ylabel('Y (m)')
plt.title('Top View of Scan Trajectory')
plt.axis('equal')
plt.show()

实现注意事项

  • 实际参数需以Livox官方技术手册为准,上述为近似标称值;
  • 真实场景中需考虑LiDAR的点发射时序(离散时间步长),而非连续时间模拟;
  • 若需更精确建模,可加入激光束的发散角、测距误差等物理特性。

内容的提问来源于stack exchange,提问作者Yusuf Ziya Güleray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:50:18