MiniBot-SerControl — различия между версиями
Vooon (обсуждение | вклад) м |
MiBBiM (обсуждение | вклад) м (→Комманды) |
||
| (не показано 17 промежуточных версий 1 участника) | |||
| Строка 1: | Строка 1: | ||
| + | [[Категория:МиниБот]] | ||
| + | |||
== MiniBot SerControl == | == MiniBot SerControl == | ||
Это порт микропрограммы [[Шлюз-контроллер GATE-A8D8M2|GATE-A8D8M2]] на аппаратную платформу [[:Категория:МиниБот|МиниБота]]. | Это порт микропрограммы [[Шлюз-контроллер GATE-A8D8M2|GATE-A8D8M2]] на аппаратную платформу [[:Категория:МиниБот|МиниБота]]. | ||
| + | Формат обмена и базовые комманды совпадают. | ||
=== Возможности === | === Возможности === | ||
| − | * [[w:I2C|I2C]] Шина<ref name=" | + | * [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref> |
| − | <!-- * [[w:SPI|SPI]] Шина<ref name=" | + | <!-- * [[w:SPI|SPI]] Шина<ref name="not-impl">Пока не поддерживается.</ref> --> |
* Очередь команд управления моторами с [[ru:ПИД|ПИД]] регулированием по встроенным энкодерам. | * Очередь команд управления моторами с [[ru:ПИД|ПИД]] регулированием по встроенным энкодерам. | ||
* Прямое управление моторами<ref name="direct-mot">В этом режиме ПИД-регулятор отключается</ref> | * Прямое управление моторами<ref name="direct-mot">В этом режиме ПИД-регулятор отключается</ref> | ||
| − | * Опрос датчиков линии<ref name=" | + | * Опрос датчиков линии |
| − | * | + | * Опрос бамперов<ref name="not-impl">Пока не поддерживается.</ref> |
| − | * | + | * Получение RC5 посылок пультов<ref name="not-impl">Пока не поддерживается.</ref> |
| + | |||
| + | === Отличия === | ||
| + | * Лицензия LGPL версии 3 (по договоренности с автором оригинальной версии) | ||
| + | * Отличаются коды/описания ошибок | ||
| + | * Внешний кварц на 14,7456 МГц (необходимо припаять) | ||
| + | * Скорость обмена по USART 115200 бод | ||
| + | * Единица времени не 1/50, а 1/56 секунды | ||
| + | * В одном пакете управления двигателем можно передать 12 комманд (13 если не отправлять <code>'\n'</code>) | ||
| + | * Очередь комманд хранит до 20-и комманд (можно расширить изменив '''MOT_MAX_QSIZE''') | ||
| + | * В случае, если пришедшие комманды не влезли в очередь будет сообщено начиная с какой комманды не влезло. (<code>X10MotQueueOvf %d</code>) | ||
| + | * Если номер ошибки больше X09, то вернется два сообщения об ошибке: | ||
| + | |||
| + | X{no}{descr} | ||
| + | X09ReqProc | ||
| + | |||
| + | == Команды == | ||
| + | Команды передаются в текстовом режиме. | ||
| + | Формат посылки: <code>Q{adr}{req}[{by}]*</code> | ||
| + | Каждый байт передаетя в шеснадцатеричной записи. | ||
| + | Если в ответе возвращается параметр больше чем один байт, то сначала идут младшие байты (Little Endian) | ||
| + | |||
| + | Принимаемые и возвращаемые типы: | ||
| + | * '''uint8''' - беззнаковне целое 8 бит <code>00h..FFh</code> | ||
| + | * '''int8''' - знаковое целое 8 бит <code>-128(80h)..0(0h)..127(7Fh)</code> | ||
| + | * '''uint16''' - беззнаковое целое 16 бит <code>0000h..FFFFh</code> | ||
| + | * '''int32''' - знаковое целое 32 бита <code>80000000h..0h..7FFFFFFFh</code> | ||
| + | |||
| + | |||
| + | {| class="standard" | ||
| + | ! Команда | ||
| + | ! Запрос | ||
| + | ! Ответ | ||
| + | ! Параметры | ||
| + | |- | ||
| + | | RESET | ||
| + | |<code>QFF0050A055AA</code> | ||
| + | |''нет'' | ||
| + | | | ||
| + | |- | ||
| + | | Отправить по i2c несколько байт и | ||
| + | получить несколько байт в ответ | ||
| + | | <code>Q{adr}{req}({bo})+</code> | ||
| + | | <code>R({bi})*</code> | ||
| + | | | ||
| + | * '''adr''' - '''uint8''' - адрес 00h..7Fh устройства на шине i2c | ||
| + | * '''req''' - '''uint8''' - сколько байт получить от устройства | ||
| + | * '''bo''' - '''uint8''' - байты которые нужно передать устройству | ||
| + | * '''bi''' - '''uint8''' - полученные байты (в ответе будет req байт) | ||
| + | |- | ||
| + | | Установить направление | ||
| + | вращения двигателя | ||
| + | | <code>QFF00{mot}{dir}</code> | ||
| + | | <code>R</code> | ||
| + | | | ||
| + | * '''mot''' - '''uint8''' - двигатель, 10h - ЛЕВЫЙ, 12h - ПРАВЫЙ | ||
| + | * '''dir''' - '''uint8''' - направление вращения, 01h - ВПЕРЕД, 02h - НАЗАД, СТОП не поддерживается. | ||
| + | |- | ||
| + | | Установить скорость | ||
| + | вращения двигателя | ||
| + | | <code>QFF00{mot}{pwm}</code> | ||
| + | | <code>R</code> | ||
| + | | | ||
| + | * '''mot''' - '''uint8''' - двигатель, 11h - ЛЕВЫЙ, 13h - ПРАВЫЙ | ||
| + | * '''pwm''' - '''uint8''' - скорость, в точности соответствует скважности выдаваемого на двигатели ШИМ-сигнала. | ||
| + | |- | ||
| + | | Управление очередью | ||
| + | команд для шасси | ||
| + | | <code>QFF0014[{tim}{ls}{rs}{lf}{rf}]*</code> | ||
| + | | <code>R</code> | ||
| + | | | ||
| + | * '''tim''' - '''uint8''' - время выполнения команды в '''tim * 1/56''' секунды | ||
| + | * '''ls''' - '''int8''' - начальная скорость левого колеса; | ||
| + | * '''rs''' - '''int8''' - начальная скорость правого колеса; | ||
| + | * '''lf''' - '''int8''' - конечная скорость левого колеса; | ||
| + | * '''rf''' - '''int8''' - конечная скорость правого колеса; | ||
| + | |||
| + | Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад. | ||
| + | |||
| + | Максимально можно отправить одновременно 12 команд. | ||
| + | |||
| + | Если нужно сбросить очередь команд - отправляем просто <code>QFF0014</code> без команд. | ||
| + | |- | ||
| + | | Получить состояние | ||
| + | энкодеров | ||
| + | | <code>QFF08F0</code> | ||
| + | | <code>R{lenc}{renc}</code> | ||
| + | | | ||
| + | * '''lenc''' - '''int32''' - состояние левого энкодера | ||
| + | * '''renc''' - '''int32''' - состояние правого энкодера | ||
| + | |- | ||
| + | | Получить состояние | ||
| + | датчиков линии | ||
| + | | <code>QFF01F1</code> | ||
| + | | <code>R{sflag}</code> | ||
| + | | | ||
| + | * '''sflag''' - '''uint8''' - состояние | ||
| + | ** Бит 4 - ЛЕВЫЙ датчик | ||
| + | ** Бит 3 - ЦЕНТРАЛЬНЫЙ датчик | ||
| + | ** Бит 0 - ПРАВЫЙ датчик | ||
| + | |- | ||
| + | | Получить состояние | ||
| + | бамперов<ref name="not-impl">Пока не поддерживается.</ref> | ||
| + | | <code>QFF01F2</code> | ||
| + | | <code>R{sflag}</code> | ||
| + | | | ||
| + | * '''sflag''' - '''uint8''' - состояние | ||
| + | ** Бит 0 - ЛЕВЫЙ ПЕРЕДНИЙ датчик | ||
| + | ** Бит 1 - ПРАВЫЙ ПЕРЕДНИЙ датчик | ||
| + | ** Бит 2 - ЗАДНИЙ датчик | ||
| + | |- | ||
| + | | Получить RC5<ref name="not-impl">Пока не поддерживается.</ref> | ||
| + | | <code>QFF02F3</code> | ||
| + | | <code>R{cmd}</code> | ||
| + | | | ||
| + | * '''cmd''' - '''uint16''' - комманда | ||
| + | |- | ||
| + | | Получить состояние батареи<ref name="not-impl">Пока не поддерживается.</ref> | ||
| + | | <code>QFF02F4</code> | ||
| + | | <code>R{state}</code> | ||
| + | | | ||
| + | * '''state''' - '''uint16''' - напряжение [''мВ''] (10<sup>-3</sup> вольт) | ||
| + | |- | ||
| + | | Получить версию прошивки, | ||
| + | уникальный идентификатор | ||
| + | | <code>QFF06FF</code> | ||
| + | | <code>R{cn}{mj}{mi}{rv}{dvid}</code> | ||
| + | | | ||
| + | * '''cn''' - '''uint8''' - константа, равна ASCII 'M' | ||
| + | * '''mj''' - '''uint8''' - старший номер (мажорный) | ||
| + | * '''mi''' - '''uint8''' - младший номер (минорный) | ||
| + | * '''rv''' - '''uint8''' - ревизия | ||
| + | * '''dvid''' - '''uint16''' - Уникальный идентификатор | ||
| + | |} | ||
| + | |||
| + | == Скачать == | ||
| + | Скачать можно на [https://www.bitbucket.org/vooon/minibot-sercontrol/src/ странице проекта] (Download » тип архива) | ||
| + | |||
| + | Или используя программу [[w:ru:mercurial|mercurial]]: | ||
| + | |||
| + | hg clone https://bitbucket.org/vooon/minibot-sercontrol/ | ||
| + | |||
| + | == QSerControl == | ||
| + | [[Изображение:QSerControl.png|thumb]] | ||
| + | QSerControl — простая gui-утилита для управления роботом. | ||
| + | |||
| + | Зависимости: | ||
| + | * python-pyserial | ||
| + | * python-pyqt4 (python-qt) | ||
| + | |||
| + | Репозиторий: http://hg.vehq.ru/qsercontrol/ (mercurial) | ||
| + | <br clear="both"/> | ||
| + | |||
| + | == BootLoader == | ||
| + | Так как подразумевается работа через радиоканал с фиксированной скоростью передачи (115200 бод) нужен модифицированный загрузчик. | ||
| + | |||
| + | Скачать готовую прошивку можно по ссылке: http://hg.vehq.ru/minibot-bootloader/raw-file/c5fdd5ed736d/main.hex | ||
| + | |||
| + | Настроен для ATMega32; XTAL 14,7456 МГц; Скорость: 115200 8N1; Вариант: ISP; После включения ждет 'S' одну секунду. | ||
| − | + | Подробнее об этом загрузчике можно узнать в авторском блоге: http://vehq.ru/blog/2008/04/20/bootloader-dlya-minibot/ | |
== См. также == | == См. также == | ||
Текущая версия на 09:25, 30 апреля 2009
Содержание
MiniBot SerControl
Это порт микропрограммы GATE-A8D8M2 на аппаратную платформу МиниБота. Формат обмена и базовые комманды совпадают.
Возможности
- I2C Шина[1]
- Очередь команд управления моторами с регулированием по встроенным энкодерам.
- Прямое управление моторами[2]
- Опрос датчиков линии
- Опрос бамперов[1]
- Получение RC5 посылок пультов[1]
Отличия
- Лицензия LGPL версии 3 (по договоренности с автором оригинальной версии)
- Отличаются коды/описания ошибок
- Внешний кварц на 14,7456 МГц (необходимо припаять)
- Скорость обмена по USART 115200 бод
- Единица времени не 1/50, а 1/56 секунды
- В одном пакете управления двигателем можно передать 12 комманд (13 если не отправлять
'\n') - Очередь комманд хранит до 20-и комманд (можно расширить изменив MOT_MAX_QSIZE)
- В случае, если пришедшие комманды не влезли в очередь будет сообщено начиная с какой комманды не влезло. (
X10MotQueueOvf %d) - Если номер ошибки больше X09, то вернется два сообщения об ошибке:
X{no}{descr}
X09ReqProc
Команды
Команды передаются в текстовом режиме.
Формат посылки: Q{adr}{req}[{by}]*
Каждый байт передаетя в шеснадцатеричной записи.
Если в ответе возвращается параметр больше чем один байт, то сначала идут младшие байты (Little Endian)
Принимаемые и возвращаемые типы:
- uint8 - беззнаковне целое 8 бит
00h..FFh - int8 - знаковое целое 8 бит
-128(80h)..0(0h)..127(7Fh) - uint16 - беззнаковое целое 16 бит
0000h..FFFFh - int32 - знаковое целое 32 бита
80000000h..0h..7FFFFFFFh
| Команда | Запрос | Ответ | Параметры |
|---|---|---|---|
| RESET | QFF0050A055AA
|
нет | |
| Отправить по i2c несколько байт и
получить несколько байт в ответ |
Q{adr}{req}({bo})+
|
R({bi})*
|
|
| Установить направление
вращения двигателя |
QFF00{mot}{dir}
|
R
|
|
| Установить скорость
вращения двигателя |
QFF00{mot}{pwm}
|
R
|
|
| Управление очередью
команд для шасси |
QFF0014[{tim}{ls}{rs}{lf}{rf}]*
|
R
|
Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад. Максимально можно отправить одновременно 12 команд. Если нужно сбросить очередь команд - отправляем просто |
| Получить состояние
энкодеров |
QFF08F0
|
R{lenc}{renc}
|
|
| Получить состояние
датчиков линии |
QFF01F1
|
R{sflag}
|
|
| Получить состояние
бамперов[1] |
QFF01F2
|
R{sflag}
|
|
| Получить RC5[1] | QFF02F3
|
R{cmd}
|
|
| Получить состояние батареи[1] | QFF02F4
|
R{state}
|
|
| Получить версию прошивки,
уникальный идентификатор |
QFF06FF
|
R{cn}{mj}{mi}{rv}{dvid}
|
|
Скачать
Скачать можно на странице проекта (Download » тип архива)
Или используя программу mercurial:
hg clone https://bitbucket.org/vooon/minibot-sercontrol/
QSerControl
QSerControl — простая gui-утилита для управления роботом.
Зависимости:
- python-pyserial
- python-pyqt4 (python-qt)
Репозиторий: http://hg.vehq.ru/qsercontrol/ (mercurial)
BootLoader
Так как подразумевается работа через радиоканал с фиксированной скоростью передачи (115200 бод) нужен модифицированный загрузчик.
Скачать готовую прошивку можно по ссылке: http://hg.vehq.ru/minibot-bootloader/raw-file/c5fdd5ed736d/main.hex
Настроен для ATMega32; XTAL 14,7456 МГц; Скорость: 115200 8N1; Вариант: ISP; После включения ждет 'S' одну секунду.
Подробнее об этом загрузчике можно узнать в авторском блоге: http://vehq.ru/blog/2008/04/20/bootloader-dlya-minibot/
