MiniBot-SerControl — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
(Новая: == MiniBot SerControl == Это порт микропрограммы GATE-A8D8M2 на аппаратную платформу [[:Катег...)
 
м (Комманды)
 
(не показано 18 промежуточных версий 1 участника)
Строка 1: Строка 1:
 +
[[Категория:МиниБот]]
 +
 
== MiniBot SerControl ==
 
== MiniBot SerControl ==
 
Это порт микропрограммы [[Шлюз-контроллер GATE-A8D8M2|GATE-A8D8M2]] на аппаратную платформу [[:Категория:МиниБот|МиниБота]].
 
Это порт микропрограммы [[Шлюз-контроллер GATE-A8D8M2|GATE-A8D8M2]] на аппаратную платформу [[:Категория:МиниБот|МиниБота]].
 +
Формат обмена и базовые комманды совпадают.
  
 
=== Возможности ===
 
=== Возможности ===
* [[W:I2C|I2C]] Шина <ref name="i2c">Пока не поддерживается.</ref>
+
* [[w:I2C|I2C]] Шина<ref name="not-impl">Пока не поддерживается.</ref>
 +
<!-- * [[w:SPI|SPI]] Шина<ref name="not-impl">Пока не поддерживается.</ref> -->
 +
* Очередь команд управления моторами с [[ru:ПИД|ПИД]] регулированием по встроенным энкодерам.
 +
* Прямое управление моторами<ref name="direct-mot">В этом режиме ПИД-регулятор отключается</ref>
 +
* Опрос датчиков линии
 +
* Опрос бамперов<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/
  
 
== См. также ==
 
== См. также ==
 +
* [[:Категория:МиниБот|МиниБот]]
 +
* [[Шлюз-контроллер GATE-A8D8M2]]
  
 
== Сноски ==
 
== Сноски ==
 
<references />
 
<references />

Текущая версия на 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})*
  • adr - uint8 - адрес 00h..7Fh устройства на шине i2c
  • req - uint8 - сколько байт получить от устройства
  • bo - uint8 - байты которые нужно передать устройству
  • bi - uint8 - полученные байты (в ответе будет req байт)
Установить направление

вращения двигателя

QFF00{mot}{dir} R
  • mot - uint8 - двигатель, 10h - ЛЕВЫЙ, 12h - ПРАВЫЙ
  • dir - uint8 - направление вращения, 01h - ВПЕРЕД, 02h - НАЗАД, СТОП не поддерживается.
Установить скорость

вращения двигателя

QFF00{mot}{pwm} R
  • mot - uint8 - двигатель, 11h - ЛЕВЫЙ, 13h - ПРАВЫЙ
  • pwm - uint8 - скорость, в точности соответствует скважности выдаваемого на двигатели ШИМ-сигнала.
Управление очередью

команд для шасси

QFF0014[{tim}{ls}{rs}{lf}{rf}]* R
  • tim - uint8 - время выполнения команды в tim * 1/56 секунды
  • ls - int8 - начальная скорость левого колеса;
  • rs - int8 - начальная скорость правого колеса;
  • lf - int8 - конечная скорость левого колеса;
  • rf - int8 - конечная скорость правого колеса;

Способ задания скорости с направлением - 0x00 - стоим, 0x01..0x7F - малый..полный вперед, 0xFF..0x80 - малый..полный назад.

Максимально можно отправить одновременно 12 команд.

Если нужно сбросить очередь команд - отправляем просто QFF0014 без команд.

Получить состояние

энкодеров

QFF08F0 R{lenc}{renc}
  • lenc - int32 - состояние левого энкодера
  • renc - int32 - состояние правого энкодера
Получить состояние

датчиков линии

QFF01F1 R{sflag}
  • sflag - uint8 - состояние
    • Бит 4 - ЛЕВЫЙ датчик
    • Бит 3 - ЦЕНТРАЛЬНЫЙ датчик
    • Бит 0 - ПРАВЫЙ датчик
Получить состояние

бамперов[1]

QFF01F2 R{sflag}
  • sflag - uint8 - состояние
    • Бит 0 - ЛЕВЫЙ ПЕРЕДНИЙ датчик
    • Бит 1 - ПРАВЫЙ ПЕРЕДНИЙ датчик
    • Бит 2 - ЗАДНИЙ датчик
Получить RC5[1] QFF02F3 R{cmd}
  • cmd - uint16 - комманда
Получить состояние батареи[1] QFF02F4 R{state}
  • state - uint16 - напряжение [мВ] (10-3 вольт)
Получить версию прошивки,

уникальный идентификатор

QFF06FF R{cn}{mj}{mi}{rv}{dvid}
  • cn - uint8 - константа, равна ASCII 'M'
  • mj - uint8 - старший номер (мажорный)
  • mi - uint8 - младший номер (минорный)
  • rv - uint8 - ревизия
  • dvid - uint16 - Уникальный идентификатор

Скачать

Скачать можно на странице проекта (Download » тип архива)

Или используя программу mercurial:

hg clone https://bitbucket.org/vooon/minibot-sercontrol/

QSerControl

QSerControl.png

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/

См. также

Сноски

  1. 1 2 3 4 5 6 Пока не поддерживается.
  2. В этом режиме ПИД-регулятор отключается