- •Аннотация
- •Введение
- •1Цель работы и решаемые задачи
- •2Обзор аналогов робота-боксера.
- •3. Разработка структурной схемы робота. На рисунке 1.1. Представлена структурная схема робота.
- •4.Технические характеристики wafer-ot-z670.
- •Сравнительный анализ устройств стз
- •3Функцианальная схема.
- •4Построение системы управления с помощью сетей Петри.
- •Разработка алгоритма системы управления.
- •4.1Функциональная схема.
- •3.3 Система технического зрения Kinect.
- •Видеопоток от сенсора
- •Аудиопотокотсенсора
- •Анимация
- •4.2Определение углов поворота двигателей.
- •5Программа управления роботом боксером .
- •6Технологический процесс.
Видеопоток от сенсора
Внимательно почитав MSDN можно узнать полезную информацию об этом потоке. Например, разработчик волен установить уровень качества и формат картинки при инициализации видеопотока. От уровня качества напрямую зависит количество и скорость передаваемых от сенсора данных, ограниченной, в свою очередь, пропускной способностью USB 2.0. Так для картинки разрешением 1280x960 количество кадров в секунду составит 12, а для картинки разрешением 640x480 – 30. Формат изображения определяется цветовой моделью и может быть либо RGB, либо YUV.
Комбинации уровня качества и формата картинки представлены перечислением ColorImageFormat. Три из его значений определяют 32-битное кодирование каждого пиксела изображения:
RgbResolution1280x960Fps12,RgbResolution640x480Fps30иYuvResolution640x480Fps15, а четвертый – 16-битноеRawYuvResolution640x480Fps15. Большое недоумение вызывает YuvResolution640x480Fps15. В MSDN четко сказано (тут и тут), что это YUV конвертированный в RGB32… но, тем не менее, продолжающий оставаться YUV.
Чтобы начать принимать видеопоток от сенсора, этот самый поток необходимо инициализировать:
// включаем видеопоток с цветовой моделью RGB и разрешением 640x480(30fps)
kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
// теперь можно подписаться на событие сенсора, чтобы получать готовый кадр и работать с ним
kinect.ColorFrameReady +=SensorColorFrameReady;
Аудиопотокотсенсора
В Kinect встроен набор из четырёх микрофонов, использующий 24-битный аналого-цифровой преобразователь, а встроенный обработчик звукового сигнала включает подавление эха и уменьшение шума. Каждый микрофон установлен так, чтобы иметь небольшую направленность. Задействовать ли эхо или шумоподавление зависит от разработчика, т.е. эти опции задаются на этапе инициализации аудиопотока. Оптимальное расстояние между говорящим и сенсором – 1-3 метра.
Звуковые возможности Kinect могут быть использованы самыми различными способами, например, для высококачественного захвата аудиосигнала, определение положения аудиосигнала или распознавания речи. О распознавании речи мы поговорим далее, а сейчас мне бы хотелось остановиться на одной особенности Kinect,. Инициализация аудиопотока занимает чуть меньше четырех секунд. Это необходимо учитывать, и, скажем, после вызова метода сенсора Start(), делать задержку в четыре секунды, прежде чем настраивать параметры аудиопотока —KinectSensor.AudioSource.Пример определения направления звука можно найти в MSDN.
Поток данных дальномера от сенсора это поток формирующийся из кадров, в которых каждый пиксель содержит расстояние (в миллиметрах) от плоскости сенсора до ближайшего объекта в определенных координатах поля зрения камеры. Как и в случае видеопотока, для потока данных дальномера можно устанавливать разрешение одного кадра, которое определяется перечислением DepthImageFormat. При частоте кадров 30 в секунду, разработчик волен выбирать разрешения 80x60 (Resolution80x60Fps30), 320x240 (Resolution320x240Fps30) и 640x480 (Resolution640x480Fps30). И как уже было сказано в предыдущей части, существует два диапазона «рабочих» расстояний: DefaultRange и NearRange, определяемых перечислением DepthRange.
// устанавливаем диапазон расстояний
kinect.DepthStream.Range = DepthRange.Near;
// и включаем поток дальномера с разрешением 640x480(30fps)
kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30);
Расстояния в каждом пикселе кодируется только 13-ю битами, а 3 бита призваны идентифицировать человека. Если расстояние до объекта оказывается выходящим за рабочий, в 13 битах вернется ноль или определенная константа. Если при инициализации сенсора включить возможность трекинга человеческой фигуры, в 3 битах будет возвращаться порядковый номер (1 или 2) обнаруженного человека (если в данной точке найден человек, иначе вернется 0):kinect.SkeletonStream.Enable();
