感知系统:让无人机”看见”世界¶
学习目标
理解无人机感知系统的作用与分类
掌握相机和激光雷达的核心参数及选型依据
学会在Gazebo中配置和使用感知传感器
能够读取并理解传感器输出的ROS话题数据
人类通过眼睛获取外界80%以上的信息。对于智能无人机而言,感知系统就是它的”眼睛”——没有感知,无人机就无法理解周围环境,更谈不上自主飞行。本节将带你认识无人机最重要的两类感知传感器:相机和激光雷达。
为什么需要感知系统?¶
回顾上一节的无人机硬件架构图,感知系统位于整个数据流的最前端:
感知系统的核心任务是将物理世界的信息数字化,为后续的定位、规划、控制提供数据基础。
感知系统能做什么?¶
能力 |
应用场景 |
典型传感器 |
|---|---|---|
障碍物检测 |
避障飞行 |
深度相机、激光雷达 |
目标识别 |
跟踪、巡检 |
RGB相机 + AI |
环境建图 |
SLAM、导航 |
激光雷达、双目相机 |
位姿估计 |
视觉里程计 |
单目/双目相机 |
降落标识识别 |
精准降落 |
RGB相机 |
感知传感器分类¶
根据感知维度的不同,无人机常用的感知传感器可分为两大类,二维视觉传感器,例如相机等,和三维空间传感器,例如激光雷达。接下来,我们将分别深入学习这两类传感器。
视觉传感器:相机¶
相机是无人机上最常见的感知传感器,成本低、信息丰富,广泛应用于目标识别、视觉定位等场景。
单目相机¶
单目相机是最基础的视觉传感器,它模拟人类单眼的成像过程。
成像原理
单目相机基于针孔成像模型:三维空间中的点通过光学中心投影到二维成像平面上。
成像过程的数学表达:
其中: - \((X, Y, Z)\) 是三维点在相机坐标系下的坐标 - \((u, v)\) 是该点在图像上的像素坐标 - \(f_x, f_y\) 是焦距(以像素为单位) - \((c_x, c_y)\) 是图像中心(主点)
核心参数
选择单目相机时,需要关注以下参数:
参数 |
含义 |
选型建议 |
|---|---|---|
分辨率 |
图像的像素数量 |
室内:640×480;室外:1280×720或更高 |
帧率(FPS) |
每秒采集图像数 |
视觉SLAM:30FPS;高速场景:60FPS+ |
视场角(FOV) |
相机可视范围 |
避障:宽FOV(>90°);识别:窄FOV |
快门类型 |
曝光方式 |
运动场景选全局快门(Global Shutter) |
接口 |
数据传输方式 |
USB3.0、MIPI CSI |
重要概念:全局快门 vs 卷帘快门
全局快门(Global Shutter):所有像素同时曝光,适合高速运动场景
卷帘快门(Rolling Shutter):逐行曝光,运动时会产生”果冻效应”
对于无人机这类高速运动平台,强烈建议选择全局快门相机。
单目相机的局限性
单目相机的最大问题是缺乏深度信息——它无法直接测量物体到相机的距离。这就像人闭上一只眼睛后,难以准确判断物体远近。
解决方案有两种: 1. 使用双目相机通过视差计算深度 2. 使用深度相机主动测量深度
深度相机:Intel RealSense D435i¶
Intel RealSense D435i是无人机领域最流行的深度相机之一,集成了RGB相机、红外双目相机、红外发射器和IMU,是一款”全能型”传感器。
工作原理
D435i采用主动红外立体视觉技术:
红外发射器向环境投射红外散斑图案
双红外相机从不同角度捕获这些图案
通过立体匹配算法计算每个像素的视差
根据视差计算深度:\(Z = \frac{f \cdot B}{d}\)(\(f\)为焦距,\(B\)为基线,\(d\)为视差)
这种主动式方案的优势是:即使在纹理缺乏的场景(如白墙)也能获得深度信息。
核心参数
参数 |
D435i规格 |
说明 |
|---|---|---|
深度分辨率 |
最高1280×720 |
可配置 |
深度帧率 |
最高90 FPS |
取决于分辨率 |
RGB分辨率 |
最高1920×1080 |
30 FPS |
深度FOV |
87° × 58° |
水平 × 垂直 |
测距范围 |
0.1m ~ 10m |
推荐0.3m~3m获得最佳精度 |
深度精度 |
<2% @ 2m |
在2米处误差小于4cm |
基线长度 |
50mm |
双红外相机间距 |
IMU |
6轴(加速度计+陀螺仪) |
BMI055芯片 |
接口 |
USB 3.0 Type-C |
供电+数据 |
尺寸 |
90mm × 25mm × 25mm |
小巧紧凑 |
重量 |
约72g |
适合无人机搭载 |
使用场景与选型建议
场景 |
是否适用 |
原因 |
|---|---|---|
室内避障 |
非常适合 |
测距范围和精度匹配 |
室内SLAM |
适合 |
RGB-D + IMU可用于VIO |
室外强光 |
受限 |
阳光干扰红外,深度质量下降 |
远距离测距 |
不适合 |
超过3m精度明显下降 |
实践提示
使用D435i时的常见问题: 1. 红外散斑干扰:在较暗环境下,红外散斑会出现在图像中,影响特征提取。如果用于视觉SLAM,需关闭红外发射器。 2. 深度对齐:RGB和深度图需要对齐后才能生成彩色点云。在ROS中设置
align_depth:=true。 3. USB3.0必须:使用USB2.0会导致帧率大幅下降。
ROS数据接口
D435i在ROS中发布以下主要话题:
# RGB图像
/camera/color/image_raw # sensor_msgs/Image
# 深度图像
/camera/depth/image_rect_raw # sensor_msgs/Image (原始深度)
/camera/aligned_depth_to_color/image_raw # 对齐到RGB的深度
# 点云
/camera/depth/color/points # sensor_msgs/PointCloud2
# 相机内参
/camera/color/camera_info # sensor_msgs/CameraInfo
# IMU数据
/camera/imu # sensor_msgs/Imu
查看话题数据示例:
# 查看RGB图像话题信息
rostopic info /camera/color/image_raw
# 查看IMU数据
rostopic echo /camera/imu
代码示例:订阅相机图像
下面是一个订阅D435i RGB图像话题的示例代码。
Python实现简洁,适合快速开发和原型验证。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
文件名: camera_subscriber.py
功能: 订阅D435i RGB图像话题并显示图像信息
"""
import cv2
import rospy
from cv_bridge import CvBridge
from sensor_msgs.msg import Image
class CameraSubscriber:
def __init__(self):
rospy.init_node('camera_subscriber_python', anonymous=True)
self.bridge = CvBridge()
# 订阅RGB图像话题
self.image_sub = rospy.Subscriber(
'/camera/color/image_raw',
Image,
self.image_callback
)
rospy.loginfo("Python相机订阅节点已启动,等待图像数据...")
def image_callback(self, msg):
"""图像回调函数"""
try:
# 将ROS图像消息转换为OpenCV格式
cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8")
# 获取图像信息
height, width, channels = cv_image.shape
rospy.loginfo(
f"收到图像: {width}x{height}, "
f"时间戳: {msg.header.stamp.secs}.{msg.header.stamp.nsecs}"
)
# 可选:显示图像(需要图形界面)
# cv2.imshow("Camera View", cv_image)
# cv2.waitKey(1)
except Exception as e:
rospy.logerr(f"图像处理错误: {e}")
if __name__ == '__main__':
try:
subscriber = CameraSubscriber()
rospy.spin()
except rospy.ROSInterruptException:
pass
运行方法:
# 确保已安装依赖
pip install opencv-python rospkg
# 运行节点
python camera_subscriber.py
三维传感器:激光雷达¶
激光雷达(LiDAR, Light Detection and Ranging)通过发射激光束并测量反射时间来获取精确的三维距离信息。相比相机,激光雷达具有测距精度高、不受光照影响的优势。
激光雷达工作原理¶
激光雷达的基本原理是飞行时间法(Time of Flight, ToF):
发射激光脉冲
激光遇到障碍物后反射
接收反射激光,测量往返时间 \(\Delta t\)
计算距离:\(d = \frac{c \cdot \Delta t}{2}\)(\(c\)为光速)
Livox Mid-360¶
Livox Mid-360是大疆旗下览沃科技推出的混合固态激光雷达,以其360°水平FOV、小巧体积、高性价比在机器人和无人机领域广受欢迎。
核心参数
参数 |
Mid-360规格 |
说明 |
|---|---|---|
水平FOV |
360° |
全向感知 |
垂直FOV |
59°(-7°~+52°) |
非对称,下方范围更大 |
测距范围 |
0.1m ~ 70m |
反射率≥80%时可达70m |
测距精度 |
±3cm |
@10m, 反射率80% |
角分辨率 |
0.2° |
非重复扫描累积 |
点云速率 |
约200,000点/秒 |
单回波模式 |
扫描频率 |
10Hz |
每100ms一帧 |
抗干扰 |
100klx |
可在强光下工作 |
尺寸 |
65mm × 65mm × 60mm |
网球大小 |
重量 |
265g |
适合无人机搭载 |
工作温度 |
-20°C ~ +55°C |
内置自加热 |
接口 |
以太网(100Mbps) |
UDP协议传输 |
内置IMU |
6轴 |
可用于LIO算法 |
非重复扫描特性
Mid-360采用Livox独特的非重复扫描技术:
传统机械激光雷达每帧扫描相同位置
Mid-360每帧扫描位置略有不同,随时间累积覆盖更多区域
这意味着:积分时间越长,点云越密集。
积分时间 覆盖率
0.1s ≈ 32线机械雷达
0.2s > 32线机械雷达
0.5s > 64线机械雷达
使用场景与选型建议
场景 |
是否适用 |
原因 |
|---|---|---|
室内建图 |
非常适合 |
360°FOV,近距精度高 |
室外导航 |
适合 |
70m量程,抗强光 |
高速避障 |
需注意 |
10Hz帧率,需预测 |
精密测绘 |
受限 |
精度不如测绘级雷达 |
重要提示:FOV与有效量程
Mid-360的有效量程随垂直角度变化: - 正上方(+52°):量程最短 - 正下方(-7°):量程最长(可达70m)
安装时需考虑主要感知方向。
ROS数据接口
Mid-360在ROS中发布以下主要话题:
# 点云数据(标准格式)
/livox/lidar # sensor_msgs/PointCloud2
# 点云数据(Livox自定义格式,包含更多信息)
/livox/lidar_custom # livox_ros_driver2/CustomMsg
# IMU数据
/livox/imu # sensor_msgs/Imu
查看点云数据:
# 在RViz中可视化点云
rosrun rviz rviz
# 添加PointCloud2显示,设置Topic为/livox/lidar
代码示例:订阅激光雷达点云
下面是一个订阅Mid-360点云话题并统计点数的示例代码。
Python实现使用sensor_msgs.point_cloud2模块解析点云数据。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
文件名: lidar_subscriber.py
功能: 订阅Livox Mid-360点云话题并统计点数
"""
import rospy
import sensor_msgs.point_cloud2 as pc2
from sensor_msgs.msg import PointCloud2
class LidarSubscriber:
def __init__(self):
rospy.init_node('lidar_subscriber_python', anonymous=True)
self.pc_sub = rospy.Subscriber(
'/livox/lidar', PointCloud2, self.pointcloud_callback
)
rospy.loginfo("Python激光雷达订阅节点已启动,等待点云数据...")
def pointcloud_callback(self, msg):
try:
points = list(pc2.read_points(
msg, field_names=("x", "y", "z"), skip_nans=True
))
num_points = len(points)
if num_points > 0:
x_coords = [p[0] for p in points]
y_coords = [p[1] for p in points]
z_coords = [p[2] for p in points]
rospy.loginfo(f"收到点云: {num_points} 个点")
else:
rospy.logwarn("点云为空")
except Exception as e:
rospy.logerr(f"点云处理错误: {e}")
if __name__ == '__main__':
try:
subscriber = LidarSubscriber()
rospy.spin()
except rospy.ROSInterruptException:
pass
CMakeLists.txt 配置:
cmake_minimum_required(VERSION 3.0.2)
project(lidar_subscriber)
find_package(catkin REQUIRED COMPONENTS
roscpp
sensor_msgs
pcl_ros
pcl_conversions
)
find_package(PCL REQUIRED)
catkin_package()
include_directories(
${catkin_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
)
add_executable(lidar_subscriber_cpp src/lidar_subscriber.cpp)
target_link_libraries(lidar_subscriber_cpp
${catkin_LIBRARIES}
${PCL_LIBRARIES}
)
编译和运行:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
rosrun lidar_subscriber lidar_subscriber_cpp
传感器参数对比与选型指南¶
相机 vs 激光雷达¶
对比维度 |
相机 |
激光雷达 |
|---|---|---|
数据类型 |
图像(2D) |
点云(3D) |
深度信息 |
需计算或主动测量 |
直接测量 |
测距精度 |
厘米级(近距) |
厘米级(全程) |
测距范围 |
0.1~10m(深度相机) |
0.1~70m+ |
受光照影响 |
大(尤其夜间/强光) |
小 |
信息丰富度 |
高(颜色、纹理) |
低(仅几何) |
计算负载 |
图像处理较重 |
点云处理较轻 |
成本 |
低~中 |
中~高 |
重量 |
轻(几十克) |
较轻~中等 |
选型决策树¶
根据应用场景,如果是基于目标识别/跟踪,可以选择普通RGB相机。如果涉及室内避障,以及SLAM需要深度信息的场景,选择深度相机,例如D435i或者3D激光雷达。如果是室外远距离感知,选择激光雷达,例如Mid-360。
动手实践:在Gazebo中添加传感器¶
现在,让我们在Gazebo仿真环境中为P450无人机添加感知传感器。我们将从简单的单目相机开始,逐步升级到D435i深度相机和Mid-360激光雷达。
理解Gazebo传感器配置¶
在Gazebo中,传感器通过SDF(Simulation Description Format)文件描述。一个典型的传感器配置包括:
<sensor name="传感器名称" type="传感器类型">
<!-- 传感器参数 -->
<update_rate>更新频率</update_rate>
<!-- 传感器特有配置 -->
<camera>
<!-- 相机参数 -->
</camera>
<!-- ROS插件 -->
<plugin name="插件名称" filename="插件文件">
<!-- ROS话题配置 -->
</plugin>
</sensor>
实践1:添加单目相机¶
目标:在P450模型上添加一个前视单目相机
步骤1:创建相机模型文件
在~/catkin_ws/src/下创建一个新的包来存放我们的传感器配置:
cd ~/catkin_ws/src
mkdir -p prometheus_sensor_tutorial/models/simple_camera
cd prometheus_sensor_tutorial/models/simple_camera
创建model.config文件:
<?xml version="1.0"?>
<model>
<name>simple_camera</name>
<version>1.0</version>
<sdf version="1.6">model.sdf</sdf>
<author>
<name>Your Name</name>
</author>
<description>A simple monocular camera for tutorial</description>
</model>
创建model.sdf文件:
<?xml version="1.0"?>
<sdf version="1.6">
<model name="simple_camera">
<static>false</static>
<link name="camera_link">
<!-- 相机外观 -->
<visual name="visual">
<geometry>
<box>
<size>0.02 0.05 0.02</size>
</box>
</geometry>
<material>
<ambient>0.1 0.1 0.1 1</ambient>
</material>
</visual>
<!-- 相机碰撞体 -->
<collision name="collision">
<geometry>
<box>
<size>0.02 0.05 0.02</size>
</box>
</geometry>
</collision>
<!-- 相机传感器 -->
<sensor name="camera" type="camera">
<always_on>true</always_on>
<update_rate>30</update_rate>
<camera name="simple_camera">
<!-- 图像参数 -->
<horizontal_fov>1.047</horizontal_fov> <!-- 60度 -->
<image>
<width>640</width>
<height>480</height>
<format>R8G8B8</format>
</image>
<!-- 裁剪平面 -->
<clip>
<near>0.1</near>
<far>100</far>
</clip>
<!-- 噪声模型 -->
<noise>
<type>gaussian</type>
<mean>0.0</mean>
<stddev>0.007</stddev>
</noise>
</camera>
<!-- ROS插件 -->
<plugin name="camera_controller" filename="libgazebo_ros_camera.so">
<alwaysOn>true</alwaysOn>
<updateRate>30.0</updateRate>
<cameraName>simple_camera</cameraName>
<imageTopicName>image_raw</imageTopicName>
<cameraInfoTopicName>camera_info</cameraInfoTopicName>
<frameName>camera_link</frameName>
</plugin>
</sensor>
</link>
</model>
</sdf>
关键参数解读:
参数 |
值 |
说明 |
|---|---|---|
|
1.047(弧度) |
水平视场角60°,\(\pi/3 \approx 1.047\) |
|
640/480 |
VGA分辨率 |
|
R8G8B8 |
24位RGB格式 |
|
0.1/100 |
成像范围0.1m~100m |
|
30 |
30 FPS |
步骤2:在launch文件中加载相机
修改或创建launch文件,将相机添加到无人机模型上:
<!-- 在无人机spawn之后添加相机 -->
<node name="spawn_camera" pkg="gazebo_ros" type="spawn_model"
args="-sdf -file $(find prometheus_sensor_tutorial)/models/simple_camera/model.sdf
-model simple_camera
-x 0.1 -y 0 -z 0.05
-reference_frame P450::base_link"/>
步骤3:验证相机数据
# 启动仿真环境
roslaunch prometheus_gazebo sitl_indoor_1uav_P450.launch
# 查看相机话题
rostopic list | grep camera
# 使用rqt查看图像
rqt_image_view /simple_camera/image_raw
实践2:添加RealSense D435i深度相机¶
Prometheus项目已经提供了D435i的Gazebo仿真插件,我们来学习如何使用它。
步骤1:查看D435i仿真模型
D435i的仿真模型位于:
ls ~/Prometheus/Simulator/realsense_gazebo_plugin/
步骤2:理解D435i的SDF配置
D435i的核心传感器配置(简化版):
<sensor name="depth_camera" type="depth">
<update_rate>30</update_rate>
<camera>
<horizontal_fov>1.5184</horizontal_fov> <!-- 87° -->
<image>
<width>640</width>
<height>480</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.1</near>
<far>10</far>
</clip>
<depth_camera>
<output>depths</output>
</depth_camera>
</camera>
<plugin name="depth_camera_plugin" filename="libgazebo_ros_openni_kinect.so">
<alwaysOn>true</alwaysOn>
<updateRate>30.0</updateRate>
<cameraName>d435i</cameraName>
<imageTopicName>color/image_raw</imageTopicName>
<depthImageTopicName>depth/image_raw</depthImageTopicName>
<pointCloudTopicName>depth/points</pointCloudTopicName>
<cameraInfoTopicName>color/camera_info</cameraInfoTopicName>
<depthImageCameraInfoTopicName>depth/camera_info</depthImageCameraInfoTopicName>
<frameName>d435i_link</frameName>
<pointCloudCutoff>0.1</pointCloudCutoff>
<pointCloudCutoffMax>10.0</pointCloudCutoffMax>
</plugin>
</sensor>
D435i仿真参数对照表:
参数 |
真实D435i |
仿真配置 |
说明 |
|---|---|---|---|
深度FOV |
87°×58° |
87° (H) |
仿真中简化 |
深度分辨率 |
1280×720 |
640×480 |
降低以提升性能 |
深度范围 |
0.1~10m |
0.1~10m |
一致 |
RGB分辨率 |
1920×1080 |
640×480 |
降低以提升性能 |
步骤3:启动带D435i的无人机
# 使用Prometheus提供的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P450_D435i.launch
步骤4:验证深度相机数据
# 查看所有D435i相关话题
rostopic list | grep d435i
# 查看RGB图像
rqt_image_view /d435i/color/image_raw
# 查看深度图像
rqt_image_view /d435i/depth/image_raw
# 在RViz中查看点云
rviz
# 添加PointCloud2,Topic设为 /d435i/depth/points
代码示例:处理深度图像
下面是一个订阅深度图像并计算平均深度的示例。
实践3:添加Livox Mid-360激光雷达¶
步骤1:查看Mid-360仿真模型
Prometheus项目中Mid-360的仿真插件位于:
ls ~/Prometheus/Simulator/livox_laser_gazebo_plugins/
步骤2:理解Mid-360的SDF配置
激光雷达的核心配置(简化版):
<sensor name="livox_mid360" type="ray">
<always_on>true</always_on>
<update_rate>10</update_rate>
<visualize>true</visualize>
<ray>
<scan>
<horizontal>
<samples>360</samples>
<resolution>1</resolution>
<min_angle>-3.14159</min_angle>
<max_angle>3.14159</max_angle>
</horizontal>
<vertical>
<samples>16</samples>
<resolution>1</resolution>
<min_angle>-0.122</min_angle> <!-- -7° -->
<max_angle>0.908</max_angle> <!-- +52° -->
</vertical>
</scan>
<range>
<min>0.1</min>
<max>70</max>
<resolution>0.01</resolution>
</range>
<noise>
<type>gaussian</type>
<mean>0</mean>
<stddev>0.03</stddev>
</noise>
</ray>
<plugin name="livox_mid360_plugin" filename="liblivox_laser_simulation.so">
<ray_visual>true</ray_visual>
<topicName>/livox/lidar</topicName>
<frameName>livox_frame</frameName>
</plugin>
</sensor>
Mid-360仿真参数对照表:
参数 |
真实Mid-360 |
仿真配置 |
说明 |
|---|---|---|---|
水平FOV |
360° |
360° |
一致 |
垂直FOV |
-7°~+52° |
-7°~+52° |
一致 |
测距范围 |
0.1~70m |
0.1~70m |
一致 |
点云速率 |
~200k点/秒 |
简化 |
仿真性能优化 |
帧率 |
10Hz |
10Hz |
一致 |
步骤3:启动带Mid-360的无人机
# 使用Prometheus提供的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P600_mid360.launch
步骤4:验证激光雷达数据
# 查看点云话题
rostopic list | grep livox
# 查看点云消息类型
rostopic info /livox/lidar
# 在RViz中查看点云
rviz
# 添加PointCloud2,Topic设为 /livox/lidar
# 设置Fixed Frame为 livox_frame 或 base_link
实践4:同时使用多个传感器¶
在实际应用中,我们通常需要融合多个传感器的数据。下面演示如何同时使用D435i和Mid-360。
步骤1:启动多传感器配置
# 使用带有多传感器的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P600_multi_sensor.launch
步骤2:在RViz中可视化所有传感器数据
创建一个RViz配置文件,同时显示: - RGB图像 - 深度图像 - 点云(来自D435i) - 点云(来自Mid-360)
# 保存RViz配置供后续使用
# File -> Save Config As -> multi_sensor.rviz
步骤3:观察传感器数据特点
传感器 |
数据特点 |
适用场景 |
|---|---|---|
D435i深度 |
近距离密集点云,有颜色 |
近距离避障、物体识别 |
Mid-360 |
远距离稀疏点云,360°覆盖 |
环境建图、远距离感知 |
小结¶
本节我们学习了无人机感知系统的核心内容:
感知系统的作用:将物理世界数字化,为定位、规划、控制提供数据
视觉传感器:
单目相机:成本低,信息丰富,但缺乏深度
深度相机(D435i):提供RGB+深度,适合室内近距离应用
激光雷达:
Mid-360:360°FOV,高精度测距,适合建图和导航
参数选型:根据应用场景选择合适的传感器,关注FOV、分辨率、测距范围、帧率等关键参数
Gazebo实践:学会在仿真中配置和使用传感器,验证数据输出
练习题¶
基础练习¶
参数计算:一个相机的水平FOV为90°,分辨率为640×480,请计算其水平方向每像素对应的角度分辨率(度/像素)。
话题分析:启动带D435i的仿真环境,使用
rostopic hz命令测量以下话题的实际发布频率:/d435i/color/image_raw/d435i/depth/image_raw/d435i/depth/points
数据可视化:在RViz中同时显示D435i的RGB图像和点云,截图保存。
进阶练习¶
SDF修改:修改单目相机的SDF文件,将分辨率改为1280×720,FOV改为90°,验证修改是否生效。
传感器对比:在同一场景中,分别使用D435i和Mid-360扫描一面墙壁(距离2m),对比两者的点云密度和测距精度。
思考题¶
为什么D435i不适合在室外强光环境下使用?如果必须在室外使用深度感知,你会选择什么传感器?
Mid-360的垂直FOV是非对称的(-7°~+52°),这种设计有什么考虑?在无人机上应该如何安装才能最大化利用FOV?
如果你要设计一个用于室内自主探索的无人机,你会选择哪些感知传感器?请说明理由。