LINUX.ORG.RU

управление робоплатформой через инет

 , , , ,


1

2

По следам недорогая движущаяся робоплатформа . У меня есть raspberry pi, камера, и сервомоторы которые ей управляют и неспешно собирается платформа на которой это всё будет ездить.

(При всех моих многочисленных попытках перегрузить, закоротить и физически сломать это всё дело оно до сих пор работает. Даже после того как я случайно перевернул GPIO-разъём на 180 градусов и соединил +5 с GND. Только SD-карточка сдохла. А может и не сдохла, не на чем проверить.)

Я теперь хочу этим всем рулить через инет. В идеале управление должно быть как в FP шутерах: WASD перемещает платформу, мышкой управляешь камерой.

В реальности вместо интернета есть ADSL и задержки по 50ms. Я вот думаю как с этим жить.

Идея такая: нажатие кнопок передаётся как есть: нажал кнопку — отправили соотв. комманду. Отпустил кнопку — сообщили что кнопку больше не держат.

С мышкой сложнее. Я думаю, надо, скажем, три раза в секунду отправлять текущие координаты курсора относительно окна.

Что скажите? И есть ли нубские js-либы для всего этого дела? Я в js ничего не понимаю кроме того что это адский ад.

Ещё вопрос как передавать эти запросы. Я бы поигрался с вебсокетами и asyncio... Какие порекомендуете готовые либы для этого? Я бы предпочёл bottle.py, но оно, вроде, вебсокеты умеет только через greenlet что я не хочу ставить на rpy. Неспешно смотрю на http://aaugustin.github.io/websockets/ .

Ещё вопрос как передавать эти запросы.

Идея (так как http, нужно МАКСИМАЛЬНО упрощать): клиентское приложение оператора тупо GET'ом отсылает изменившееся состояние (нажатие-отжатие кнопки, координаты мыши) одной строкой (256 знаков ASCII IMHO хватит) на вспомогательный web сервер, клиентский софт робота постоянно считывает эту строку, опубликованную сервером. Истинная асинхронность по сути, и минимум лишних данных.

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

Пока обошёлся jquery ui. Походу, нормальный интерфейс вообще не подниму. Поэтому тупо сделал два ползунка и кнопку «reset position».

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Чисто по приколу - вспомни тег map, и вместо перетянуть изображение - считывай координаты клика мыши, типа клик становится центром изображения. Код будет минимальным, простым и очень быстрым. js вообще не нужен!

Shadow ★★★★★ ()
Ответ на: комментарий от Shadow

очень хочу так сделать, причём, поверх видео. Чтобы можно было кликнуть на точку и камера бы туда поворачивалась.

Но пока у меня бооольшие проблемы вывести картинку в браузер. Браузеры, я вас ненавижу!

true_admin ★★★★★ ()

В идеале управление должно быть как в FP шутерах: WASD перемещает платформу, мышкой управляешь камерой

Пробел и контрол уже работают?

Vit ★★★★★ ()

Я бы поигрался с вебсокетами и asyncio... Какие порекомендуете готовые либы для этого?

https://github.com/sockjs

С вебсокетами главная хитрость только одна - фигачить через SSL чтобы кривые прокси пакеты не ломали.

Vit ★★★★★ ()
Ответ на: комментарий от Vit

Я пока решил остановиться на простых браузерных кнопочках. Подскажи, как эксперт, какие js-либы выбрать для того чтобы лепить интерфейс. Я в этом ничего не понимаю, нагуглил jquery ui и bootstrap. Из них слепил ЭТО: http://imgur.com/1N3dOET . Ну, ты понял мой уровень, сегодня я впервые увидел js...

true_admin ★★★★★ ()

Я теперь хочу этим всем рулить через инет. В идеале управление должно быть как в FP шутерах: WASD перемещает платформу, мышкой управляешь камерой.

И выстрел по клику мышкой...

Harald ★★★★★ ()
Ответ на: комментарий от Harald

Мне кажется, за браузерами будущее. Поэтому пытаюсь освоить html5 и js.

А так отдельную прогу, конечно, без проблем. Более того, это самый нормальный вариант т.к. проигрывание видео можно встроить через mplayer: http://www.intransitione.com/blog/embedding-mplayer-in-a-pygtk-application/ .

И выстрел по клику мышкой...

Ну вы и извращенцы!

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Если тупо сверстать, чтобы не помойно выглядело, хватит бутстрапа. Если кодить много состояний в интерфейсе, стоит наверное посмотреть ангуляр.

Я по интерфейсам не спец, не люблю их.

Vit ★★★★★ ()
Ответ на: комментарий от true_admin

Браузеры, я вас ненавижу!

Закодь гуй на java. Быстро, просто, эффективно, без секса с браузерами.

FutureBoy ()
Ответ на: комментарий от Shadow

Нафига? Я бы взял jquery и в $(video).onclick(function (...) { ... }); брал бы координыты (не помню точно как но найти не проблема) и в if ... else в зависимости от координат отсылыл бы соответствующие инструкции. Элементарно же.

FutureBoy ()

Идея такая: нажатие кнопок передаётся как есть: нажал кнопку — отправили соотв. комманду. Отпустил кнопку — сообщили что кнопку больше не держат.

Вспоминая свой опыт с радиоуправлением - это плохая идея. Что ты будешь делать если сигнал об отжатии кнопки сдохнет по дороге?

ya-betmen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.