Українська   English

Реферат по теме выпускной работы

Содержание

Введение

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

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

1. Проектирование и разработка шагохода

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

Проектирование и создание программы для шагохода включает в себя:

  1. Оценка и ознакомление с оборудованием и конструкцией робота.
  2. Реализация и отладка начального положения.
  3. Создание алгоритмов движения.
  4. Адаптация и отладка алгоритмов движения.

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

2. Оборудованием и конструкция робота

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

Платформой для реализации робота была выбрана Arduino. Простота реализации программ на С-подобном языка привлекла начинавшего программиста робототехника. Компактная плата Arduino Nano v3.0 вполне подходила для поставленных задач, и наличие 12 дискретных входов подходило для выбранного количества сервоприводов.

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

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

3. Реализация и отладка начального положения

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

Начальное положение робота реализовывалось путем выставления всех сервоприводов в положение 90°. Выставление начального положения производилось первично механическим путем (сборкой робота с его учетом).

Все реализация алгоритмов движения будет основана с учетом схемы направления движения сервоприводов (от 0° до 180°) Рисунок 1.

Схемы направления движения сервоприводов.

Рисунок 1 – Схемы направления движения сервоприводов.

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

Из-за 12 дискретных входов/выводов и 16 сервоприводов все алгоритмы движения упрощается, путем спаренноия движения ног LF и LB, RF и RB. Такое упрощение ограничит вариации алгоритмов движений.

Обозначения по типу s1LF, s2LF, s3LF – с приставкой s и номером, обозначают номер серводвигателя согласно схеме, Рис. 1.

Движение осуществляется от заданного начального положение приводов, в градусной мере, которая задается величиной s1LFinV (с указанием на inV – initial valueц (начальное положение)).

Программа начального положения

Для работы с сервоприводами в среде Arduino есть специальная библиотека < Servo.h > , она позволяет задавать положение сервопривода значением угла. Для управления скоростью отработки углов, для последующих алгоритмов управления я воспользовался пользовательской библиотекой < VarSpeedServo.h > . Первым шагом при создании программы производится подключение этой библиотеки. (Все фразы после // считаются комментариями и не влияют на отработку программы).

Код (C++):

#include < VarSpeedServo.h > //подключаем библиотеку для работы с сервоприводом

Далее производится объявление переменных типа VarSpeedServo что являет собой присваиванием значения, подаваемого на сервопривод (которое обрабатывается библиотекой VarSpeedServo.h).

Код (C++):

VarSpeedServo s1LF; //объявляем s1LF типа VarSpeedServo
VarSpeedServo s2LF;
VarSpeedServo s3LF;
VarSpeedServo s1RF;
VarSpeedServo s2RF;
VarSpeedServo s3RF;
VarSpeedServo s1LM;
VarSpeedServo s2LM;
VarSpeedServo s3LM;
VarSpeedServo s1RM;
VarSpeedServo s2RM;
VarSpeedServo s3RM;

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

Код (C++):

//Начальные значения углов
//LEG 1
int s1LFinV=90;
int s2LFinV=90;
int s3LFinV=90;
//LEG 2
int s1RFinV=90;
int s2RFinV=90;
int s3RFinV=90;
//LEG 3
int s1LMinV=90;
int s2LMinV=90;
int s3LMinV=90;
//LEG 4
int s1RMinV=90;
int s2RMinV=90;
int s3RMinV=90;

Вызывается функция setup (void setup ()) – это обязательная команда, вызывается единожды при включении или после перезапуска контроллера, позволяющая начать выполнение команд. Чаще всего это всевозможные процедуры инициализации чего-либо. Setup является однопроходным циклом.

Код (C++):

void setup () //процедура setup

Процедура присваивания логического сигнала с дискретных входов/ выводов Arduino определенным сервоприводам, привязывая определенный выход к определенному сервоприводу.

Символы { и } используются для обозначения начала и конца циклов.

Код (C++):

{
s1LF.attach(2);
s2LF.attach(3);
s3LF.attach(4);
s1RF.attach(8);
s2RF.attach(9);
s3RF.attach(10);
s1LM.attach(5);
s2LM.attach(6);
s3LM.attach(7);
s1RM.attach(11);
s2RM.attach(12);
s3RM.attach(13);
}

Вызывается функция loop (void loop()), которая представляет собой замкнутый бесконечный цикл.

С помощью функции write производится присваивание величин углов переменным, содержащим значение логического сигнала. Так как эти команды заданы в цикле loop робот будет бесконечно держать заданное положение.

Код (C++):

void loop() //процедура loop
{
// Leg1/5 LF/LB //положение левой передней и левой задней ног
s1LF.write(s1LFinV);
s2LF.write(s2LFinV);
s3LF.write(s3LFinV);
// Leg2/6 RF/RB //положение правой передней и правой задней ног
s1RF.write(s1RFinV);
s2RF.write(s2RFinV);
s3RF.write(s3RFinV);
// Leg3 LM //положение левой средней ноги
s1LM.write(s1LMinV);
s2LM.write(s2LMinV);
s3LM.write(s3LMinV);
// Leg4 RM //положение правой средней ноги
s1RM.write(s1RMinV);
s2RM.write(s2RMinV);
s3RM.write(s3RMinV);
}

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

4. Создание алгоритмов движения

После реализации начального положения можно приступать к написанию алгоритмов движения. Из-за использования Arduino Nano v3.0, и спаривания ног алгоритмы для движения будут представлены в четырех вариантах: движение вперед, назад, вращение вокруг своей оси по часовой и против часовой стрелки (что обеспечивает изменение направления движения).

Для разработки всех алгоритмов использовалась условная схема направления вращения углов сервоприводов, Рисунок 2.

Условная схема направления вращения углов сервоприводов.

Рисунок 2 – Условная схема направления вращения углов сервоприводов.

4.1 Алгоритм движения вперед

Данный алгоритм осуществляется путем последовательного перемещения двух групп ног: первая группа (левая передняя, правая средняя, левая задняя), вторая группа (правая передняя, левая средняя, правая задняя).

Передвижение осуществляется таким образом:

  1. Ноги первой группы поднимаются вверхи и смещаются на 13° вперед, в то время как ноги второй группы смещаются на 13° назад, перемещая корпус робота вперёд. Так из начального положения мы приходим в первое положение шага. Поворот/смешение каждой ноги осуществляется при помощи сервоприводов s1. Подъем каждой ноги осуществляется при помощи сервоприводов s2 и s3, смешением их на 45°, так чтобы нога подгибалась, прижимаясь к корпусу при подъёме.
  2. Ноги второй группы поднимаются вверх и смещаются на 26° вперед, в то время как ноги первой группы смещаются на 26° назад, перемещая корпус робота вперёд.
  3. Ноги первой группы поднимаются вверх и смещаются на 26° вперед, в то время как ноги второй группы смещаются на 26° назад, перемещая корпус робота вперёд.

Так последовательным чередованием пункта 2 и 3 осуществляется полный шаг вперед. Повторением полного шага осуществляется непрерывное движение вперед.

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

В программе движение 1 реализовано MOVE 1, MOVE 2, MOVE 3 и MOVE 4. MOVE 1 и MOVE 2 выполняется единожды при запуске движения.

В самой программе я разбил движение 2 и 3 на три части: подъем ног, перемещение ног, опускание ног. Они реализованы MOVE 3 – MOVE 8.

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

Программа движения вперед

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

Код (C++):

#include < VarSpeedServo.h > //подключаем библиотеку для работы с сервоприводом
VarSpeedServo s1LF; //объявляем s1LF типа VarSpeedServo
VarSpeedServo s2LF;
VarSpeedServo s3LF;
VarSpeedServo s1RF;
VarSpeedServo s2RF;
VarSpeedServo s3RF;
VarSpeedServo s1LM;
VarSpeedServo s2LM;
VarSpeedServo s3LM;
VarSpeedServo s1RM;
VarSpeedServo s2RM;
VarSpeedServo s3RM;

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

Код (C++):

//Начальные значения углов
//LEG 1
int s1LFinV=90;
int s2LFinV=90;
int s3LFinV=90+10;
//LEG 2
int s1RFinV=90;
int s2RFinV=90;
int s3RFinV=90-10;
//LEG 3
int s1LMinV=90;
int s2LMinV=90-10;
int s3LMinV=90+5;
//LEG 4
int s1RMinV=90-6;
int s2RMinV=90+15;
int s3RMinV=90+5;

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

Код (C++):

//LEG 1
int s1LFturnV=-13;
int s2LFturnV=45;
int s3LFturnV=-45;
//LEG 2
int s1RFturnV=13;
int s2RFturnV=-45;
int s3RFturnV=45;
//LEG 3
int s1LMturnV=-13;
int s2LMturnV=45;
int s3LMturnV=-45;
//LEG 4
int s1RMturnV=13;
int s2RMturnV=-45;
int s3RMturnV=-45;

int DLLV=300;
int SPEED=80;

DLLV – присваивание значение величины задержки, выделенного времени за которое должно осуществится движение. Задается в миллисекундах.

SPEED – присваивание величины скорости движение сервоприводов. Чем выше величина, тем больше скорость вращения. Стандартная скорость 30.

Код (C++):

void setup() //процедура setup
{
s1LF.attach(2);
s2LF.attach(3);
s3LF.attach(4);
s1RF.attach(8);
s2RF.attach(9);
s3RF.attach(10);
s1LM.attach(5);
s2LM.attach(6);
s3LM.attach(7);
s1RM.attach(11);
s2RM.attach(12);
s3RM.attach(13);

Можно заметить ниже, что при использовании функции write задается не только величина угла, но и скорость поворота.

Код (C++):

// MOVE 1 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV,SPEED);
s2LF.write(s2LFinV,SPEED);
s3LF.write(s3LFinV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV,SPEED);
s2RM.write(s2RMinV,SPEED);
s3RM.write(s3RMinV,SPEED);
delay(DLLV);

// MOVE 2 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV,SPEED);
s2LF.write(s2LFinV+s2LFturnV,SPEED);
s3LF.write(s3LFinV-s3LFturnV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV,SPEED);
s2RM.write(s2RMinV+s2RMturnV,SPEED);
s3RM.write(s3RMinV+s2RMturnV,SPEED);
delay(DLLV);
}

Движение вперед будет осуществлятся бесконечно, так как основная часть движения заданна в бесконечном цикле функции loop.

Код (C++):

void loop() //процедура loop
{
// MOVE 3 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV+s1LFturnV,SPEED);
s2LF.write(s2LFinV+s2LFturnV,SPEED);
s3LF.write(s3LFinV-s3LFturnV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV-s1RFturnV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV-s1LMturnV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV+s1RMturnV,SPEED);
s2RM.write(s2RMinV+s2RMturnV,SPEED);
s3RM.write(s3RMinV+s2RMturnV,SPEED);
delay(DLLV);

// MOVE 4 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV+s1LFturnV,SPEED);
s2LF.write(s2LFinV,SPEED);
s3LF.write(s3LFinV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV-s1RFturnV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV-s1LMturnV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV+s1RMturnV,SPEED);
s2RM.write(s2RMinV,SPEED);
s3RM.write(s3RMinV,SPEED);
delay(DLLV);

// MOVE 5 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV+s1LFturnV,SPEED);
s2LF.write(s2LFinV,SPEED);
s3LF.write(s3LFinV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV-s1RFturnV,SPEED);
s2RF.write(s2RFinV+s2RFturnV,SPEED);
s3RF.write(s3RFinV-s3RFturnV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV-s1LMturnV,SPEED);
s2LM.write(s2LMinV+s2LMturnV,SPEED);
s3LM.write(s3LMinV-s3LMturnV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV+s1RMturnV,SPEED);
s2RM.write(s2RMinV,SPEED);
s3RM.write(s3RMinV,SPEED);
delay(DLLV);
// MOVE 6 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV-s1LFturnV,SPEED);
s2LF.write(s2LFinV,SPEED);
s3LF.write(s3LFinV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV+s1RFturnV,SPEED);
s2RF.write(s2RFinV+s2RFturnV,SPEED);
s3RF.write(s3RFinV-s3RFturnV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV+s1LMturnV,SPEED);
s2LM.write(s2LMinV+s2LMturnV,SPEED);
s3LM.write(s3LMinV-s3LMturnV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV-s1RMturnV,SPEED);
s2RM.write(s2RMinV,SPEED);
s3RM.write(s3RMinV,SPEED);
delay(DLLV);

// MOVE 7 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV-s1LFturnV,SPEED);
s2LF.write(s2LFinV+s2LFturnV,SPEED);
s3LF.write(s3LFinV-s3LFturnV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV+s1RFturnV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV+s1LMturnV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV-s1RMturnV,SPEED);
s2RM.write(s2RMinV+s2RMturnV,SPEED);
s3RM.write(s3RMinV+s2RMturnV,SPEED);
delay(DLLV);

// MOVE 8 ////////////////////////////////
// Leg1/5 LF/LB //движение левой передней и левой задней ног
s1LF.write(s1LFinV+s1LFturnV,SPEED);
s2LF.write(s2LFinV+s2LFturnV,SPEED);
s3LF.write(s3LFinV-s3LFturnV,SPEED);
// Leg2/6 RF/RB // движение правой передней и правой задней ног
s1RF.write(s1RFinV-s1RFturnV,SPEED);
s2RF.write(s2RFinV,SPEED);
s3RF.write(s3RFinV,SPEED);
// Leg3 LM //движение левой средней ноги
s1LM.write(s1LMinV-s1LMturnV,SPEED);
s2LM.write(s2LMinV,SPEED);
s3LM.write(s3LMinV,SPEED);
// Leg4 RM //движение правой средней ноги
s1RM.write(s1RMinV+s1RMturnV,SPEED);
s2RM.write(s2RMinV+s2RMturnV,SPEED);
s3RM.write(s3RMinV+s2RMturnV,SPEED);
}

4.2 Алгоритм движения назад

Алгоритм движения назад осуществляется подобно алгоритму движения вперед перемещая те же две группы ног, но с обратным направлением смещения: первая группа (левая передняя, правая средняя, левая задняя), вторая группа (правая передняя, левая средняя, правая задняя).

Передвижение осуществляется таким образом:

  1. Ноги первой группы поднимаются вверх и смещаются на 13° назад в то время как ноги второй группы смещаются на 13° вперед, перемещая корпус робота в обратном направлении.
  2. Ноги второй группы поднимаются вверх и смещаются на 26° назад, ноги первой группы смещаются на 26° вперед, перемещая корпус робота назад.
  3. Ноги первой группы поднимаются вверх и смещаются на 26° назад, ноги второй группы смещаются на 26° в перед, перемещая корпус робота назад.

По принципу движения вперед, последовательное чередование пункта 2 и 3 осуществляется полный шаг назад. Повторением полного шага осуществляется непрерывное движение назад.

4.3 Алгоритмы вращение по и против направления часовой стрелки

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

Алгоритм движения примет такой вид:

  1. Ноги левой группы поднимаются вверх и смещаются на 13° вперед, правая средняя нога поднимаются и смещается на 13° назад, ноги правой группы смещаются на 13° в перед, левая средняя нога поднимаются и смещается на 13° назад.
  2. Ноги правой группы поднимаются вверх и смещаются на 26° вперед, левая средняя нога поднимаются и смещается на 26° назад, ноги левой группы смещаются на 26° вперед, правая средняя нога поднимаются и смещается на 26° назад.
  3. Ноги левой группы поднимаются вверх и смещаются на 26° вперед, правая средняя нога поднимаются и смещается на 26° назад, ноги правой группы смещаются на 26° вперед, левая средняя нога поднимаются и смещается на 26° назад.

Последовательное использование пункта 2 и 3 реализует полный поворот робота по часовой, что программно реализуется прохождением одного цикла – 52°. Повторением полного поворота осуществляется непрерывное вращение по часовой.

Алгоритм движения против часовой реализуется по такому же принципу.

Данные алгоритмы хоть и можно назвать простыми и в какой-то мере примитивными, но надежность и четкость их отработки безусловна. К тому же, данные алгоритмы – это лишь первый этап в реализации управления нашим шагоходом. Они послужат отличным базисом для создания серьезных алгоритмов, которые станут доступны с приобретением более функциональной платы Arduino MEGA2560 Pro Mini.

Выводы

Наш робот гексапод пока еще на начальном этапе разработки. Хотя выбранная нами плата Arduino Nano v3.0 отвечает поставленным задачам, мы считаем что для исключения операции спаривания ног будет установлена плата Arduino MEGA2560 Pro Mini , из-за наличия 54 дискретных входов/выводов.

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

Планы на будущее

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

На момент написания данного реферата магистерская работа еще не завершена. Ориентировочная дата завершения магистерской работы: июнь 2017 года. Полный текст работы и материалы по теме могут быть получены у автора или его руководителя после указанной даты.

Список источников

  1. Гаревская Н.В., Полянский В.В., Сабадырь А.М., Семцов А.С. Электронный журнал «Труды МАИ ». / Разработка конструкции и алгоритмов управления движением шагающего аппарата для технического обслуживания авиационных комплексов. Выпуск № 62, 2012. – 12с. http://trudymai.ru/....
  2. Илья Чех // Роботы-пауки: кинематика. http://weas-robotics.ru/robotyi-pauki...
  3. Джереми Блум // Изучаем Arduino: инструменты и методы технического волшебства. Пер. с англ. — СПб.: БХВ-Петербург, 2015. – 336 с. 5-33.
  4. Петин В.А. / Проекты с использованием контроллера Arduino. – 2-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2015. – 448 с.
  5. Омельченко Е.Я., Танич В.О., Маклаков А.С., Карякина Е.А. Электротехнические системы и комплексы // Краткий обзор и перспективы применения микропроцессорной платформы Arduino. Магнитогорский государственный технический университет им. Г.И. Носова (Магнитогорск), 2013 г. – 366 с. 28-33.
  6. C. Menon, Y. Li, D. Sameoto, C. Martens. Robotics and Autonomous Systems // "Biologically based distributed control and local reflexes improve rough terrain locomotion in a hexapod robot". Volume 18, Issues 1-2, July 1996, Pages 59-64.
  7. Пономаренко В.И., Караваев А.С. Современные проблемы науки и образования // Использование платформы Arduino в измерениях и физическом эксперименте. – 2014. – № 3, – с. 77-90.