Разработка робототехники

Роботизированный манипулятор

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

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

Задача вашей руки — перемещаться с места на место. Аналогичным образом, задача манипулятора — перемещать концевой эффектор с места на место. Вы можете оснастить манипулятор разными концевыми эффекторами, предназначенными для конкретных задач. Один из распространенных эффекторов — упрощенная версия руки, которая может хватать и переносить разные объекты. Манипуляторы часто обладают встроенными датчиками давления, которые предписывают компьютеру, с какой силой захватывать конкретный объект. Это позволяет роботу не ломать все, что он хватает. Другие конечные эффекторы включают паяльные лампы, дрели и распылители порошка или краски.

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

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

Что такое алгоритмы в робототехнике

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

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


Функциональные элементы блок-схемы алгоритма

Turning Concepts

This type of vehicle is called a Differential drive vehicle. Differential drive vehicles have two types of turns: Swing turns, and point turns. In a point turn, the vehicle ‘turns on a dime’ and does not change position. In a swing turn, the vehicle does change position when turning (e.g. an automobile turn).

Point Turn Concepts

Point turns require that the center of rotation is between the drive wheels. For this to happen one side must go forward while the other side goes backwards at the same power. Since the attempted directions of travel are opposite they counteract each other and cause the vehicle to turn. This type of turn can be very useful, and is very simple to predict. Keep in mind that only differential drive vehicles can perform this turn.

depiction of a point turn.

Swing Turn Concepts

A swing turn is where a vehicle «swings» around a pivot point. This occurs when one side of the vehicle is traveling faster than the other. Often, the case is that one side is simply stopped, causing the vehicle to pivot around the wheel. However, it is also possible to have the vehicle make a much more gradual turn by having both sides going forward but at different speeds. For these first few projects we only care about cases where one side of the vehicle is stopped.

depiction of a swing turn

Размер имеет значение

Изначально RPA задумывались как средства «малой механизации» для облегчения рутинного труда белых воротничков — подобно тому, как у рабочих есть перфораторы и шуруповерты. С их помощью можно сделать ремонт в квартире, однако высотный дом одним этим инструментом не построишь, тут нужна более серьезная техника.

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

Что приводит к соответствующим последствиям. Опрос Deloitte среди 400 крупнейших компаний, показал, что 63% организаций не выполнили в срок проекты RPA. Для тех, кому это удалось, срок возврата инвестиций оказался более длительным, чем ожидалось. В исследовании EY также говорится, что 30–50% проектов по внедрению программных роботов терпят неудачу.

Чаще всего это связано с тем, что заказчики применяют RPA-системы не по назначению, пытаясь с ее помощью решить все задачи интеграции.

Дает себя знать и эффект масштаба — «массовые внедрения» RPA буксуют, по данным Forrester более половины заказчиков используют меньше 10 роботов; а у 70% — менее чем 50 роботов.

Но самая большая проблема сегодня заключается в том, что у многих компаний некоторые процессы функционируют точно так же, как 20-30-40 лет назад.

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

Означает ли это, что рынок RPA — это очередной пузырь, готовый вот-вот лопнуть? Отнюдь. Просто пора посмотреть на эту технологию без розовых очков.

То, что отношение заказчиков к средствам роботизации процессов становится более прагматичным, не обязательно должно отразиться негативно на финансовых показателях — рынок RPA остается одним из самых быстрорастущих, по оценке MarketWatch к 2026 году он достигнет $11,59 млрд с показателем среднегодового роста в прогнозируемый период — 32,58%.

Программирование EV3 на Python

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

На микрокомпьютере EV3 установлена операционная система Linux. Для того, чтобы программировать EV3 на Python нужно установить Linux ev3dev на модуль EV3.

Затем нужно установить образ на карту памяти microCD. Желательно, чтобы класс карты был не менее десяти. Объем карты памяти от двух до тридцати двух гигабайт. Можно также использовать карту памяти microSDHC.

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

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

В качестве одного из вариантов можно установить редактор кода PyCharm Edu. Есть бесплатная версия с наличием подсказок, проверкой кода и подсвечиванием синтаксиса. Созданный в программе файл можно передать в блок EV3 при помощи программы PuTTY. Эта программа помогает установить SSH соединение операционной системы Windows с микроконтроллером EV3.

Скачать программу PuTTY можнос официального сайта. Есть 32 битная и 64 битная версии программы.

rand

word rand()
() Returns a pseudo-random integral number in the range 0 to at least 32,767 (depending on platform).

A typical way to generate pseudo-random numbers in a determined range using rand is to use the modulo of the returned value by the range span and add the initial value of the range:

( value % 100 ) is in the range 0 to 99
( value % 100 + 1 ) is in the range 1 to 100
( value % 30 + 1985 ) is in the range 1985 to 2014

Notice though that this modulo operation does not generate a truly uniformly distributed random number in the span (since in most cases lower numbers are slightly more likely), but it is generally a good approximation for short spans.

task main()
{
  int min = -100;   // create int variable 'min' and set it to -100
  int max = 100;    // create int variable 'max' and set it to 100
 
  srand(nSysTime);  // generate seed for rand() from current system time
 
  while(true)       // infinite loop:
  {
    motorrightMotor = (rand() % (max-min)) + min; // set 'rightMotor' to a random number in the range: 
    motorleftMotor  = (rand() % (max-min)) + min; // set 'leftMotor' to a random number in the range: 
    wait1Msec(500); // wait 500 milliseconds
  }
}

Что такое стартовая обстановка

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

Насколько это важно давайте рассмотрим на примере. Пусть есть две стартовые обстановки:

Отличаются они только тем, что в стартовой обстановке 2 справа от Робота находится стена.
Если наша программа начнется с команды, которая переместит Робота на одну клетку вправо (о простых командах Робота), то в первом случае (стартовая обстановка 1) Робот выполнит эту команду, а во втором программа завершится аварийно, так как Робот не может ходить сквозь стены. Получается, что одна и та же программа в первом случае работает, а во втором приводит к ошибке

Именно поэтому так важно задавать стартовую обстановку для Робота.
Можно привести такой пример. Предположим есть повар, которым мы можем управлять, давая ему команды

И этот повар может зажечь плиту. Но только в случае, если он находится рядом с ней. А вот если он находится в другом конце кухни, то дав ему команду зажечь плиту, он не сможет ее выполнить. Поэтому перед тем как дать команду, необходимо задать повару стартовую обстановку — расположить его рядом с плитой.
Надеюсь вы поняли что такое стартовая обстановка и почему она так важна. А теперь запустим среду Кумир и попробуем сами задать Роботу стартовую обстановку.

Part 3

Consider a group of students sitting around a table having a discussion with their teacher. If a student wants to speak then they have to raise their hand and wait for the teacher to give them permission. If several students have their hands raised the teacher will choose each one in turn so everyone can be heard. Some students may want to speak often and keep raising their hands, others may be sleepy and not participate much at all. The teacher is also watching a clock, if a student speaks for too long then the teacher will interrupt them and give someone else a turn. At one point the school principle joins the debate, he also has to raise his hand to be able to speak but, as he is considered more important, the teacher always gives him priority.

This analogy describes quite well how the RobotC task scheduler works. The task scheduler (the teacher in my example) determines which task (student) can run. The principle represents a high priority task that has precedence over the others. When several tasks of the same priority want to run the scheduler chooses them in turn. If a task continues running too long then the scheduler stops it and gives time to others.

Here’s the test code we will use, very similar to before but the while loops only wait for 1mS and 2mS respectively.

#pragma config(Sensor, dgtl1,  LED_1,               sensorDigitalOut)
#pragma config(Sensor, dgtl4,  LED_2,               sensorDigitalOut)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//
 
// Flash the first LED
task flashLed_1()
{
    while( true )
        {
        // toggle output
        SensorValue LED_1  = 1 - SensorValue LED_1 ;
 
        wait1Msec( 1 );
        }
}
 
// Main task - flash the second LED
task main()
{
    // Start the other task
    StartTask( flashLed_1, 6 );
 
    // Do our own thing
    while( true )
        {
        // toggle output
        SensorValue LED_2  = 1 - SensorValue LED_2 ;
 
        wait1Msec( 2 );
        }
}

If we observe the digital outputs on the scope we see the following, the value of LED_1 is shown by the yellow trace, LED_2 the blue. LED_1 is changing state every 1mS, LED_2 is changing state every 2mS. This corresponds exactly to the wait1Msec delays we have in the two tasks, each task does it’s thing and then sleeps until woken again by the task scheduler.

For the next example we replace the wait1Msec(1) statement in the flashLed_1 task with a different command, AbortTimeSlice. This command hands control back to the task scheduler which then decides if any other tasks are waiting to execute (have their hands up), if none are waiting then control is given back to flashLed_1, lets see this on the scope.

// Flash the first LED
task flashLed_1()
{
    while( true )
        {
        // toggle output
        SensorValue LED_1  = 1 - SensorValue LED_1 ;
 
        AbortTimeSlice();
        }
}

You can observe that LED_1 is now flashing very fast as the only other task we have created is the main task which sleeps for 2mS before wanting to run. Both tasks still operate but the majority of the time is spent running the flashLed_1 task. If you are wondering what the large gap in the yellow trace is, well in the previous post I explained that RobotC already has other tasks running for debugging purposes, this gap occurred when the RobotC task, presumably a more important task, needed to run.

Цикл со счетчиком.

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

Для того, чтобы написать цикл со счетчиком для исполнителя необходимо знать его синтаксис. А он такой:

нц <количество повторений> раз

<команда 1>

<команда 2>

<команда n>

кц

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

Давайте рассмотрим это на примере.

Закрасим 7 клеток, как на рисунке. Рекомендую почитать про стартовую обстановку Робота и про его простые команды.

Изначально Робот находился в левой верхней клетке.

Давайте для начала решим задачу линейно. В этом случае мы будет закрашивать текущую клетку и перемещаться на 1 клетку вправо и программа будет выглядеть так:использовать Роботалгнач

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

кон

Как видим, команды закрасить и вправо повторяются 7 раз. Давайте теперь перепишем программу с использованием цикла. Кстати, чтобы вставить цикл в свою программу можно в меню Вставка выбрать пункт нц-раз-кц или нажать одну из комбинаций клавиш Esc, Р (русская буква Р) или Esc, H (латинская буква H). Причем клавиши надо нажимать последовательно — сначала Esc, отпустить ее и только потом Р или H.

Так вот, наша программа с циклом будет выглядеть так:

использовать Робот

алг

нач

нц 7 раз

закрасить

вправо

кц

кон

Если мы ее запустим, то увидим, что в результате получится тоже самое — 7 закрашенных клеток. Однако программа стала короче и значительно грамотней с алгоритмической точки зрения!

Цикл с условием.

Вернемся к физкультуре и изменим задачу. Ведь кто-то может и не сделать 7 приседаний, а другой способен сделать 27. Можно ли учесть это при создании цикла? Конечно. Только теперь мы будем использовать не счетчик (количество повторений), а условие. К примеру, пока не устал, делай приседания. В этом случае человек будет делать не конкретное число приседаний, а приседать до тех пор, пока не устанет. И наш цикл на абстрактном языке примет такой вид:

пока не устал

сделай приседание

конец цикла

Слова не устал в нашем случае — это условие. Когда оно истинно, цикл выполняется. Если же оно ложно (устал) тело цикла не будет выполнено. У исполнителя Робот есть несколько условий

сверху свободно

снизу свободно

слева свободно

справа свободно

сверху стена

снизу стена

слева стена

справа стена

Теперь давайте решим следующую задачу для Робота — нарисовать вертикальную линию от левой до правой границы поля использую цикл с условием. Изначально Робот находится в левом верхнем углу.

Давайте сначала сформулируем словесный алгоритм — т. е. опишем словами что нужно делать Роботу. Этот алгоритм будет звучать примерно так:

«Пока справа свободно делай шаг вправо и закрашивай клетку»

В результате Робот пробежит по всем клеткам вправо и будет их закрашивать до тех пор, пока справа не окажется стена.

Исходный код нашей программы для Робота будет примерно такой:

использовать Робот

алг

нач

нц пока справа свободно

вправо

закрасить

кц

кон

В результате выполнения этой программы мы увидим вот такую картину:

Как видим, не хватает только закрашенной первой клетки. Для этого перед циклом необходимо выполнить команду закрасить.

Для закрепления прошу написать программу, которая будет делать рамку вокруг рабочего поля Робота независимо от его размера. Конечно же с использованием циклов с условием. В итоге должно получиться так:

Code Rally: гонки на роботах

Code Rally (разработка IBM) нельзя назвать полноценным симулятором роботов. Если быть точным, Code Rally — симулятор гонок машин (бесплатный и с открытым исходным кодом).

Цель программиста — написать алгоритм управления движения машины («роботом») по трассе (кругу) с учетом следующих правил игры:

  1. В процессе движения машина должна проходить через контрольные точки, за что ей начисляются очки.
  2. Перемещаясь по трассе, машина тратит топливо, а также может расстреливать другие машины пулями.
  3. Машине доступны координаты заправочных станций, кассет с пулями и контрольных точек; трасса ограничена стенами, за пределы которых машина не может выехать.
  4. Допускается управление скоростью машины.
  5. На трассе могут находиться заправочные станции и кассеты с пулями. При заправке топливом машина должна оставаться неподвижной. Машина может включать защиту, но в это время в удвоенном объеме тратится топливо.
  6. Очки начисляются за проезд через контрольную точку (за проезд через точки в установленном порядке начисляется больше очков), за попадание в машину противника (подбитая машина теряет топливо) и за топливо, оставшееся на момент окончания гонки.

Побеждает машина, набравшая максимальное количество очков.

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

Разработка алгоритма управления машиной выполняется в Eclipse на Java. Так что, занимаясь симуляторами, можно не только развлечься, но и Java подтянуть. В симуляторе доступно шесть трасс различной степени сложности.

Схема работы мозга

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

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

Алгоритм_1

Фото: Depositphotos

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector