.. _sec_perception:
感知系统:让无人机”看见”世界
============================
**学习目标**
- 理解无人机感知系统的作用与分类
- 掌握相机和激光雷达的核心参数及选型依据
- 学会在Gazebo中配置和使用感知传感器
- 能够读取并理解传感器输出的ROS话题数据
人类通过眼睛获取外界80%以上的信息。对于智能无人机而言,感知系统就是它的”眼睛”——没有感知,无人机就无法理解周围环境,更谈不上自主飞行。本节将带你认识无人机最重要的两类感知传感器:\ **相机**\ 和\ **激光雷达**\ 。
为什么需要感知系统?
--------------------
回顾上一节的无人机硬件架构图,感知系统位于整个数据流的最前端:
感知系统的核心任务是\ **将物理世界的信息数字化**\ ,为后续的定位、规划、控制提供数据基础。
感知系统能做什么?
~~~~~~~~~~~~~~~~~~
============ ========== ==================
能力 应用场景 典型传感器
============ ========== ==================
障碍物检测 避障飞行 深度相机、激光雷达
目标识别 跟踪、巡检 RGB相机 + AI
环境建图 SLAM、导航 激光雷达、双目相机
位姿估计 视觉里程计 单目/双目相机
降落标识识别 精准降落 RGB相机
============ ========== ==================
感知传感器分类
~~~~~~~~~~~~~~
根据感知维度的不同,无人机常用的感知传感器可分为两大类,二维视觉传感器,例如相机等,和三维空间传感器,例如激光雷达。接下来,我们将分别深入学习这两类传感器。
视觉传感器:相机
----------------
相机是无人机上最常见的感知传感器,成本低、信息丰富,广泛应用于目标识别、视觉定位等场景。
单目相机
~~~~~~~~
单目相机是最基础的视觉传感器,它模拟人类单眼的成像过程。
**成像原理**
单目相机基于\ **针孔成像模型**\ :三维空间中的点通过光学中心投影到二维成像平面上。
成像过程的数学表达:
.. math:: \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{Z} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix}
其中: - :math:`(X, Y, Z)` 是三维点在相机坐标系下的坐标 - :math:`(u, v)`
是该点在图像上的像素坐标 - :math:`f_x, f_y` 是焦距(以像素为单位) -
:math:`(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采用\ **主动红外立体视觉**\ 技术:
1. **红外发射器**\ 向环境投射红外散斑图案
2. **双红外相机**\ 从不同角度捕获这些图案
3. 通过\ **立体匹配**\ 算法计算每个像素的视差
4. 根据视差计算深度:\ :math:`Z = \frac{f \cdot B}{d}`\ (\ :math:`f`\ 为焦距,\ :math:`B`\ 为基线,\ :math:`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中发布以下主要话题:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 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
查看话题数据示例:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 查看RGB图像话题信息
rostopic info /camera/color/image_raw
# 查看IMU数据
rostopic echo /camera/imu
**代码示例:订阅相机图像**
下面是一个订阅D435i RGB图像话题的示例代码。
Python实现简洁,适合快速开发和原型验证。
.. raw:: latex
\diilbookstyleinputcell
.. code:: 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
**运行方法**\ :
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 确保已安装依赖
pip install opencv-python rospkg
# 运行节点
python camera_subscriber.py
三维传感器:激光雷达
--------------------
激光雷达(LiDAR, Light Detection and
Ranging)通过发射激光束并测量反射时间来获取精确的三维距离信息。相比相机,激光雷达具有\ **测距精度高、不受光照影响**\ 的优势。
激光雷达工作原理
~~~~~~~~~~~~~~~~
激光雷达的基本原理是\ **飞行时间法(Time of Flight, ToF)**\ :
1. 发射激光脉冲
2. 激光遇到障碍物后反射
3. 接收反射激光,测量往返时间 :math:`\Delta t`
4. 计算距离:\ :math:`d = \frac{c \cdot \Delta t}{2}`\ (\ :math:`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中发布以下主要话题:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 点云数据(标准格式)
/livox/lidar # sensor_msgs/PointCloud2
# 点云数据(Livox自定义格式,包含更多信息)
/livox/lidar_custom # livox_ros_driver2/CustomMsg
# IMU数据
/livox/imu # sensor_msgs/Imu
查看点云数据:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 在RViz中可视化点云
rosrun rviz rviz
# 添加PointCloud2显示,设置Topic为/livox/lidar
**代码示例:订阅激光雷达点云**
下面是一个订阅Mid-360点云话题并统计点数的示例代码。
Python实现使用\ ``sensor_msgs.point_cloud2``\ 模块解析点云数据。
.. raw:: latex
\diilbookstyleinputcell
.. code:: python
#!/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 配置**\ :
.. raw:: latex
\diilbookstyleinputcell
.. code:: cmake
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}
)
**编译和运行**\ :
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
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)文件描述。一个典型的传感器配置包括:
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
更新频率
实践1:添加单目相机
~~~~~~~~~~~~~~~~~~~
**目标**\ :在P450模型上添加一个前视单目相机
**步骤1**\ :创建相机模型文件
在\ ``~/catkin_ws/src/``\ 下创建一个新的包来存放我们的传感器配置:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
cd ~/catkin_ws/src
mkdir -p prometheus_sensor_tutorial/models/simple_camera
cd prometheus_sensor_tutorial/models/simple_camera
创建\ ``model.config``\ 文件:
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
simple_camera
1.0
model.sdf
Your Name
A simple monocular camera for tutorial
创建\ ``model.sdf``\ 文件:
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
false
0.02 0.05 0.02
0.1 0.1 0.1 1
0.02 0.05 0.02
true
30
1.047
640
480
R8G8B8
0.1
100
gaussian
0.0
0.007
true
30.0
simple_camera
image_raw
camera_info
camera_link
**关键参数解读**\ :
+--------------------------+-----------------+----------------------------------------------+
| 参数 | 值 | 说明 |
+==========================+=================+==============================================+
| ``horizontal_fov`` | 1.047(弧度) | 水平视场角60°,\ :math:`\pi/3 \approx 1.047` |
+--------------------------+-----------------+----------------------------------------------+
| ``width/height`` | 640/480 | VGA分辨率 |
+--------------------------+-----------------+----------------------------------------------+
| ``format`` | R8G8B8 | 24位RGB格式 |
+--------------------------+-----------------+----------------------------------------------+
| ``near/far`` | 0.1/100 | 成像范围0.1m~100m |
+--------------------------+-----------------+----------------------------------------------+
| ``update_rate`` | 30 | 30 FPS |
+--------------------------+-----------------+----------------------------------------------+
**步骤2**\ :在launch文件中加载相机
修改或创建launch文件,将相机添加到无人机模型上:
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
**步骤3**\ :验证相机数据
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 启动仿真环境
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的仿真模型位于:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
ls ~/Prometheus/Simulator/realsense_gazebo_plugin/
**步骤2**\ :理解D435i的SDF配置
D435i的核心传感器配置(简化版):
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
30
1.5184
640
480
R8G8B8
0.1
10
true
30.0
d435i
color/image_raw
depth/image_raw
depth/points
color/camera_info
depth/camera_info
d435i_link
0.1
10.0
**D435i仿真参数对照表**\ :
========== ========= ======== ==============
参数 真实D435i 仿真配置 说明
========== ========= ======== ==============
深度FOV 87°×58° 87° (H) 仿真中简化
深度分辨率 1280×720 640×480 降低以提升性能
深度范围 0.1~10m 0.1~10m 一致
RGB分辨率 1920×1080 640×480 降低以提升性能
========== ========= ======== ==============
**步骤3**\ :启动带D435i的无人机
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 使用Prometheus提供的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P450_D435i.launch
**步骤4**\ :验证深度相机数据
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 查看所有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的仿真插件位于:
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
ls ~/Prometheus/Simulator/livox_laser_gazebo_plugins/
**步骤2**\ :理解Mid-360的SDF配置
激光雷达的核心配置(简化版):
.. raw:: latex
\diilbookstyleinputcell
.. code:: xml
true
10
true
360
1
-3.14159
3.14159
16
1
-0.122
0.908
0.1
70
0.01
gaussian
0
0.03
true
/livox/lidar
livox_frame
**Mid-360仿真参数对照表**\ :
======== =========== ======== ============
参数 真实Mid-360 仿真配置 说明
======== =========== ======== ============
水平FOV 360° 360° 一致
垂直FOV -7°~+52° -7°~+52° 一致
测距范围 0.1~70m 0.1~70m 一致
点云速率 ~200k点/秒 简化 仿真性能优化
帧率 10Hz 10Hz 一致
======== =========== ======== ============
**步骤3**\ :启动带Mid-360的无人机
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 使用Prometheus提供的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P600_mid360.launch
**步骤4**\ :验证激光雷达数据
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 查看点云话题
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**\ :启动多传感器配置
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 使用带有多传感器的launch文件
roslaunch prometheus_gazebo sitl_indoor_1uav_P600_multi_sensor.launch
**步骤2**\ :在RViz中可视化所有传感器数据
创建一个RViz配置文件,同时显示: - RGB图像 - 深度图像 -
点云(来自D435i) - 点云(来自Mid-360)
.. raw:: latex
\diilbookstyleinputcell
.. code:: bash
# 保存RViz配置供后续使用
# File -> Save Config As -> multi_sensor.rviz
**步骤3**\ :观察传感器数据特点
========= ======================== ====================
传感器 数据特点 适用场景
========= ======================== ====================
D435i深度 近距离密集点云,有颜色 近距离避障、物体识别
Mid-360 远距离稀疏点云,360°覆盖 环境建图、远距离感知
========= ======================== ====================
小结
----
本节我们学习了无人机感知系统的核心内容:
1. **感知系统的作用**\ :将物理世界数字化,为定位、规划、控制提供数据
2. **视觉传感器**\ :
- 单目相机:成本低,信息丰富,但缺乏深度
- 深度相机(D435i):提供RGB+深度,适合室内近距离应用
3. **激光雷达**\ :
- Mid-360:360°FOV,高精度测距,适合建图和导航
4. **参数选型**\ :根据应用场景选择合适的传感器,关注FOV、分辨率、测距范围、帧率等关键参数
5. **Gazebo实践**\ :学会在仿真中配置和使用传感器,验证数据输出
练习题
------
基础练习
~~~~~~~~
1. **参数计算**\ :一个相机的水平FOV为90°,分辨率为640×480,请计算其水平方向每像素对应的角度分辨率(度/像素)。
2. **话题分析**\ :启动带D435i的仿真环境,使用\ ``rostopic hz``\ 命令测量以下话题的实际发布频率:
- ``/d435i/color/image_raw``
- ``/d435i/depth/image_raw``
- ``/d435i/depth/points``
3. **数据可视化**\ :在RViz中同时显示D435i的RGB图像和点云,截图保存。
进阶练习
~~~~~~~~
4. **SDF修改**\ :修改单目相机的SDF文件,将分辨率改为1280×720,FOV改为90°,验证修改是否生效。
5. **传感器对比**\ :在同一场景中,分别使用D435i和Mid-360扫描一面墙壁(距离2m),对比两者的点云密度和测距精度。
思考题
~~~~~~
6. 为什么D435i不适合在室外强光环境下使用?如果必须在室外使用深度感知,你会选择什么传感器?
7. Mid-360的垂直FOV是非对称的(-7°~+52°),这种设计有什么考虑?在无人机上应该如何安装才能最大化利用FOV?
8. 如果你要设计一个用于室内自主探索的无人机,你会选择哪些感知传感器?请说明理由。
延伸阅读
--------
- `Intel RealSense D435i
官方规格 `__
- `Livox Mid-360 用户手册 `__
- `Gazebo传感器教程 `__
- `ROS sensor_msgs消息定义 `__