Урок 3: Языки программирования, используемые в робототехнике

C# – это собственный язык программирования, предоставляемый компанией Microsoft. Если вы планируете использовать эту систему, вам, вероятно, придется использовать C#.

Урок 3: Языки программирования в робототехнике

Это продолжение нашего курса “Arduino для начинающих”. Мы уже говорили о платах Arduino и рассмотрели конкретный Arduino Uno в Уроке 2, а сегодня мы коснемся языков программирования для робототехники и электроники.

Почти каждый производитель роботов разработал свой собственный язык программирования роботов, что является одной из проблем в промышленной робототехнике. Вы можете ознакомиться с некоторыми из них, изучая язык Pascal. Однако программисту все равно приходится изучать новый язык каждый раз, когда разрабатывается новый робот.

Однако для платы Arduino и некоторых других подобных микроконтроллеров широко используется язык C++.

Язык программирования, используемый в Arduino, очень похож на C++. Мы рассмотрим основы этого языка позже, но если вы хотите познакомиться с ним сейчас, на нашем сайте есть руководство по языку C++ Arduino.

C++ используется для:

  • разработка программного обеспечения;
  • Разработка операционных систем;
  • Разработка программного обеспечения;
  • драйверы устройств;
  • реализация приложений для встраиваемых систем, высокопроизводительных серверов, игр.

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

LISP – второй старейший язык программирования в мире (FORTRAN старше, но только на один год). Он не так широко используется, как многие другие языки программирования в этом списке, но он все еще очень важен для программирования искусственного интеллекта. Часть ROS написана на языке LISP, хотя для использования ROS вам не обязательно его знать.

2+ … кстати, сложность изучения многих языков/технологий также сильно преувеличена -… Выполняйте простые задания + как можно раньше начинайте выполнять задания не из книг, а для себя и/или своей семьи (все становится более осмысленным и приятным)… пусть это будет микрозадача – бот для чтения . курс доллара? погода. что нужно окружающей среде? и отобразить в трее (это отдельный шаг ;))

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

Любой язык общего назначения. Основные принципы во всех них одинаковы.

Для начала приобретите какой-нибудь полуигровой набор для обучения робототехнике, в котором вам придется программировать.
Или создайте своего собственного робота на базе Arduino – там обязательно найдется что-нибудь для программирования.

Новички преувеличивают свои знания конкретного язык программирования.
Дело не в языке. Языки общего назначения очень похожи. Только первое трудно поддается обучению.

  • Facebook
  • Вконтакте
  • Twitter

BojackHorseman

  • Facebook
  • Вконтакте
  • Twitter

тестер ума

Я буду поддерживать вас! И добавлю – все те, кто быстро растет в программировании и преуспевает в карьере, с самого начала, так или иначе, изучать различные языки, технологии, инструменты.. – на самом деле, это может показаться сложным, делая очень простые вещи, но разными способами.на самом деле вы быстро получаете полное понимание того, что вы делаете? (когда вы пишете код) как он работает? (в ИТ, в вашей программе, в вашем компьютере и один раз в вашем командном проекте)

2+ … кстати, сложность изучения нескольких языков/технологий также сильно преувеличена -… выполняйте простые задания + как можно раньше начинайте выполнять задания не из книг, а для себя и/или своих близких (все становится более осмысленным и приятным)… Пусть это будет микрозадача – бот, который читает . курс доллара? погоду. что нужно людям вокруг вас? и отобразить его в трее (это отдельный шаг ;))

Я также поддержу! По крайней мере, основы, если вы нацелены на робототехнику – и asm, и C (вы можете подождать с C++ ;) должны быть в вашем списке дел на очень ранней стадии).

ps. по стечению обстоятельств, при поступлении в университет мне удалось выбрать специальность, на которой в тот год был эксперимент – первый семестр – ассемблер какой-то упрощенной виртуальной машины. второй – компилятор для этого asm… он был порезан на модули, так что в основном весь поток собирал весь набор компилятора ))

.. конечно же проверка была в том, что в сборке шаблона проповедников, модуль пары (студентов) заменил шаблон, и все прошло через тесты ))

сдача экзамена была невозможна без 100% положительного результата теста ))

Идея использования Java заключается в том, что один и тот же код может быть применен к различным роботам благодаря виртуальной машине Java. В реальности это не всегда удается и приводит к медленному выполнению программы, пытающейся доставить код роботу. В конце концов, виртуальная машина должна сначала создать “картину” того, как программа будет работать на данном роботе. Это занимает довольно много времени, и само выполнение задерживается. Однако этот язык довольно популярен в робототехнике благодаря своей универсальности, а некоторые производители даже выпускают микроконтроллеры специально для программирования на Java.

Топ-5 языков программирования в робототехнике

Подробное описание нашей пятерки лучших заняло бы не одну книгу. Поэтому мы решили выделить основные особенности – этого достаточно, чтобы дать вам общее представление о языке и понять, почему он находится на вершине.

Чтобы проиллюстрировать это, мы покажем, как выглядит программа, написанная на разных языках. Это отправная точка любого курса программирования – сообщение Hello, world.

Сборка

Относится к низкоуровневому языку, который максимально приближен к машинному коду. С появлением микроконтроллеров, таких как Arduino, этот язык стал менее популярным, поскольку микроконтроллеры управляют роботами более высокого уровня с помощью C/C++ и других языков. Однако не стоит сбрасывать со счетов и Ассемблер – он буквально необходим, если требуется абсолютный контроль. Объяснить роботу особое условие на другом языке в некоторых случаях просто невозможно.

Идея использования Java заключается в том, что один и тот же код можно использовать на разных роботах благодаря виртуальной машине Java. В реальности это не всегда работает и приводит к медленному выполнению программы, которая пытается доставить код роботу. В конце концов, виртуальная машина должна сначала создать “картину” того, как программа будет работать на данном роботе. Это занимает довольно много времени, и само выполнение откладывается. Однако этот язык довольно популярен в робототехнике благодаря своей универсальности, а некоторые производители даже выпускают микроконтроллеры специально для программирования на Java.

Этот язык часто используется в робототехнике, связанной с сетями. Например, в системе “умный дом” (хотя здесь используется JavaScript, но принцип схож) или в машине, которая записывает видео и передает его в интернет.

Саймон Риттер – евангелист Java и один из ее создателей, а также ведущий эксперт по использованию технологии Java в мире робототехники. Он разработал комплект для разработки программного обеспечения для робототехники и регулярно демонстрирует новые роботизированные системы.

MATLAB

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

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

Python

Язык высокого уровня Python ценится за свою простоту и экономию времени, например, при определении и приведении типов переменных.

Кроме того, существует большое количество готовых скриптов, которые представляют собой код для выполнения программы. Если необходимо реализовать несколько основных функций, можно использовать готовые решения. Язык также позволяет делать простые ссылки на скрипты, написанные на C/C++. Это означает, что части кода, требующие высокой производительности, могут быть реализованы на этих языках. Таким образом, Python стал универсальным практически во всех областях.

Популярность этого языка в робототехнике в последние годы только возрастает. Например, его часто используют для программирования Raspberry Pi. Этот микрокомпьютер предназначен для экспериментов и разработки устройств IoT. Кроме того, существует множество библиотек для Python с готовыми решениями для базовых программ. Благодаря простому и интуитивно понятному синтаксису даже дети и новички могут легко создавать роботов на Python.

“Си” сочетает в себе удобство написания языков высокого уровня с управлением языками низкого уровня. Он переводится в машинный код лучше, чем многие другие языки, но его синтаксис сложен и подвержен ошибкам. Даже одна ошибочная строка нового кода может нарушить работу существующих программ. Кстати, программы на языке Generic Robot Language (сокращенно GRL) компилируются на командных языках типа C.

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

C++ используется для:

  • разработка программного обеспечения;
  • Разработка операционных систем, программного обеспечения и драйверов устройств;
  • Реализация приложений во встраиваемых системах, высокопроизводительных серверах, играх.

В Robix мы используем платы Arduino, которые программируются на C++ с дополнениями. Поэтому на занятиях по робототехнике наши ученики также изучают логику программирования на языке Си-плюс.

C:

C++

Программируете ли вы микроконтроллеры на Ассемблере или пишете программы на Python, каждый из этих языков хорош для определенных манипуляций. Они имеют разный синтаксис и учитывают разные условия.

Представьте, что сегодня мы – роботы. У нас есть целевая программа: “Встаньте с кровати и выйдите за дверь”.

Если бы это было написано на языке Python, для нас, роботов, это выглядело бы так:

Встаньте с кровати.

На C++ это будет выглядеть совсем по-другому:

(Создать объект “комната”)

(Создать объект “кровать”)

(Создать объект “Я”).

Кадр из фильма

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

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

Языки программирования в робототехнике

Многие контроллеры роботов реализуются с помощью специальных языков программирования. Например, многие программы для обобщенной архитектуры были реализованы в язык поведениякоторый был определен Бруксом. Этот язык представляет собой язык управления в реальном времени, основанный на правилах, который компилируется для производства контроллеров AFSM. Отдельные правила этого языка, определяемые с помощью синтаксиса, похожего на LispAFSM компилируются в AFSM, а группы AFSM объединяются с помощью набора локальных и глобальных механизмов обмена сообщениями.

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

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

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

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

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

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

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

Главной привлекательной особенностью языка Golog является бесшовная интеграция реактивного и алгоритмического управления. Несмотря на то, что при использовании языка Golog необходимо соблюдать строгие требования (полная наблюдаемость, дискретные состояния, полная модель), с его помощью были разработаны высокоуровневые системы управления для ряда мобильных роботов для применения в помещениях.

JSk CES (сокращение от C++ for embedded systems) – это расширение языка C++, объединяющее вероятностные и обучающие инструменты. Типы данных CES содержат вероятностные распределения, позволяя программисту выполнять вычисления с использованием неопределенной информации без усилий, обычно связанных с реализацией вероятностных методов.

Что еще более важно, язык ЯЗЫК ЦЕС позволяет настраивать программное обеспечение роботов, обучаясь на примерах, подобно тому, как настраиваются алгоритмы обучения. Язык CES позволяет программистам оставлять “пробелы” в коде, которые заполняются обучающими функциями; обычно эти пробелы представляют собой дифференцируемые параметрические представления, такие как нейронные сети. Индуктивное обучение с использованием этих функций происходит на отдельных этапах обучения, для которых учитель должен указать желаемое поведение на выходе. Практика показала, что язык CES может быть успешно применен к проблемным областям, характеризующимся частично наблюдаемыми и непрерывными средами.

Язык ALisp является расширением языка Lisp. Язык ALisp позволяет программистам задавать недетерминированные точки выбора, аналогичные точкам выбора в Golog. Но ALisp использует для принятия решений не программу доказательства теорем, а способ определения правильных действий с помощью индуктивного обучения, использующего обучение с подкреплением. Таким образом, язык ALisp можно рассматривать как удобный способ введения знаний о проблемной области, в частности, знаний об иерархической структуре “процедур” желаемого поведения, в процедуру обучения с подкреплением. До настоящего времени ALisp применялся к проблемам робототехники только в симуляционных исследованиях, но он может стать основой перспективной методологии для создания роботов, способных обучаться через взаимодействие с окружающей средой.

Биологический подход резко контрастирует с традиционными подходами на основе конвейеров, но уже приносит свои ценные результаты.

Как программировать роботов: пошаговые инструкции

Процедура программирования робота может проходить по нескольким сценариям.

Конвейерный подход

При этом процесс программирования традиционно включает следующие этапы:

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

Биологический подход

Искусственный интеллект и нейронные сети все чаще используются в робототехнике. В настоящее время эти технологии разработаны для имитации биологической нейронной (синаптической) активности человеческого мозга. В 2016 году эта технология воплотила в жизнь способность к хватанию. Это позволило обучать роботов так же, как ответственные хозяева обучают командам своих питомцев.

Биологический подход во многом противоречит традиционному подходу, основанному на ленте, но уже дает достойные результаты.

Смешанные подходы

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

Фото.

Сообщение от атавинская терраса

На что запрограммированы роботы?

На что теперь программируют графику?
Я уже начал работать с c++ по графике, изучил все доступные темы, но не могу решить, что использовать для программирования роботов.

Сообщество роботов. Сколько роботов будет существовать через N лет
Нам нужно решить эту проблему: сообщество роботов живет по следующим законам: – Один раз в начале года.

Как в играх программируется графика?
Мне просто интересно, как программисты программируют графику для игр? Что они используют?

На каком языке Windows они программируют?
На каком языке Windows они программируют? Добавлено на 57 минуте Вы можете удалить найденное c#

Сообщение от Гуманоид Сообщение от Гуманоид

Для этих автомобилей существуют бортовые генераторы.

Добавлено спустя 8 минут

Сообщение от Гуманоид

Что если автомобиль, но маленький (модель автомобиля), должен ехать сам, не спрашивая человека, куда ему повернуть. На чем? Или корабль, но тоже маленький (модель корабля). Водоизмещение значительное для ноутбука, но размеры корпуса небольшие.

Добавлено спустя 6 минут
Если croscopmil существует, то его язык подходит для программирования роботов, и код может быть выполнен на микроконтроллере – он также считается языком программирования для маленьких и дешевых роботов, независимо от того, на какой машине была написана и скомпилирована сама прога.

Добавлено через 2 минуты

Сообщение от Гуманоид

После компиляции вы получаете одинаковый код, а если вы пишете его в asm, но необъективно, вот тут-то и возникают лаги.

Добавлено спустя 10 минут
Есть такой вид спорта – моделирование кораблей. Есть и другой класс – подводные лодки. Они должны быть автономными и иметь возможность:
1. придерживаться курса у ворот.
2. погрузитесь в первый квадрант курса.
3. поверхность в последнем квадранте курса.
4. выключите основной двигатель.
У этих лодок нет бортовой электроники, нет траектории, их курс определяется гироскопом, глубина – датчиком гравитационного наклона, а выключение главного двигателя и изменение глубины – реле времени. В оригинальных правилах лодки не соответствуют местному определению роботов, поэтому давайте усложним его. Представьте, что лодка должна быть в состоянии:
1) Идентифицировать цели с помощью перископа и локатора.
2) Стрелять по маневрирующим целям по пеленгу и под перископом.
3. избегать огня противника и глубинных бомб.
Маневрируйте на большой глубине, избегая торпед другого корабля или, наоборот, охотясь на другой корабль.
То есть все как у настоящих, но длина корпуса <=1800мм, а бомбы и торпеды не взрываются. Что вы имеете в виду?

Я сам его запрограммировал.

Все зависит от того, для какого контроллера вы собираетесь писать программу.

Что вы имеете в виду?
Опять же, не существует универсального языка для всех контроллеров. Все контроллеры могут быть запрограммированы под asm. Некоторые, как написал Гуманоид в своем втором сообщении, могут принимать языки более высокого уровня.

Робот – это набор программных контроллеров и исполнительных механизмов.

Сообщение от Xentar

Какие? И не просто напрямую, а путем crsocompilation (если таковая имеется) – программа пишется и компилируется на одной машине, а выполняется на другой.

Добавлено спустя 2 минуты

Сообщение от Xentar

Кто говорит об универсальности? Язык определяется сочетанием компьютера и задачи. Но многие специализированные могут быть лучше, чем один универсальный (если бы он существовал). Так что варианты приветствуются.

Добавлено спустя 3 минуты

Сообщение от Xentar Сообщение от Xentar

И выбор контроллера зависит от задачи и свойств контроллера: если контроллер слишком тяжелый или не подходит, он не может быть выбран, если контроллер слишком слабый и не может справиться с задачей, он не может быть выбран.

Добавлено спустя 12 минут

Сообщение от Xentar

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

И если мы хотим “сделать” робота, абсолютно любого языка будет достаточно для программирования его логики. Однако для повышения производительности – взаимодействия с аппаратным обеспечением робота (системы технического зрения, конечности машины, управление транспортным средством, лазеры и пулеметы. ) необходимо использовать наиболее продуктивные языки: упомянутый Си и ассемблеры.

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

Поэтому при программировании роботов (как и любых других объектов) следует выбирать комплексный инструментарий, удобный и эффективный, не привязываясь к “это программируется на таком-то и таком-то языке”.

Сообщение от Фантом Сообщение от атавинская терраса

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

О библиотеках и использующих их языках – то же самое. Их удобно использовать на этапе написания логики. Затем они будут переписаны на языке ассемблера под робота, причем конкретный язык как этих библиотек, так и самой модели на этом этапе не имеет значения. Это просто логика, в конечном итоге (в готовом роботе) она все равно будет на языке ассемблера.

Тарас Атавин.
Робот – это сложная система, и следует понимать, что существуют различные контроллеры под управлением общей логики.
Возьмите пункты 3 и 8.
Это будет система запуска торпед. Добавьте питатель, который также будет управляться этим контроллером.
Тогда вы можете взять любой микроконтроллер с 2 релейными выходами или o.k. и датчик.
(Я работаю с системами контроля доступа) Предположим, контроллер Gate-4000 имеет 2 реле и 2 датчика.
Для этого мы пишем программу на Asm, которая по команде с первого реле запускает механизм для запуска, а со второго реле управляет механизмом подачи торпеды, входом датчика и проверяет, есть ли торпеда в отсеке, и если нет, то автоматически загружает ее.
Контроллер имеет интерфейс адресной линии RS-485/422.
Он может взаимодействовать как с ПК с соответствующим программным обеспечением (контроллер более высокого уровня), так и с контроллером более высокого уровня.
Почему более высокий уровень – он взаимодействует с человеческим интерфейсом дальше.
Контроллер механизма выпуска торпеды и механизма подачи торпеды, контроллеры нижнего уровня.
Он может управляться, например, контроллером системы наведения, который управляет контроллером пускового заряда (в данном случае Gate-4000).

Этот контроллер не нужен – он слишком дорог для этих операций.

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

Сообщение от Xentar

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

Добавлено спустя 6 минут

Сообщение от Xentar

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

Добавлено спустя 1 минуту.

Сообщение от Xentar

Какой камень вы бы порекомендовали?

Добавлено спустя 4 минуты

Сообщение от Xentar

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

Добавлено спустя 11 минут

Сообщение от Фантом

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

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

Что касается обмена звонками. Контроллеры соединяются друг с другом с помощью стандартного или собственного (нестандартного) интерфейса. И у них есть некий протокол, по которому они общаются друг с другом, используя этот протокол.
Протокол задается создателем контроллера, поэтому общение между контроллерами обычно происходит не на уровне функций, а на уровне команд, которые часто передаются с минимальной информацией, т.е. F10121B6FF+CRC (контрольная сумма), где F1 – начало кадра, а FF – конец кадра, или за концом кадра следует контрольная сумма (F10121B6+CRC+FF) – способ ее выполнения зависит только от протокола.

Существуют книги по автоматизированным системам и по распределенным системам.
А также отдельно о программировании микроконтроллеров.
У меня самого нет времени на глубокое изучение этого вопроса, потому что надо учиться и работать.
Поэтому я не могу помочь вам с вопросом о камнях. Сам я знаю этот вопрос лишь смутно. – Один мой друг разработал военные контроллеры на языке C.
Лучше спросить на форуме “паяльщиков” или инженеров.

Читайте далее:
Сохранить статью?