roboforum.ru

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

Робот с логикой на основе автоматного программирования

Наше хобби — конструировать и программировать.
Демонстрация готовых роботов и устройств построенных своими руками.

Робот с логикой на основе автоматного программирования

Сообщение smur » 23 апр 2019, 23:25

Решил наконец собрать воедино материалы в виде блога по построению робота удалённого присутствия.
https://vzikblog.wordpress.com/
Ничего революционного в самом аппарате нет, но рассматривается вариант задания логики работы на базе парадигмы автоматного программирования. Меня этот подход заинтересовал после самостоятельных попыток написать алгоритм работы робота с возможностью быстрого изменения логики работы и отладки.
Проект в стадии развития.
Может кому нибудь пригодиться.
PS Я не профессиональный программист, так что извиняюсь за местами некрасивый код.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 03 сен 2023, 14:16

Появилось немного свободного времени и решил продолжить тему, но уже рассмотреть успешно завершенный несколько лет назад проект, в котором удалось на базе парадигмы автоматного программирования сделать некий прибор в качестве халтуры. Пришлось по ходу освоить на довольно серьезном уровне Альтиум дизайнер, Дип трейсер и по имеющейся математической модели придумать алгоритм и затем его закодить. Делалось на Atmega 328 микропроцессоре и других вспомогательных элементах типа контроллера кнопки включения/питания, LED контроллера, магнитных датчиков и проч. В качестве задания логики работы устройства с датчиками применялось автоматное программирование. Режимы были: инициализация датчиков, калибровка, поиск, выключение по кнопке или по таймауту. Из проекта могу поделиться верхнеуровневой частью, которая будет полезна для обработки дребезга кнопки, выбора режимов, задания таймеров для разных нужд.
Картинка вехнеуровнего автомата приложена здесь:
https://cloud.mail.ru/public/cjYC/CQwBHbGE4
Нижнеуровневые автоматы публиковаться не будут. В принципе верхнеуровневого автомата достаточно для понимания логики построения системы.
Далее будет описана суть подхода.

Добавлено спустя 8 минут 12 секунд:
На базе данного подхода можно создавать алгоритмы по сбору и обработке данных с многочисленных датчиков установленных в систему. Так же обеспечивается псевдопараллельность, что позволяет эмулировать работу как бы одновременно работающих модулей: получение данных с датчиков, обработка полученных данных с датчиков, вывод результатов итп. Для микроконтроллеров без управления операционной системы это немаловажно.

Добавлено спустя 10 минут 24 секунды:
После долгих поисков разного рода подходов для задания логики работы со сложным поведением, когда много входных параметров и их надо все обработать и делать это на небольшом малопотребляющем микроконтроллере работающем от батареи, пришел к выводу, что предложенный подход (ссылки ниже) может обеспечить требуемые запросы:
Что такое автоматное программирование?
http://is.ifmo.ru/works/tech_aut_prog
http://is.ifmo.ru/works/diesel/
http://is.ifmo.ru/projects_en/
http://is.ifmo.ru/vis/

Есть конечно и другие варианты, но я остановился на этом.

Добавлено спустя 6 минут 37 секунд:
По приведенной выше ссылке на cloud можно найти документ:
Автоматное программирование изд.2.pdf
который описывает как теорию автоматов, так и парадигму автоматного программирования.

Добавлено спустя 7 минут 1 секунду:
Вот ведь! Нашел ошибку в описании таймеров на картинке) Читать: Reset Timer1 20 ms
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 06 сен 2023, 00:35

Похоже тема пребывает в стендбае и на то есть вполне подтверждаемые причины:

Тема автоматного программирования ( AP, АП) уже много лет занимает заметное место в научно-популярных СМИ. Однако, несмотря на это, АП не стало магистральным трендом. Главная причина здесь — недостаточный опыт использования, и как следствие, отсутствие популяризаторов. Нельзя сказать, что недостаточно статей посвященных АП, но круг обсуждаемых в статьях вопросов по большому счёту сводится к описанию UML Statechart, т.е. инструменту описания автоматов, либо к вопросу «Как реализуются программные автоматы?». Это печально но факт, отсутствует обсуждение того, какие перспективы для разработчиков - широкого инженерного сообщества открываются при использовании данной технологии.


Я предпринял попытку развить тему здесь, под ником engin, но за многие года токсичность тамошней публики в разы усилилась, как результат, не только я, но и многие специалисты, плюнули на этот ресурс с высокой горы. Жаль тратить там свое время на беспочвенных анонимных минусаторов и без 5 минут экспертов.

В основе разработанного мной автоматного фреимворка (здесь на форуме присутствует его обсуждение), заложен именно этот метод, который на практике демонстрирует теорию.
Разработанные FDM (финальные динамические конечные автоматы в языковой среде "G"), с момента запуска всего ПО находятся в ждущем состоянии, при том что каждый из автоматов прошел предварительную функционально аппаратную настройку и участвует в общем, предварительно составленном сценарии управления алгоритм.
Фреимворк поддерживает автоматное программирование функции бинарной логики с инструкциями "TRUE", "FALSE", "AND", "OR", "IF", цикличностью в параллельных потоках, таймерами, вводом переменных триггерных значений, что позволяет организовать PC (CPU x86) внешнее, посредством через I/O интерфейса, аппаратное управление.


Там же на канале можно увидеть ознакомительные видеоролики с примерами платформы в работе.
Сразу отмечу, что виду ограничений интерфейсных возможностей I/O, платформа присутствует в стороне от промышленных стандартов и не поддерживает стандарт IEC 61131-3, что вызывает жаркие дискуссии с отдной стороны сторонников автоматики на базе встраиваемых MCU ARM (RISCx32) и с другой PLC стороны, при том что платформа является Софт PC контроллером на базе архитектуры с CPU (CISCx86), причем именно такая вычислительная производительность позволяет реализовать работу циклов в параллельных потоках.
Было бы интересно услышать Ваше мнение и в случае вопросов, прояснить ситуацию.
Последний раз редактировалось beep_beam 07 сен 2023, 17:49, всего редактировалось 2 раз(а).
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 07 сен 2023, 10:36

Посмотрел по приведенной ссылке несколько видео, к сожалению почему то у меня стриминг не работает с презентаций:
https://www.beeptoolkit.com/forum/exten ... many-areas
приходится прокручивать покадрово, не знаю, в чем дело. Очень симпатичный проект. Хорошо сделано и имеются материалы для обучения. Надеюсь, заинтересует многих.
В теме которую я начал, хочу ознакомить всех желающих с парадигмой предложенной Шалыто А.А. У них на кафедре ИТМО есть движение за открытую документацию и можно узнать очень подробно о теории автоматного программирования http://is.ifmo.ru/, начиная с теории автоматов и найти много проектов с примерами кода. То есть это не готовый IDE с No-CODE концепцией, а низкоуровневый академический подход с возможностью написания кода как вручную, так и с применением графического программирования, для задания логики работы программы. Взаимодействие с аппаратной частью, если предусмотрена аппаратная часть, как объект управления, отдаются на откуп разработчиков, рассматривается именно верхнеуровневая логика автоматизированных объектов управления. В данной теме я попытаюсь рассказать, как строил небольшой проект с применением этого подхода, может кому то пригодиться.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 07 сен 2023, 11:58

smur писал(а):...
В теме которую я начал, хочу ознакомить всех желающих с парадигмой предложенной Шалыто А.А. У них на кафедре ИТМО есть движение за открытую документацию и можно узнать очень подробно о теории автоматного программирования http://is.ifmo.ru/, начиная с теории автоматов и найти много проектов с примерами кода. То есть это не готовый IDE с No-CODE концепцией, а низкоуровневый академический подход с возможностью написания кода как вручную, так и с применением графического программирования, для задания логики работы программы. Взаимодействие с аппаратной частью, если предусмотрена аппаратная часть, как объект управления, отдаются на откуп разработчиков, рассматривается именно верхнеуровневая логика автоматизированных объектов управления. В данной теме я попытаюсь рассказать, как строил небольшой проект с применением этого подхода, может кому то пригодиться.

Тема востребована и хотелось бы видеть ее развитие.
Благодарю за отзыв.)
Cлушал несколько лекций профессора Анатолия Шалыто, оригинальная подача.
Если на АП смотреть с точки зрения теории Тьюринга, то его машина, наглядно подтверждает уникальность АП.
Недавно мне на глаза попалась лекция бакалавра сиднейского технологического университета, причем в такой лаконичной подаче, что мне захотелось перевести материал и с удовольствием представить его в тематических сообществах.
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 09 сен 2023, 21:18

Продолжение начатой темы.
Во втором от начала сообщении была приведена картинка из Visio которая по сути уже является алгоритмом работы устройства и этот документ можно за 5 минут перевести в код на С.

Описание алгоритма работы устройства.

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

Переход между состояниями (или без перехода) в каждом цикле работы вызываемых по таймеру автоматов определяется событием «е» - нажатием кнопки и входными переменными. Входные переменные задаются в виде булевых значений TRUE и FALSE и являются отражением какого либо события в системе: срабатыванием таймера, готовности данных датчиков, окончании процедуры инициализации, наличия ошибки итп. Флаги должны быть заданы как глобальные переменные для корректной работы автоматов.

В начале основного цикла программы проверяется состояние единственной кнопки управления устройства. Если кнопка нажата, то переменной `е` присваевается значение TRUE. Если кнопка не нажата, то `е` присваивается значение FALSE. Если значение таймера Timer0 соответствует TRUE, то запускается автомат A10(e) и ему передаётся состояние кнопки. После завершения одного цикла работы автоматов таймеру Timer0 присваевается значение FALSE и далее производится периодическая проверка в основном цикле на срабатывание таймера Timer0, задано время проверки 1ms. Основной и вложенные автоматы срабатывают с периодичностью срабатывания аппаратного таймера 10 ms. От начала вызова A10 время работы вложенных автоматов зависит от состояния в котором они находились при очередном шаге основного цикла. То есть после выполнения A10 и цепочки вложенных автоматов с их функциями мы можем получить варианты, когда время выполнения всех цепочек может быть меньше 10 ms или больше 10 ms. В данной реализации автоматы работают без перехвата потока управления, то есть на каждом цикле срабатывания вложенные автоматы отрабатывают один такт. Это довольно условное разбиение на такты, так как одним тактом автомата может быть работа цикла с чтением данных из источника. Здесь мы принимаем за условие, что такты любого автомата в любом состоянии суммирутся по времени с тактами других активных автоматов в их состоянии и итоговое суммарное время не должно превышать время срабатывания таймера вызова головного автомата 10ms. По идее если даже превысит, то ничего страшного не должно произойти, но если есть привязка к точному измерению интервалов на базе программных таймеров, то лучше рассчитывать все цепочки потока управления с временем выполнения меньшим, чем вызов головного автомата по аппаратному таймеру.
В теле основного цикла работает простой вариант антидребезга кнопки. До момента срабатывания таймера и запуска автомата цикл должен успеть несколько раз перечитать состояние кнопки и если она перед запуском автомата осталась в нажатом состоянии передать e=1 в автомат A10(e). Если нажатие кнопки происходит после срабатывания аппаратного таймера то обработка дребезга будет сделано на следующем срабатывании таймера и программного Timer1 = 20 ms. В любом случае 10 ms и 20 ms это небольшие интервалы по сравнению с реакцией человека. На практике кнопка будет нажата и отжата за больший интервал времени. Нажатие и удержание кнопки обрабатывается автоматом A10(e) который проверяет состояние кнопки используя программный таймер Timer2 = 2 секунды. Более 2 секунд считается нажатие с удержанием.


while(1)
{

if (bit_is_clear(PIND, PD7)) //It checks for button is pressed and set "e" event
e = 1; // Set event
else
e = 0; // Clear event

if (Timer0 == TRUE)
{

A10(e);

Timer0 = FALSE; // reset Timer0
}

_delay_ms(1);
}

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

После включения устройства через подачу питания с контроллера питания настраиваются требуемые таймеры, порты ввода вывода, зажигается крсный светодиод показывающий начало самодиагностики.

В процессе инициализации активируется аппаратный таймер, который вызывает прерывание ISR каждые 10 ms которое, в свою очередь, отвечает за работу программных таймеров для подсчёта временных интервалов задающих логику работы автоматов.

Программные таймеры работают в функции вызываемой прерыванием:

ISR(TIMER1_COMPA_vect)
{
Timer0 = TRUE;
Timer1_count = Timer1_count + Timer0_interval;
Timer2_count = Timer2_count + Timer0_interval;
Timer3_count = Timer3_count + Timer0_interval;
Timer4_count = Timer4_count + Timer0_interval;
...

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

Пример работы одного такта автомата A10 и вложенного A20.

Нажимаем кнопку, аппаратный контроллер питания открывает ключ и подает напряжение с элемента питания на Atmega 328. Запускается программа, инициализируются таймеры и при срабатывании Timer0 вызывается A10. При этом надо учесть, что кнопка еще нажата и это нажатие не должно быть обработано алгоритмом как событые - нажатие кнопки как смена режимов. Это учитывается логикой работы и програмными таймерами.

После запуска автомата A10 в нем первоначально активируется состояние 1. Состояние 0 было введено в логику для ее корректной обработки программой преобразования пиктограмм в код. По сути состояние 0 это псевдосостояние, так как программа при этом не работает и на Atmega не подается питание.

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

На следующем такте, при условии срабатывания таймера Timer2 = 20 ms, мы переходим в состояние 2, в котором запускается вложенный автомат A20 управляющий датчиками. Автомат A20 не будет здесь рассматриваться. Там есть разные состояния, от инициализации датчиков, режим калибровки, режим работы, режим ошибки.

Далее, при каждом срабатывании Timer0 вызывается A10 и если не сработали другие условия или не нажата кнопка, A10 взывает A20 на каждом такте.

Остальные состояния A10 обеспечивают условия обработки срабатывания таймеров и нажатие кнопки для выбора режимов.

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

Добавлено спустя 3 часа 16 минут 22 секунды:
Продолжение

Описание состояний автомата А10 и логики переходов между состояниями

//////
Автомат А10 Состояние 0 OFF
Состояние 0 было введено в логику для ее корректной обработки программой преобразования VISIO пиктограмм в код. По сути состояние 0 это псевдосостояние, так как программа при этом не работает и на Atmega не подается питание.

//////
Автомат А10 Состояние 1 Powering ON

В состояние 1 автомат логически переходит по событию е = 1. Так как состояние 0 это псевдосостояние для логики, то е = 1 в любом случае произойдет при включении, тк включается по кнопке.

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

//////
Автомат А10 Состояние 2 Powered ON

Переход в состояние по переменной x1_1 Timer1 20ms.
Так как при включении по нажатии кнопки в любом случае кнопка еще нажата как на первом, так и на следующем 10ms такте, то мы сразу попадаем из первого во второе состояние.

На каждом такте работы А10 в этом состоянии вызывается вложенный автомат А20.

//////
Автомат А10 Состояние 3 State selection

Переход в это состояние из Автомат А10 Состояние 2 поисходит с приоритетом 2 из 3х возможных, то есть сначала обработается проверка где есть метка 1: а уже затем проверка где метка 2 :
2: e1 * x1_1 / z: 1_3, 1_4, 1_5

Условие перехода - нажата кнопка и сработал x1_1 Timer1 20ms

При этом сбрасываются таймеры функциями работающими на переходе из состояния в состояние:
z1_3 Reset Timer2 20ms
z1_4 Reset Timer2 2s
z1_5 Reset Timer3 300s

Если никакие из прописанных условий с приоритетами 1,2,3 не выполняются, то будет вызываться автомат А20 в каждом цикле так как он вложенный.

Переход с приоритетом 1 сам в себя, если кнопка нажата, но при этом таймер Timer2 2s еще не сработал задается логикой:
e1 * !x1_2
Обеспечивает проверку на нажатие кнопки при каждом такте и до тех пор, пока не сработает таймер x1_2 Timer2 2s
Можно вставить проверку на отпускание кнопки в виде функции со счетчиком, что если за 2 секунды вместо удержания кнопку несколько раз нажали.
И эту функцию вызывать на переходе как при нажатии, так и отжатии по типу:
e1 * !x1_2 / z: счетчик нажатий
!e1 * !x1_2 / z: счетчик отпусканий

Антидребезг здесь работает просто по задержке измерения в 10ms. По идее возможны ложные варианты и если нужен точный подсчет нажатий требуется более тщательно прописать логику.

Переходы в автомат А10 Состояние 2 из А10 Состояние 3 может быть по двум путям:
Приоритет 2 (приоритеты 1 и 3 были зарезервированы на будущую обарботку количества нажатий)
!e1 * x1_2
Кнопка не нажата и сработал таймер x1_2 Timer2 2s
То есть кнопка была отжата до истечении таймера Timer2 2s и больше не нажималась. Подождав 2 секунды возвращаемся в состояние 2 - обычная работа с вызовами А20.

Приоритет 4
!e1 * !x1_2 * (y20=3) / z: 1_6
Кнопка не нажата и не сработал таймер x1_2 Timer2 2s но при этом автомат А20 находится в состоянии 3 (ожидание цели)
То есть если кнопку отпустили не дождавшись срабатывания таймера Timer2 2s и при этом автомат А20 находится в режиме ожидания цели.
Это нужно для обеспечения логики работы автомата А20.
Отрабатывает функция “Button pressed and released” proceed на переходе, то есть один раз после нажатия и отпускания кнопки.

Приоритет 5
e1 * x1_2 + x1_3
Кнопка нажата и сработал таймер x1_2 Timer2 2s или сработал таймер x1_3 Timer3 300s
Это если прошло 2 секунды и кнопку не отпустили или прошло 5 минут, то устройство переходит в состояние выключения.

//////
Автомат А10 Состояние 5 Powering OFF

Снимает питание с Atmega 328. Включить можно только по кнопке.

В состояние можно попасть как из Автомат А10 Состояние 3 State selection так и из Автомат А10 Состояние 2 Powered ON в зависимости от того, в каком состоянии находилась устройство при срабатывании таймера x1_3 Timer3 300s
В любом случае устройство выключается после 5 минут работы, если требуется дополнительное время работы, то нужно кратковременно нажать кнопку.
При этом сбросится таймер x1_3 Timer3 300s так как если мы будем находиться в состоянии Автомат А10 Состояние 2 Powered ON то при условии нажатии кнопки мы попадем в Автомат А10 Состояние 3 State selection так как у нас есть переход из Автомат А10 Состояние 2 Powered ON:
e1 * x1_1 / z: 1_3, 1_4, 1_5
Дальше можно сделать вариант подсчета нажатий.

//////
Автомат А10 Состояние 4 Error
Если какой то компонент системы диагностировал у себя ошибку он устанавливает x1_4 Error
И далее отрабатывает ф-я z1_7 Error proceed мигает кодами ошибок и через 5 мин выключается при срабатывании x1_3 Timer3 300s
Здесь таймер Timer3 изначально не сбрасывается. По идее можно сбросить, пусть ровно 5 мин код ошибки высвечивается.
Последний раз редактировалось smur 10 сен 2023, 11:53, всего редактировалось 6 раз(а).
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 10 сен 2023, 11:23

Вы спросите - А при чем тут роботы? )
Наверное будет полезно иметь на вооружении академический подход для решения задач программирования систем управления со сложным поведением. В том числе для задач робототехники.
Чтобы не расслабляться решил продолжить тему в контексте программирования роботележеки с датчиками расстояния, касания и проч. Более высокий уровень абстракции можно найти у Виктора Казаринова на этом сайте, я до такого уровня еще не дорос)
Постараюсь продолжать начатую здесь тему:
https://vzikblog.wordpress.com/2019/04/26/проект-bibi-часть-7/
И оформить это в виде автоматной парадигмы. По идее сверху данного низкоуровневого варианта можно применить более интеллектуальные подходы по принятию решений, но это уже другая задача на совсем другом уровне.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 10 сен 2023, 14:40

Что касается программного кода после его просмотра, а так же начатого блога, насколько я понимаю, Вы построили скетч под IDE Arduino?
Каким образом вы на аппаратном уровне реализуете работу параллельных циклов? Каким образом х32 это потянет, и потянет ли вообще?
В АП без параллельных множественных циклов это не реально, т.е. присутствует в основном цикле цепочка обращений к состояниям конечных автоматов, при том, что каждый из них в состоянии FALSE или TRUE, в общей цепочке сценария, и после пуска сценарий возможен в переводе группы автоматов в то или иное состояние, а по завершении возврата их в исходное.
Такое не по зубам ARM MCU, в противном случае Вам придется расширять многоядерную архитектуру под сервером.

Изображение
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 10 сен 2023, 15:07

Есть блог про робота удаленного присутствия, это были первоначальные размышления о вариантах построения логики работы такой системы:
https://vzikblog.wordpress.com/
Есть материалы по автоматному программированию:
https://cloud.mail.ru/public/cjYC/CQwBHbGE4
Там же есть картинка с логикой работы верхнеуровневого автомата А10 из проекта мною сделанного и успешно сданного со всей ГОСТ документацией несколько лет назад, со вложенными автоматами для разного типа датчиков. Электронная часть была полностью разработана мною, включая датчики и проч переферию, двухсторонняя плата отрисована в Альтиум дизайнере и затем в Дип Трейсе (требования заказчика), комплект плат заказан в Резоните, элементы распаяны профессиональной монтажницей и затем испытаны на стенде следуя ПМИ.
При основном цикле 10ms работа вложенных автоматов занимала 1-2ms. Проект делался на Atmel Studio 7 с включением самописных драйверов для разных датчиков. Отлаживалось на MatLab, работа фильтров и проч.
Думаю полезно будет ознакомиться с теорией, материал есть по ссылке выше:
"Автоматное программирование изд.2.pdf"
Остальное уже детали реализации )
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 10 сен 2023, 16:30

Ознакомился с Вашим BiBi,
Как я это воспринял - судя по приведенному алгоритму идеи и по той последовательности которая изложена, Вы отталкивались изначально от механической и аппаратной части, которая по случаю оказалась под руками, как т то, что дизайн всей платформы по программной части был продиктован распределенным управлении готовыми программно аппаратными решениями с интеграцией под серверным RISCx32 малиной (т.е. перемещение, навигация, удаленный мониторинг).
Надо полагать в 2019 г. проект был заморожен, часть 7 публикации как-то выглядит - недосказанной.
По части концепта автоматного программирования, вроде бы метод выдержан благодаря топологии устройств и доступности их интерфейса в протоколах мастер системы.
Сколько времени занял весь проект от идеи до того состояния, в котором это сейчас пребывает. Судя по компоновке, чувствую что приходилось в каких то моментах буквально блоху подковывать.
Нечто похожее было и у меня в одном логистическом проекте для складского сервиса. Задача была наделить грузовую тележку функцией следования за указанным работником.
Все получилось до неприличия просто. В качестве базового алгоритма была применена PTZ камера с функцией динамического слежения захватываемого видео регионом подвижного объекта, а так же моя IDE. Такие проекты больше являются интеграциями, нежели магистральной разработкой, в сообществах олдскульных кодеров такое не камильфо... ка бы оно идеально не функционировало, не любят такое обсуждать личной неприязни халявы упавшей с небес и прочая фундаментальная мантра.
Моторизированная камера всегда держала в фокусе нужный объект и не реагировала на другие перемещающиеся объекты в зоне действий, без единой строчки кода. Все на инструкциях для конечных автоматов.
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 10 сен 2023, 16:58

BiBi не был предназначен для промышленного производства )
Это просто стенд из подручных средств для опытов. В конце 2019 года некогда стало этим заниматься, а теперь есть немного времени.
Автоматное программирование это один из вариантов задания логики работы для систем автоматизации.
Эту парадигму я успешно применил на Atmega 328p с питанием от батареи и немного рассказал о полученном результате, но я не буду тут выкладывать детали коммерческого проекта. Результат заказчику понравился, а мне понравилось благодарность заказчика )
Рассказываю с целью популяризации подхода ну и чтобы не расслабляться, вдруг опять попросят сделать что то похожее.
На форуме есть более сложные и умные варианты, посмотрите например у Виктора Казаринова.
Если есть какие то свои наработки, которыми не жалко поделиться в деталях, то можно открыть отдельную тему для обсуждения. С удовольствием обсудим.
Вы пишете о Вашей IDE, откройте тему и обсудим. То что я нашел по Вашим ссылкам, это коммерческий проект, не так ли? Может я не по тем ссылкам ходил.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 10 сен 2023, 22:28

Если есть какие то свои наработки, которыми не жалко поделиться в деталях, то можно открыть отдельную тему для обсуждения. С удовольствием обсудим.
Вы пишете о Вашей IDE, откройте тему и обсудим. То что я нашел по Вашим ссылкам, это коммерческий проект, не так ли? Может я не по тем ссылкам ходил.

Тема открыта здесь и я периодически ее обновляю.
Подумываю об аппаратной систематизации в виде опен сорса, чтоб люди смогли в своих проектах на базе моей IDE, брать ее за основу в своих проектах, как справочное пособие добавлять своими схемотехническими идеями. До этого я выпустил серию образовательных роликов на русском и английском, но статистика показывает слабую вовлеченность, малое количество подписчиков, сокращенное время присутствия, не такая активная как хотелось бы, вопросы не задаются, реакция так же.
Как мне кажется, люди не знают с какой стороны подойти к аппаратной части, провести аналогию с тем что им известно, возможно отсутствие триальной версии для проб и тестирований...
У меня много ожиданий от того проекта который сейчас веду совместно с клиентом, они же и инвесторы, где на общественный суд в определенное время и месте, будет выставлена для оценки моя IDE реализованная в не имеющем аналоги торговом оборудовании со специально разработанной под нее механикой т.е. два в одном, ну и как часть демонстрации аппаратного подхода - систематизированная справочная аппаратная карта подключаемой периферии с I/O конфигурированием.
В качестве устройств будут выставлены актуаторы, шаговые двигателя, асинхронники, сервопривода, гдиро, пневмо клапаны, нагреватели, дроссельные катушки, источники питания и т.д. включая наборы датчиков, камер, QR сканеров и т.д. и т.п. всего того что должно присутствовать в джентльменском наборе для разработки автоматики и робототехники.
Здесь хочу воспользоваться советом под опен сорс, мне возможно понадобится интерактивный онлайн графический редактор, который включает в функции транзакций по экспорту/импорту пользовательской общедоступной графики, в виде такой.
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 10 сен 2023, 23:34

Слабая вовлеченность наблюдается везде, где надо головой думать. В Вашем случае нужно найти нишу применения. Для обучения есть прекрасные материалы на том же LEGO с адаптированным LabVIEW и открыто много кружков, соревнования проводятся среди детей. Так же есть SCRATCH и проч. Чем Вы можете заинтересовать и так переполненный рынок? Потом Ваш посыл это No-Code, то есть для тех, кто думать не хочет. Это конечно не легко, открыть PDF на микроконтроллер или датчик, прочитать внимательно и сделать что то свое, уникальное. Но как потом ученик применит свои знания без вашей IDE? Что он сможет? При коммерческой разработке заказчик попросит проверить с юристами все варианты лицензионных соглашений, и что Ваше IDE сможет на это ответить? Оно типа BSD? Или придется деньги заносить? А сколько? И не откажите ли Вы в лицензировании если вдруг типа санкции и проч? А как на Вашей системе применить, ну скажем, фильтр Кальмана? А потом поменять на другой какой нибудь поинтереснее? В общем нужно искать нишу, где это решение будет востребованным.

Добавлено спустя 15 минут 58 секунд:
Забыл добавить, мне пришлось писать драйверы (ну назовем это так) и тестировать на стенде примерно 12 магнитных датчиков от разных производителей с разными интерфейсами. Для многих из них не было ничего, кроме PDF с описанием работы с регистрами. Так что думать то все равно рано или поздно придется, если хочется выжить в нынешних условиях)
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

Re: Робот с логикой на основе автоматного программирования

Сообщение beep_beam » 11 сен 2023, 00:42

В Вашем случае нужно найти нишу применения.

На протяжении всего периода с момента стартовой версии и до последней мы не страдали от нехватки клиентских заказов в разных сферах, начиная от приборостроения (ATE V&V), медицина, Hi-Tech R&D стендовый инструментарий, логистическая робототехника и заканчивая валидацией автомобильной бортовой навигации.
При должном усердии и работе с целевым клиентом, платформа справляется до достижения поставленных задач с конкурирующими решениями на базе известных платформ.
Мы это провалидировали в коммерческих проектах, и на данном этапе по завершении текущего вендингового проекта решили взять курс на переход от личного участия в проектах, на продажи IDE.

Для обучения есть прекрасные материалы на том же LEGO с адаптированным LabVIEW и открыто много кружков, соревнования проводятся среди детей. Так же есть SCRATCH и проч. Чем Вы можете заинтересовать и так переполненный рынок? Потом Ваш посыл это No-Code, то есть для тех, кто думать не хочет. Это конечно не легко, открыть PDF на микроконтроллер или датчик, прочитать внимательно и сделать что то свое, уникальное. Но как потом ученик применит свои знания без вашей IDE? Что он сможет?


Приведенные примеры закрывают больше образовательную нишу, не столько практического применения, сколько воспитательного или хоббийного. К слову Миндсторм LV свернулся. Что касается прочего (выбор не такой и большой), так ведь там уровень входа от интереснтов требует от людей определенного типа способностей к обучаемости, склада мышления при этом без гарантий, что их идеи сумеют воплотиться в готовые решения после интесива как в самостоятельном pdf освоении или надежде на курс, где "заплати и тебя всему научат".
И да, консерватизм среди IT сообществ, действующий со всех сторон на новичков желтым "NoCode маркером" - не в тренде и всё.
Все это я прочувствовал практически во многих дискуссиях, и поверьте там публику не пробить никакими доводами и демонстрацией в работе, это медленный костер.
Ни в коем случае не идеализирую свой продукт, поверил в его состоятельность, когда комфортно провалидировал в коммерческих проектах. Коммерчески минус был в том, что это происходило быстро и никак не получилось раздуть на еще пару месяцев, чтоб вытащить из клиента дополнительные деньги. Собственно он по этой причине и отдавал мне предпочтение
(цена, сроки, возможность самостоятельного быстрого старта и дальнейших интеграций по мере изменения техпроцессов и технологий без привлечения дорогого технического персонала).

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


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

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


Раньше этим занимался, проекты требующие работы уровня API концептуально не поддерживаются платформой, о чем я сразу предупреждаю. Для работы на этом уровне существуют другие IDE.

Чтоб не отвлекаться от темы привожу сравнительный пример в работе:


Человек выполнил аналогичную задачу с той же методикой как и у нас - автоматного программирования под AVR в IDE среде Atmega.
К сожалению он не дал разрешение на встраивание его видео и мне пришлось воткнуть линк для перехода на его видео.

Разницу нельзя проигнорировать, хотя бы по внешним признакам процесса программирования с ежедневно натруженными мозолям кодера по работе с клавой и скрытых процессов, происходящих в его мозгах?
Парадокс и печаль в том, что мир получает очень мошьные продукты деятельности кодеров, при том, что языки программирования от года к году не развиваются в сторону облегчения входа в область, большинство разработчиков своих IDE мало уделяют внимания своим интерфейсным абстракциям и уходят от процессов автоматизации в разработках исполнительного проектного кода.
Аватара пользователя
beep_beam
 
Сообщения: 249
Зарегистрирован: 11 май 2017, 01:58
Откуда: Israel
прог. языки: G

Re: Робот с логикой на основе автоматного программирования

Сообщение smur » 15 фев 2024, 11:10

Вот еще интересная тема поднята по вопросам визуального программирования, а именно рассматривается один из инструментов преобразования графов переходов представленных в формате MS Visio в код:
https://visio.getbb.ru/viewtopic.php?f= ... a&start=40
Комментарий из данного ресурса от gtfox:
Понимание преимущества Switch-технологии приходит тогда, когда начинаешь программировать "автоматику безопасности опасных промышленных объектов в части автоматизации газоиспользующего оборудования", когда твой алгоритм должны понимать все вокруг тебя, и когда твой код в точности соответствует графу переходов автомата (потому что получен автоматически 1 кнопкой)
Всегда, когда находятся люди не понимающие преимуществ Switch-технологии, хочется попросить описать алгоритм работы, чтобы его легко понимали все вокруг и не программисты. И получить код программы, который будет отрабатывать этот алгоритм. Потом добавить в этот алгоритм еще логики, еще чуть алгоритмов, и опять получить код...

Ссылка на материалы по metaauto:
https://is.ifmo.ru/projects/metaauto/

Хотя я сам пока использую visio2switch но исходник этого тула закрыт, поэтому лучше использовать инструмент с открытым кодом и более гибкий в настройках.
smur
 
Сообщения: 90
Зарегистрирован: 22 ноя 2016, 22:00

След.

Вернуться в Наши проекты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8