roboforum.ru

Технический форум по робототехнике.

Управление роботом с компьютера. Новый подход.

Управление роботом с компьютера. Новый подход.

Виталий » 24 авг 2010, 14:21

Здравствуйте!

На самом деле я немного наврал в теме и предлагаемый подход не является таким уж и новым с точки зрения компьютерных технологий, но при этом почему-то не получил должного развития в области встраиваемых систем.

Название предлагаемого подхода - Remote Procedure Call (http://ru.wikipedia.org/wiki/Remote_Procedure_Call).
Его смысл заключается в том, что мы можем вызывать функции одного адресного пространства (микроконтроллера) из другого адресного пространства (компьютера).

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

Мы реализовали такую функциональность для Ардуино.
Более подробная инструкция по использованию http://bitbucket.org/sources/tiny-rpc/wiki/Home
Готовый пакет: http://bitbucket.org/sources/tiny-rpc/d ... -21.08.zip

Пример. У вас есть робот который должен управляться с компьютера, и пользоваться датчиком температуры.
Вы написали в Ардуино примерно такой код:
Код: Выделить всёРазвернуть
void Move(int vl, int vr)
{
    // Set left (vl) and right (vr) wheel velocity
}

double Temperature()
{
    // Read temperature sensor
}


Для того, чтобы сделать функции вызываемыми с компьютера вам надо добавить в скетч вот такой код:
Код: Выделить всёРазвернуть
void Move(int vl, int vr);
double Temperature();


После этого нажать волшебную кнопку RPC и для вас будет создан файл для C# в котором будет создан специальный класс, предназначенный для удаленного вызова помеченных процедур.
Вложения
Arduino.png
Arduino.png (11.53 КиБ) Просмотров: 5767
Последний раз редактировалось Виталий 25 авг 2010, 16:02, всего редактировалось 2 раз(а).

Re: Управление роботом с компьютера. Новый подход.

=DeaD= » 24 авг 2010, 14:37

Я думаю тема крайне полезная в ряде случаев, а не получила должного развития, потому что ИМХО чаще всего людям хочется вообще избавиться от программирования такого низкого уровня, и работать уже с готовым протоколом или его оберткой в виде DLL-ки.

Re: Управление роботом с компьютера. Новый подход.

Виталий » 24 авг 2010, 14:47

Я не думаю что причина именно в этом.
Ничто не мешает прокидывать "наверх" не такие функции как я показал, а функции работы с периферией.
А DLL-ка по-сути у нас и формируется, даже лучше чем DLL-ка. =)

Re: Управление роботом с компьютера. Новый подход.

=DeaD= » 24 авг 2010, 15:44

По той же логике ничто не мешает и частный случай протокола RPC самому написать под такие функции. Я говорю - большинству надо не RPC, а готовый набор функций, лишь бы не разбираться, как это на низком уровне делается. Поэтому скорее всего и не прижилось. Всё это конечно моё скромное ИМХО :oops:

Re: Управление роботом с компьютера. Новый подход.

noonv » 24 авг 2010, 15:44

похожий подход используется в Urbi.
Cоздаётся urbi-объект UObject, который выполняет роль драйвера(промежуточного слоя) между Urbi и роботом(Arduino). Получается, что промежуточный слой берёт на себя протокол общения с роботом, предоставляя внешнему слою прозрачные интерфейсы(значения величин, вызов методов/функций).

Re: Управление роботом с компьютера. Новый подход.

Виталий » 24 авг 2010, 16:15

По той же логике ничто не мешает и частный случай протокола RPC самому написать под такие функции.

В том-то и дело, что мы избавляемся от необходимости написания (расширения) каждый раз протокола обмена.
Написал функцию, объявил что ее можно вызвать через RPC, получил возможность вызова данной функции с компьютера.

Я говорю - большинству надо не RPC, а готовый набор функций, лишь бы не разбираться, как это на низком уровне делается.

А такой набор функций есть в Ардуино.

похожий подход используется в Urbi.
Cоздаётся urbi-объект UObject, который выполняет роль драйвера(промежуточного слоя) между Urbi и роботом(Arduino). Получается, что промежуточный слой берёт на себя протокол общения с роботом, предоставляя внешнему слою прозрачные интерфейсы(значения величин, вызов методов/функций).

Это не совсем так. Urbi не может самостоятельно создать этот промежуточный слой, вам его придется реализовать самостоятельно, расширять, дополнять. Вот здесь вам может помочь наша разработка. Вы напишете необходимые функции, автоматически сгенерируете для них привязку к C# и с легкостью реализуете UObject, т.к. уже будете иметь готовый класс для "общения" с роботом посредством вызова его функций.

Re: Управление роботом с компьютера. Новый подход.

=DeaD= » 24 авг 2010, 16:18

Виталий писал(а):В том-то и дело, что мы избавляемся от необходимости написания (расширения) каждый раз протокола обмена. Написал функцию, объявил что ее можно вызвать через RPC, получил возможность вызова данной функции с компьютера. А такой набор функций есть в Ардуино.

Да я понял, я говорю что раз вы даёте более универсальный механизм - значит пользователю всё равно надо заморочиться и выбрать нужные функции, собрать прошивку и т.п. И в целом - теряется смысл Ардуино тогда - зач ем совместимость с этим загадочным форм-фактором, если не надо гибкости в программировании и миллиона примеров? А если вы за юзера выбрали нужные ему функции - тогда зачем ему после этого универсальный RPC? В общем с точки зрения технологии - крутая фича ваш RPC, с точки зрения маркетинга - мне сомнительно, что аудитория будет широка.

Re: Управление роботом с компьютера. Новый подход.

Виталий » 24 авг 2010, 16:50

Да я понял, я говорю что раз вы даёте более универсальный механизм - значит пользователю всё равно надо заморочиться и выбрать нужные функции, собрать прошивку и т.п.

Да, на данный момент это так. Но можно делать и стандартные сборки, если будет необходимость.

теряется смысл Ардуино тогда - зач ем совместимость с этим загадочным форм-фактором, если не надо гибкости в программировании и миллиона примеров?

Смысл Ардуино остается, т.к. не все функции можно вынести на ПК в связи с временем их выполнения или критичностью. В этом смысле Ардуино остается автономным узлом на котором могут быть реализованы простейшие, но необходимые функции (например защита от перегрузок, реакция на сработавшие концевики).

Re: Управление роботом с компьютера. Новый подход.

=DeaD= » 24 авг 2010, 17:00

Ну в общем круто, сам буду смотреть может где применю, но специфично!

Вы кстати на английском языке к своей штуке будете писать документацию, чтобы продвигать за границей?

Re: Управление роботом с компьютера. Новый подход.

Виталий » 24 авг 2010, 17:19

Специально продвигать за границу мы не думаем, но препятствий быть не должно.
Документация на английском. Но вопросы можно задать здесь на русском.

Re: Управление роботом с компьютера. Новый подход.

Victorovych » 25 авг 2010, 13:33

Забавная финьга, только здается мне что она эффективна в случае тормозных либо перегруженных процессоров (привет языки высокого уровня)и быстрых линий передачи между ними.

Re: Управление роботом с компьютера. Новый подход.

Michael_K » 25 авг 2010, 13:43

Зачет.
Но эт все здорово, пока не начались треды, реентерабельность, сборщики мусора, и всякие прочие "области видимости", "времена жизни", "создания объектов"... (не говоря уже о дебаге например)
Боюсь, что полноценный RPC - очень непростая в реализации штука.

Re: Управление роботом с компьютера. Новый подход.

-= Александр =- » 25 авг 2010, 14:00

Че-то я не очень понимаю как ПК поймет где находится контроллер и как к нему подключится. И как МК поймет что от него хотят? Тогда на нем надо поднимать ОС, способную к RPC. А это все уже не так просто... По мне так куда проще протокол обмена сделать, который так-же будет вызывать функции и возвращать их значения.

Re: Управление роботом с компьютера. Новый подход.

AnyWay » 25 авг 2010, 14:08

В первом посте есть ссылка на описание, там это описано. Вся прелесть в том, что не надо понимать как МК поймет чего от него хотят :).

Классная вещь.
А к Processing ее прикрутить можно?

Re: Управление роботом с компьютера. Новый подход.

Виталий » 25 авг 2010, 16:01

Зачет.
Но эт все здорово, пока не начались треды, реентерабельность, сборщики мусора, и всякие прочие "области видимости", "времена жизни", "создания объектов"... (не говоря уже о дебаге например)
Боюсь, что полноценный RPC - очень непростая в реализации штука.

Ну что я могу сказать, да, такие проблемы могут возникнуть, но только на стороне ПК, где они уже решаются более-менее цивилизованными средствами. Не думаю, что понадобится реализация этого на контроллера. У нас простая задача - вызвать на контроллере определенную функцию и вернуть результат.

Че-то я не очень понимаю как ПК поймет где находится контроллер и как к нему подключится.

Ну для доступа к контроллеру автоматически создается класс RemoteObject, в конструкторе которого и указывается тот последовательный порт к которому подключен контроллер.
Код: Выделить всёРазвернуть
RemoteObject arduino = new RemoteObject("COM20", 57600);


И как МК поймет что от него хотят? Тогда на нем надо поднимать ОС, способную к RPC. А это все уже не так просто... По мне так куда проще протокол обмена сделать, который так-же будет вызывать функции и возвращать их значения.

В том то и дело, что ничего не надо поднимать. Ты просто пишешь функцию для МК, помечаешь ее как remotable и она автоматом добавляется в класс RemoteObject(), а протокол обмена и его реализация генерируются автоматически.

А к Processing ее прикрутить можно?

Да, можно.

P.S. Добавил короткое видео в заглавное сообщение.


cron
Rambler\'s Top100 Mail.ru counter