roboforum.ru

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

Робот - платформа для технического творчества

Re: Робот - платформа для технического творчества

=DeaD= » 03 янв 2010, 21:14

ИМХО основная задача - это не решить ряд задачек типа "по линии кататься" и т.п., а - обучение школьников программированию. А уже исходя из этой задачи надо строить всё остальное.

Re: Робот - платформа для технического творчества

Michael_K » 03 янв 2010, 21:17

Есть уже такая готовая ОС и примеры программирования под неё в Си\Си++ или в чем-то еще?

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

А само по себе многозадачное ядро... сейчас откопаю самое тупое:
Preemptive.zip
(7.31 КиБ) Скачиваний: 16


мы ведь не ТЗ в лабораторию МИТ

Я ТЗ обсуждаю... а куда - какая разница, еще не известно, что сложнее.

Re: Робот - платформа для технического творчества

SMT » 03 янв 2010, 21:24

2Michael_K: разница в ресурсах

Re: Робот - платформа для технического творчества

=DeaD= » 03 янв 2010, 21:31

Ок, минимальное ядро для многозадачности имеется, её можно планировать в минимальном же варианте.
Хотя вообще её в программу минимум лучше не записывать.

Re: Робот - платформа для технического творчества

Sergey Filippov » 03 янв 2010, 22:23

=DeaD= писал(а):ИМХО основная задача - это не решить ряд задачек типа "по линии кататься" и т.п., а - обучение школьников программированию. А уже исходя из этой задачи надо строить всё остальное.

Предлагаю поправку: обучение не программированию, а УПРАВЛЕНИЮ (отсюда и "кибернетика" - наука об управлении). Программировать детей научат на уроках информатики, если повезет со школой и преподавателем. А здесь нам нужно сконцентрироваться на управлении с обратной связью.
SMT писал(а):Можем обсудить примерный набор задач?

Набор задач будет постоянно меняться. Взятое в качестве примера - правильно. Движение в круге, по линии, объезд предметов, управлением манипулятором. Это чистые классические задачи, их решение может быть коротким и изящным. Но перед детьми будут вставать кОмплексные задачи, в которых придется воспользоваться полученными навыками из джентльменского набора. Например, такая: движение по линии с разрывом вдоль стенки, захват предмета, возвращение и установка его в нужный ангар, расположение которого определяется крупно нарисованным штрих-кодом. И тут наша среда программирования должна показать свои лучшие стороны :good:.
Уровень 1. Движение без обратной связи. "Таймерные" модели. Шаг вперед, два шага назад. Все действия вслепую.
Уровень 2. Обратная связь. Ориентация на плокости (круг, линия), идентификация препятствий, источника света.
Уровень 3. Идентификация объектов, определение размера, объезд. Движение вдоль кривой стенки. Задачи регулирования и слежения.
Уровень 4. Точное управление двигателями. Энкодеры. Перемещения, захваты, манипуляторы, "барабанщики", конвееры. Работа с объектом "наощупь". Андроиды без гиро.

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

В качестве комплексной задачи можно взять футбол роботов, в который могут играть даже семиклассники. Есть специальные соревнования для детей на Robocup.
Фото1
Фото2
Последний раз редактировалось Sergey Filippov 05 янв 2010, 00:25, всего редактировалось 1 раз.

Re: Робот - платформа для технического творчества

Michael_K » 04 янв 2010, 18:39

Сергей, футбол роботов - это хорошо, но не могли бы вы, вместо ни о чем не говорящих фоток,
выложить несколько примеров графического "кода" (не самых навороченных и не самых тупых - типичных)
Я имею в виду 5-7 классы... (Думаю, что дальше при желании вполне можно переходить на более
"низкоуровневые" языки).

Может быть так нам будет проще оценить, какие элементы-конструкции языка используются
чаще, какие вызывают трудности, какие неоправданно "замусоривают" код и т.д.

Re: Робот - платформа для технического творчества

Sergey Filippov » 05 янв 2010, 10:38

Michael_K писал(а):Сергей, футбол роботов - это хорошо, но не могли бы вы, вместо ни о чем не говорящих фоток,
выложить несколько примеров графического "кода"

Извольте. Из подобных кирпичиков мы строим остальные программы.

Пример 1. Нечто аналогичное можно сделать прямо на NXT без компьютера.
rele01.jpg
Релейный регулятор для движения по линии. Модификаторов нет - значения по умолчанию.
rele01.jpg (5.46 КиБ) Просмотров: 2496

Пример 2. Тоже самое с помощью ветвления.
rele1.jpg
Релейный регулятор для движения по линии. Используются абсолютные значения освещенности.
rele1.jpg (9.3 КиБ) Просмотров: 2492

Пример 3. Вложенные ветвления.
rele2-calibrate.jpg
Релейный регулятор для движения по линии с двумя датчиками освещенности и предварительной калибровкой.

Пример 4. Другой подход к решению той же задачи.
pr1-50-calibrate-middle-touch.jpg
Пропорциональный регулятор для движения по линии с предварительной калибровкой на черном и белом.

Пример 5. Как обеспечить гарантированно прямолинейное движение?
motor2.jpg
Синхронизация моторов - пропорциональный регулятор.

Пример 6. Двигаться по азимуту, например, к воротам противника.
compass.jpg
Использование компаса для движения по выбранному азимуту на пропорциональном регуляторе.

Пример 7. Двигаться вдоль неровной стенки с помощью ультразвукового датчика.
pdwall-s1.jpg
Пропорционально-дифференциальный регулятор для движения вдоль стенки.

Пример 8. Использование сторожевого таймера в параллельной задаче для защиты от застреваний.
Изображение

Re: Робот - платформа для технического творчества

Michael_K » 05 янв 2010, 19:44

Спасибо, Сергей. Это показательно.
По приведенным вами схемам есть несколько вопросов
(извините, если вопросы тупые - я прочитал "юзергайд" по роболабу,
но практического опыта программирования на нем не имею :oops: ).

- Я вижу, что параметры для функций (для блоков, кубиков... или как правильно назвать) - это в основном константы.
Даже когда, казалось бы, нарисована "веревка данных", обычно по ней идет константа, как здесь:
const.GIF
const.GIF (16.38 КиБ) Просмотров: 2448

Или значение из контейнера, как здесь:
cont.GIF
cont.GIF (16.54 КиБ) Просмотров: 2425

Так ли это на самом деле?

Чистых "веревок данных" (которые бы соединяли источник данных с получателем) я не увидел.
Это неудобно, или это ограничения языка, или это трудно в понимании?

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

- Существует ли механизм передачи в них (в пользовательские функции) параметров и получения
из них результатов? Или все это делается через ручное назначение контейнеров ("баночек")?
Насколько такие параметрические подпрограммы и механизмы нужны или полезны на начальных этапах обучения?
Можно ли использовать одну и ту же пользовательскую функцию в разных (параллельно исполняющихся) задачах?

- Считаете ли вы нормальным использование "блокирующих" блоков? Например, "ждать пока не нажата кнопка"...
Обычно (в "нормальном" программировании) использование блокирующих функций подразумевает использование многозадачности... Например, пока один процесс (тред, задача) стоит колом, ожидая кнопку, вторая продолжает крутить головой или опрашивать радар.

- Если уж говорить о многозадачности и роболабе: как в роболабе реализован обмен данными между задачами,
через ручное назначение глобальных контейнеров? Читал в юзер-гайде про какие-то евенты (события), но не нашел
примеров использования.

- И совсем дурацкий вопрос... что-то везде по-разному пишут - там арифметика с плавающей точкой вообще есть?

Извините, если нагрузил :pardon: :oops:

Re: Робот - платформа для технического творчества

Sergey Filippov » 07 янв 2010, 16:48

Все празднуют... С Рождеством!
Michael_K писал(а):- Я вижу, что параметры для функций (для блоков, кубиков... или как правильно назвать) - это в основном константы.
Так ли это на самом деле?

Да, Михаил. В стандартном Роболаб нет веревок данных между командами, весь обмен реализован через переменные-контейнеры или константы, которые называются модификаторами. Правда, там есть начинка Лабвью, которую можно достать через режим Исследователь (Projects->Oprions->Controls/Function Palettes->Palette View->Investigator 5new), в ней найдется всякое.
Чистых "веревок данных" (которые бы соединяли источник данных с получателем) я не увидел.
Это неудобно, или это ограничения языка, или это трудно в понимании?

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

Широко используются подпрограммы. Их может быть до 8 шт. Вызываются по номеру, причем, что удобно, номер можно параметризовать. Обмен данными исключительно через глобальные переменные (контейнеры).
Sub.JPG
Подпрограмма с номером 1 вызывается через 4 с вращения мотора
Sub.JPG (10.06 КиБ) Просмотров: 2380

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

Подпрограммы становятся нужны довольно быстро, как только появляются повторяющиеся куски кода в разных частях программы. Семиклассники активно используют передачу данных через глобальные параметры, но это нечитаемо, кошмар.
С параллельными задачами надо быть поосторожнее. Использовать подпрограммы можно, но обращение к моторам или датчикам из разных задач приводит к неожиданным последствиям. Поэтому мы предпочитаем в одной задаче производить чтение показаний в контейнеры или управление моторами, а из других задач эти контейнеры использовать или менять параметры управления.
- Если уж говорить о многозадачности и роболабе: как в роболабе реализован обмен данными между задачами, через ручное назначение глобальных контейнеров? Читал в юзер-гайде про какие-то евенты (события), но не нашел примеров использования.

Тоже через "глобальные" контейнеры.
Обработчики событий штука мощная, покруче безусловных переходов. Там даже возможны задания диапазонов значений, при которых срабатывает обработчик. Работают только в рамках одной задачи.
Events.JPG
Объявляется событие нажатия на кнопку, стартует мониторинг события, бесконечно играется мелодия, а при нажатии на кнопку управление передается на метку перехода
Events.JPG (6.27 КиБ) Просмотров: 2380

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

Есть. Имеется тип float, а блок f(x) понимает основной набор математических функций. Для этого нужен патч 2.9.4.

Re: Робот - платформа для технического творчества

Michael_K » 07 янв 2010, 16:53

Вообще в Роболабе есть хороший встроенный Help

Да что-то качать его не хочется совсем :pardon: :oops:

Re: Робот - платформа для технического творчества

Sergey Filippov » 07 янв 2010, 17:24

Michael_K писал(а):Да что-то качать его не хочется совсем

Из патриотических чувств?

Re: Робот - платформа для технического творчества

Michael_K » 07 янв 2010, 17:29

Ну леги-то нету у меня :)
Скачать и поставить корягу в 80 метров только ради того, чтобы заглянуть в хелп?
(а потом избавляться от огрызков лабвью-рантаймов...) Ну его нафиг! :wink:

Re: Робот - платформа для технического творчества

Sergey Filippov » 27 янв 2010, 19:59

SMT писал(а):В LegoMinobot-e я использовал телефонные разъемы (по аналогии с Лего), но они слишком крупные и ненадежные (в доступном исполнении). По этому смотрел в сторону аудиоджеков сигнал\+\-, но при вынимании такого джека, контакты могут замыкаться , а поскольку легко забыть выключить модуль, то что-нибудь закоротить можно. По этому вариант с разъемами питания разного размера - один на сигнал\GND, другой только питание (серв, датчиков).

Подглядел в биолоиде миниатюрные, но довольно прочные и удобные разъемы. Не знаю, как называются. Возможно, такие подойдут в нашем случае?
connector.jpg

Re: Робот - платформа для технического творчества

SMT » 28 янв 2010, 13:00

Подобные могут подойти - есть ключ, механически прочные. Вчера как раз утром покупал и внимательно их рассмотрел
Power-connector-MPW-MHU.jpg
Power-connector-MPW-MHU.jpg (18.38 КиБ) Просмотров: 2187

Недостаток - не предназначены для частых подключений\отключений, вытащить розетку из разъема можно только очень крепко удерживая пальцами и раскачивая, а то и за провод. Оба способа ведут к разрушению контактов или отрыву проводов :( Те разъемы на фото как вытаскивают?

Re: Робот - платформа для технического творчества

=DeaD= » 28 янв 2010, 13:02

Разъемы типа SHARP'овских должны нормально подойти, они такого же типа как Sergey Filippov указал.


Rambler\'s Top100 Mail.ru counter