Мне интересно, как можно обеспечить прямую передачу данных между множеством программ. Один из вариантов, который мне понятен, это использование виртуальных портов по типу таких программ
Для начинающих в роботехнике, такой вариант может оказаться интересным. Мы имеем множество виртуальных портов, которые могут быть соединены в общей программе, в разных вариантах. Не обязательно связывать программы между собой в обоих направлениях. Возможны различные структуры соединений, например выход 1-й программы, может соединяться с входом 2-й и 3-й, а их выходы через буфер, подключаться к входу 1-й. Таким образом, 1-я программа может опрашивать две другие и получать от них данные. Суть идеи в том, что мы получаем единый интерфейс, для программных кубиков от разных программистов, которые можно соединять между собой в разных вариантах. Тогда для того, что бы написать программу робота, можно взять систему распознавания речи от одного специалиста, распознавание лица от другого, удалённый терминал от третьего, интерфейс работы с железом от производителя или разработчика этого железа и написать собственную логику, для обработки данных и управления периферией самому. Нечто подобное реализуется сейчас на уровне специализированных роботехнических операционных систем, но мне кажется, это направление сложновато для начинающих и порой требует перехода, на новую (непривычную) операционку.
Возможно, существуют другие аналогичные каналы передачи данных между программами, столь же простые для начинающих?
Ведь работать с последовательным портом, обеспечивают все системы программирования... а значит не важно, на каком языке ты будешь писать... твоя программа всё равно сможет быть использована другими людьми, если она будет опираться на единый протокол передачи данных.
Программа может быть терминальной и не занимать экран, а её настройки возможны через INI-файл (вручную или с помощью "Мастера").
Этот протокол, может быть таким:
первые несколько символов, описывают тип передаваемых данных
- com или с обозначает, что передаётся управляющая команда или запрос данных
- dat или d обозначает, что передаются данные. После заголовка, возможно, требуется идентификатор типа данных
- другие варианты…
возможно, необходимо добавить какой-то идентификатор передающей программы (это может быть номер виртуального порта, к которому подключена программа или её персональный код) и адрес получателя (что в принципе не обязательно, если структура связи между программами чётко описана в связях виртуальных портов между собой)
за ними следуют данные, которые и несут нужную информацию... в конце строки сообщения, передаются стандартные символы конца строки и перевода каретки...
Конечно это лишь набросок, для более точного формирования протокола, нужно многое обсудить.
Интересно также, какая максимальная скорость передачи данных, допустима при использовании последовательных виртуальных портов. И варианты их реализации в Linux... Для меня довольно важным критерием, является кроссплатформенность такого решения.
Основная программа в таком варианте системы, получает последовательность строк (которые возможно потребуется сортировать по приоритетности). Выделяет из них нужную информацию и в соответствии с ней, отправляет данные и команды другим связанным программам... возможно, кто-то сумеет написать простой интерпретатор скриптов для этого или целую систему графического программирования, по типу VL в MSRS. Но в принципе, это можно делать в любом языке, где поддерживается работа со строковыми переменными...
---------------------------------------------------------
Такими программами-кубиками может быть очень многое:
работа с реальным железом робо-платформы или эмулятор реальной платформы и виртуальная среда обитания....
пульт дистанционного управления или телефон с ВТ...
удалённый компьютер, через ethernet...
различные USB устройства... клавиатура, мышь, устройство ввода или (и) вывода цифровых и аналоговых сигналов...
программа распознавания речи или её синтеза...
программы для работы с видеокамерами (распознавание объектов и траекторий движения и т.п.)
программы для запроса данных через Интернет...
отправки и приёма электронной почты...SMS...
специальные экспертные системы наконец, или базы данных
или простенькая программа выражения эмоций, с помощью рожиц на экране
думаю, что и вы можете добавить что-то своё к этому списку
Разработчики OpenRobotics или других электронных модулей, могут создать программы эмуляции их устройств, тогда любой сможет опробовать их работу в собственной программе, что бы, наконец, точно решить, что ему надо. Ещё один плюс, это относительно небольшой код каждого программного кубика в отличие от программы, в которой одновременно присутствует множество аналогичных "кубиков". Так же, это возможность упростить коллективную работу над проектом, возможность каждому решать ту задачу, которая наиболее интересна и понятна лично ему.
Идея имеет смысл только в том случае, если её поддержит много человек. Но для начала, надо прийти к единому соглашению по структуре передаваемых данных. Фактически всё остальное уже существует. Это программы для создания виртуальных портов, ссылку на которую я поместил в начале. Но возможно кто-то напишет такую программу самостоятельно и выложит её с открытым кодом. Подобная программа не должна быть очень сложной, но писать на уровне драйверов системы, для меня пока сложновато. Возможно, кто-то заинтересуется моей идеей и подскажет, какие минусы есть в моём взгляде на подобные системы. Прошу пинать сильнее, потерплю... просто очень хочу знать мнение людей, больше меня разбирающихся в вопросе.