Skip to main content

Дистанция и Препятствия — Ближнее поле зрения робота

Если IMU — это “внутреннее ухо” робота (чувство равновесия), то датчики расстояния — его “щупальца” или “усы”. Они отвечают за взаимодействие с ближайшим окружением:

  • “Насколько я близко к стене?” (избегание столкновений)
  • “Есть ли передо мной препятствие?” (реакция на изменения)
  • “Касаюсь ли я чего-нибудь?” (тактильная обратная связь)

Эти датчики работают в ближнем поле (от миллиметров до нескольких метров) и должны быть быстрыми, надежными и дешевыми, так как их часто устанавливают в нескольких экземплярах по периметру робота.


Физические принципы измерения

1. Ультразвуковая эхолокация (Time-of-Flight)

Принцип: Измерение времени пролета звукового импульса.

\[ d = \frac{v_{\text{звук}}(T) \cdot \Delta t}{2} \] где:

  • \(d\) — расстояние до объекта (м)
  • \(v_{\text{звук}}(T)\) — скорость звука при температуре \(T\) (м/с)
  • \(\Delta t\) — время между отправкой импульса и приемом эха (с)

Скорость звука зависит от температуры: \[ v_{\text{звук}}(T) = 331.3 \cdot \sqrt{1 + \frac{T}{273.15}} \quad \text{[м/с]} \]

2. Инфракрасная триангуляция

Принцип: Геометрия подобных треугольников.

\[ \frac{d}{B} = \frac{f}{x} \quad \Rightarrow \quad d = \frac{B \cdot f}{x} \] где:

  • \(d\) — расстояние до объекта (м)
  • \(B\) — база (расстояние между излучателем и приемником, м)
  • \(f\) — фокусное расстояние линзы приемника (м)
  • \(x\) — смещение светового пятна на ПЗС-сенсоре (м)

Важно: Выходное напряжение \(V_{\text{out}} \propto 1/d\) — нелинейная зависимость!

3. Оптический Time-of-Flight (ToF)

Принцип: Измерение времени пролета светового импульса.

\[ d = \frac{c \cdot \Delta t}{2} \] где \(c = 299792458\ \text{м/с}\) — скорость света.

Для измерения 1 см требуется измерять время с точностью: \[ \Delta t = \frac{2 \cdot 0.01}{3 \times 10^8} \approx 66.7 \times 10^{-12}\ \text{с} = 66.7\ \text{пс} \]


Сравнительная таблица технологий

ТехнологияПринципДиапазонТочностьКонусПримерыФормула расчета
УльтразвукЭхолокация0.02-4 м±1-3%Широкий (15-30°)HC-SR04, JSN-SR04T\(d = v_{\text{звук}}\Delta t / 2\)
ИК-триангуляцияГеометрия0.1-0.8 м±5%Узкий (5-10°)Sharp GP2Y0A21\(d = Bf / x\) (нелинейный выход)
ToF (оптический)ToF светадо 2 м±1-3%Средний (25°)VL53L0X, VL53L1X\(d = c\Delta t / 2\)
Лазерный ToFToF лазерадо 8 м±1%Очень узкий (2°)TF-Luna, TFmini\(d = c\Delta t / 2\)

Специализированные датчики обнаружения

1. PIR (Passive Infrared) — Обнаружение движения

Физика: Пироэлектрический эффект — генерация заряда при изменении температуры.

  • Не измеряет расстояние!
  • Только движение теплых объектов
  • Двухсекционный сенсор + линза Френела

2. Микроволновые (Доплеровские) датчики

Принцип: Доплеровский сдвиг частоты отраженного СВЧ-сигнала. \[ f_{\text{доп}} = \frac{2v \cdot f_{\text{изл}}}{c} \cdot \cos\theta \] где \(v\) — скорость объекта, \(\theta\) — угол между направлением движения и лучом.

Пример: RCWL-0516 (5.8 ГГц)


Практические рецепты

Рецепт 1: Ультразвуковой дальномер HC-SR04

// Подключение: Trig → D9, Echo → D10
float readUltrasonic(int trigPin, int echoPin, float temperature_C = 20.0) {
    // Скорость звука при данной температуре
    float sound_speed = 331.3 * sqrt(1.0 + temperature_C / 273.15);
    
    // Генерация импульса 10 мкс
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    
    // Измерение длительности импульса
    long duration = pulseIn(echoPin, HIGH, 30000); // timeout 30 ms
    
    // Расчет расстояния
    float distance = sound_speed * duration * 1e-6 / 2.0;
    return distance; // метры
}

Рецепт 2: Калибровка ИК-дальномера Sharp

# Sharp GP2Y0A21: нелинейная характеристика V_out = f(1/d)
def calibrate_sharp_sensor(measured_distances, measured_voltages):
    # Преобразуем: 1/distance = a*voltage + b
    inv_distances = 1.0 / np.array(measured_distances)
    coefficients = np.polyfit(measured_voltages, inv_distances, 1)
    a, b = coefficients
    
    def voltage_to_distance(voltage):
        inv_d = a * voltage + b
        return 1.0 / inv_d if inv_d > 0 else float('inf')
    
    return voltage_to_distance

Рецепт 3: Система из нескольких датчиков

class ObstacleDetectionSystem {
private:
    float safe_distance_;
    std::vector<DistanceSensor*> sensors_;
    
public:
    bool obstacleDetected() {
        int confirmations = 0;
        for (auto sensor : sensors_) {
            float dist = sensor->read();
            if (dist < safe_distance_ && dist > sensor->min_range()) {
                confirmations++;
            }
        }
        // Препятствие есть, если хотя бы 2 датчика его видят
        return confirmations >= 2;
    }
};

Типичные ошибки и решения

Ошибка 1: “УЗ датчик показывает бесконечность на близком расстоянии”

Причина: Мертвая зона (для HC-SR04 ~2 см) Решение:

float readUltrasonicSafe() {
    float dist = readUltrasonic();
    if (dist < 0.02) return 0.02; // Минимальное расстояние
    return dist;
}

Ошибка 2: “ИК датчик врет на черных поверхностях”

Причина: Низкий коэффициент отражения ИК Решение: Комбинировать с УЗ или использовать ToF

Ошибка 3: “Интерференция нескольких УЗ датчиков”

Принцип: Датчики слышат эхо друг друга

Решение: Ошибка: Интерференция нескольких УЗ датчиков

Принцип: Датчики воспринимают эхо от соседних сенсоров как собственное.

Решение: Опрашивать датчики последовательно с задержкой, достаточной для затухания сигнала.

\[ \Delta t_{min} = \frac{2 \cdot D_{max}}{v_s} \]

Где:

  • \(\Delta t_{min}\) — минимальная задержка между импульсами соседних датчиков (с).
  • \(D_{max}\) — максимальная рабочая дальность датчика (м).
  • \(v_s \approx 343 \text{ м/с}\) — скорость звука.

Пример: При рабочей дальности \(D_{max} = 3 \text{ м}\): \[ \Delta t_{min} = \frac{2 \cdot 3}{343} \approx 0.0175 \text{ с} \approx 18 \text{ мс} \]

Практический совет: Для надежности рекомендуется ставить задержку 20-30 мс между опросами разных УЗ-датчиков.


Архитектурные паттерны

Паттерн 1: “Усы робота” (Whiskers)

Схема:
  [Датчик_перед] → Фильтр НЧ → Пороговый детектор → STOP
  [Датчик_лев]   → Фильтр НЧ → Пороговый детектор → Поворот вправо
  [Датчик_прав]  → Фильтр НЧ → Пороговый детектор → Поворот влево

Паттерн 2: Контроль высоты дрона

Алгоритм:

  1. ToF-датчик направлен вертикально вниз.
  2. ПИД-регулятор для поддержания стабильной высоты:

\[ u(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de(t)}{dt} \]

  1. Текущая высота \( h(t) \) берется напрямую из измерений ToF.

Паттерн 3: Бесконтактный end-stop (концевой выключатель)

Применение:

  • Индуктивный: Обнаружение только металлических деталей (станины, валы).
  • Ёмкостной: Реагирует на любые материалы (пластик, дерево, жидкости).
  • Оптический (ИК): Для прозрачных или мелких объектов, где важна скорость срабатывания.

Принцип работы индуктивного датчика: Изменение расстояния до металла меняет параметры магнитного поля катушки:

\[ L(x) = L_0 \cdot f\left(\frac{1}{x}\right) \]

Где:

  • \( L(x) \) — текущая индуктивность катушки.
  • \( L_0 \) — базовая индуктивность в воздухе.
  • \( x \) — расстояние до металлического объекта.
  • \( f \) — нелинейная функция взаимодействия (зависит от геометрии датчика).

Преимущество Полная защита от пыли, масла и износа (в отличие от механических кнопок).


Будущие тенденции

1. Многоспектральные датчики

Идея: Один датчик, несколько длин волн (ИК+УЗ+ToF)

Преимущество: Всепогодность, работа с любыми материалами

2. AI на сенсорах (TinyML)

Пример: Нейросеть, классифицирующая объекты по характеристикам отраженного сигнала (например, ToF-профиль или спектр):

\[ y = \text{softmax}(\mathbf{W} \cdot \mathbf{x}_{\text{sensor}} + \mathbf{b}) \]

Где:

  • \(\mathbf{x}_{\text{sensor}}\) — входной вектор признаков от датчика (raw data).
  • \(\mathbf{W}\) — матрица весов обученной модели.
  • \(\mathbf{b}\) — вектор смещения (bias).
  • \(\text{softmax}\) — функция активации, выдающая вероятность принадлежности к классу.

3. Квантовые датчики расстояния

Принцип: Atom Interferometry (Атомная интерферометрия). Использует волновые свойства атомов, охлажденных лазерами до сверхнизких температур.

Точность: Нанометровое разрешение (\(10^{-9}\) м) при измерениях на дистанциях в несколько метров.

Статус на 2026 год:

  • Активные лабораторные прототипы и первые полевые испытания для гравиметрии и инерциальной навигации.
  • Основной барьер — миниатюризация лазерных систем и вакуумных камер.

Формула фазового сдвига: \[ \Delta \Phi = \mathbf{k} \cdot \mathbf{a} \cdot T^2 \] Где \(\mathbf{k}\) — волновой вектор лазера, \(\mathbf{a}\) — ускорение/смещение, \(T\) — время взаимодействия.


Что дальше?

Датчики расстояния — фундамент взаимодействия робота с миром:

  1. Сенсорная fusion — как объединить данные разных датчиков
  2. Обход препятствий — алгоритмы планирования пути
  3. HMI и интерфейсы — тактильное взаимодействие
  4. Надежность систем — отказоустойчивость критических датчиков

Главный принцип: Никогда не полагайтесь на один датчик для критически важных функций. Избыточность (redundancy) — ключ к надежности. И помните: каждый тип датчиков видит мир по-своему — искусство в том, чтобы правильно интерпретировать эту “картину”.