Языки программирования: на каком языке говорит робот?
Язык, на котором говорит робот (не важно, игрушка, робот-пылесос или медицинское оборудование), – это машинный код, набор знаков двоичной системы. Он сложен и малопонятен для человека. Писать на нем программы, то есть закладывать поведение робота, иррационально. Поэтому коммуникация между роботом и человеком происходит по такой схеме:
1. Человек пишет программу на языке программирования.
2. Написанный текст – код программы – проходит через «переводчиков»: компиляторы, интерпретаторы или трансляторы. Они преобразуют язык программирования в машинный код, понятный роботу.
Представьте, что вы хотите что-то объяснить итальянцу через переводчика. Ваш русский язык – это язык программирования, итальянский – это машинный код, ну а переводчик, соответственно, – транслятор, компилятор или интерпретатор.
3. Переведенная в машинный код программа попадает в «мозг» роботу. Роль «мозга» может играть схема, чип, микроконтроллер, микрокомпьютер или компьютер. Чем сложнее задачи будет решать робот, тем совершеннее должен быть его «мозг».
Видели собачек в детском магазине, которые начинают лаять, когда вы приближаетесь? В таких игрушках установлена электронная схема с простейшей логикой либо чип. Робот выполняет простейшие действия. Например, двигается по заданной траектории или воспроизводит записанный звук. Для более сложных задач уже потребуется микроконтроллер.
Низкоуровневые и высокоуровневые языки программирования
Сейчас используют несколько сотен языков программирования, которые можно разделить на две большие группы: низкого уровня и высокого.
Языки низкого уровня появились в начале 50-х гг. XX века, с их помощью программировать стало легче, чем на машинном коде. Используются они и сегодня и просто незаменимы в тех случаях, когда робот должен подчиняться строгому контролю. Но при работе с ними есть сложность. Для одного и того же действия, выполняемого роботами разной конструкции, нужно писать отдельную программу. Захват для роботоруки и робота-экскаватора будет выглядеть по-разному.
С языками высокого уровня – более развитыми и удобными для человека – такой проблемы нет. Особенности конструкции роботов не играют значимой роли, и одну и ту же команду выполнит любой из них. Но программы на таких языках весят гораздо больше, поэтому их пишут только для устройств с большим объемом памяти.
Мы можем договариваться с микроконтроллером через транслятор, и тогда, скорее всего, придется программировать на низкоуровневом языке. Если у микроконтроллера будет плата типа Arduino, то можно перейти на более «человеческий» высокоуровневый язык. Однако робот с несколькими типами управления запросто может оказаться полиглотом: его создатель будет сочетать разные языки для выполнения разных задач.
Мы подобрали пять языков, которые в тренде у робототехников.
Топ-5 языков программирования в робототехнике
Чтобы рассказать подробно о нашей пятерке лидеров, понадобится написать не одну книгу. Поэтому мы решили отметить основные особенности – этого достаточно, чтобы вы имели общее представление о языке и поняли, почему он оказался в топе.
Для наглядности покажем, как выглядит программа, написанная на разных языках. С нее начинается любое обучение программированию – на мониторе или на ЖК-экране контроллера должна появиться надпись Hello, world.
Поехали!
Assembly («Ассемблер»)
Относится к языкам низкого уровня, который максимально приближен к машинному коду. С появлением микроконтроллеров подобных Arduino язык стал применяться реже, поскольку микроконтроллеры поддерживают управление роботами на более высоком уровне, используя C/C++ и другие языки.Однако не стоит списывать со счетов «Ассемблер» – он в буквальном смысле незаменим, если требуется абсолютный контроль. Объяснить роботу особое условие другим языком в некоторых случаях просто не получится.
global _main
extern _printf
section .text
_main:
push message
call _printf
add esp,4
ret
message:
db 'Hello, World', 10,0
Java
Идея использования Java заключается в применении одного и того же кода на разных роботах благодаря виртуальной машине Java. На самом деле это не всегда работает и приводит к медленному исполнению программы, которая пытается донести код до робота. Ведь виртуальная машина сначала должна создать «образ» того, как будет работать данная программа на определенном роботе. Это занимает достаточное количество времени, а само исполнение происходит с задержкой. При этом язык довольно популярен в робототехнике из-за своей универсальности, а некоторые производители даже делают микроконтроллеры специально для программирования на Java.
Язык часто применяют для роботов, связанных с веб-технологиями. Например, в системе «умный дом» (правда, в этом случае используют JavaScript, но принцип похож) или в машине, которая снимает видео и транслирует его в интернет.
Саймон Риттер – евангелист Java и один из создателей, является лучшим специалистом по использованию Java-технологии в мире робототехники. Он разработал Robotics Software Development Kit и регулярно показывает новые роботизированные системы.
class HelloWorldApp {
public static void main(String[] args) {
System.out.printIn("Hello World!"); //Prints the string to the console.
}
}
MATLAB
Среди инженеров-робототехников популярен язык MATLAB со своей средой и его родственники с интерпретаторами с открытым исходным кодом, например Octave.
Чтобы запрограммировать игрушечную машинку, высокоуровневый MATLAB не нужен. А вот для разработки компьютерного зрения будет в самый раз. Программы, написанные на этом языке, могут обрабатывать большое количество информации и давать точный результат.
classdef hello
methods
function greet(this)
disp('Hello, World')
end
end
end
Python
Язык высокого уровня Python ценят за простоту и экономию времени, например при определении и приведении типов переменных.
Кроме того, существует огромное количество уже готовых написанных скриптов – кодов выполнения программы. Когда нужно реализовать некоторые базовые функции, можно воспользоваться готовым решением. Также язык допускает простые привязки со скриптами, написанными на C/C++. Это означает, что на этих языках могут быть реализованы части кода, требующие высокой производительности. Таким образом Python стал универсальным практически в любой области.
Популярность языка в робототехнике в последние годы только растет. Он, к примеру, часто используется для программирования на Raspberry Pi. Этот микрокомпьютер просто создан для экспериментов и разработки IoT-устройств. Тем более для Python существует множество библиотек, где есть готовые решения для базовых программ. Благодаря несложному и интуитивно понятному синтаксису даже дети и новички могут легко создавать роботов на Python.
print("Hello World")
C/C++
«Си» сочетает удобство написания высокоуровневых языков и контроль низкоуровневых. Лучше многих других языков транслируется в машинный код, но обладает непростым синтаксисом и не прощает ошибок. Даже одна неверная строчка нового кода может нарушить работу уже действующих программ. Кстати, программы в универсальном робототехническом языке (сокращенно GRL – Generic Robot Language) компилируются на таких языках команд, как С.
Высокоуровневый C++ сложен на начальных этапах программирования, но если вы его освоите, то сможете применять практически для любых задач.
C++ используется для:
- разработки программного обеспечения;
- создания операционных систем, различных программ, драйверов устройств;
- реализации приложений на встраиваемых системах, высокопроизводительных серверах, в играх.
В «Робиксе» мы используем платы Arduino, которые программируются на языке C++ с дополнениями. Поэтому на занятиях по робототехнике наши ученики знакомятся еще и с логикой программирования «Си плюс-плюс».
на языке С:
#include <stdio.h>
int main(void)
{
printf("hello, world\n")
}
на языке С++
#include <iostream>
int main()
{
std::cout<<"Hello, world!
\n";
return 0;
}
Неважно, чем вы занимаетесь: программированием микроконтроллеров на «Ассемблере» или написанием программ на «Питоне», каждый из этих языков хорош для определенных манипуляций. Они имеют разный синтаксис и учитывают разные условия.
Представим, что сегодня мы с вами роботы. Перед нами стоит задача-программа: «Встать с кровати и выйти в дверной проем».
Если бы писали программу на Python, то для нас, роботов, она выглядела бы так:
Открыть глаза
Встать с кровати
Выйти в дверь
На C++ она выглядела бы совершенно по-другому:
(Создать объект «комната»)
(Создать объект «кровать»)
(Создать объект «Я»)
Открыть глаза
…и т. д.
Вместо заключения
Основное отличие между обычным программированием и программированием роботов заключается в том, что программист только пишет код, а робототехник еще взаимодействует с механикой, электроникой и окружающей реальностью.
Легче всего простейшие алгоритмы и логика языков даются в детстве. В «Робиксе» мы обучаем основам программирования даже дошкольников. Наши ученики начинают со Scratch, знакомясь с программированием в игровой форме, и дальше осваивают более сложные языки Python и C++. Ребята с увлечением создают собственные игры, роботов, а заодно готовятся к «взрослому» миру, где языки программирования в ряде отраслей уже давно перешли в разряд must have, а дальше их, может, и вовсе заменит искусственный интеллект. И понимание алгоритмов работы компьютера, умение ориентироваться в механике, электронике и сопутствующих технологиях – хороший набор навыков для профессии будущего.
крутая статья.
рады, что понравилось!
Хорошо, что все то, что пришлось и приходится изучать, восполняя пробелы, вы даёте детям системно. Жаль, что раньше такого не было, много времени бы сэкономил, но раньше и Ардуино не было)))