Часть III. Практическое применение Arduino
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"automobile1"); // Здесь задаем адрес
Mirf.payload = MAX_BUFF; // Здесь задаем буфер
Mirf.channel = 10;
// Это канал приема-передачи - должен
// быть одинаковым у устройств.
Mirf.config();
// настраиваем выводы для моторов
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
Serial.println("Start..");
}
char buff[MAX_BUFF];
void loop(){
delay(10);
//receiving
if(Mirf.dataReady()) {
Mirf.getData((uint8_t *)buff);
int fb1=buff[0];
int lr=buff[1];
go12(fb1,lr1);
}
delay(100);
}
//
void go12(int fb,int lr)
{
// вперед-назад
if(fb>50)
{digitalWrite(3,HIGH);digitalWrite(4,LOW);
digitalWrite(5,HIGH);digitalWrite(6,LOW);}
else if(fb<50)
{digitalWrite(3,LOW);digitalWrite(4,HIGH);
digitalWrite(5,LOW);digitalWrite(6,HIGH);}
else
{digitalWrite(3,LOW);digitalWrite(4,LOW);
digitalWrite(5,LOW);digitalWrite(6,LOW);}
// влево-вправо
int lr1=map(abs(50-lr),1,50,1,255);
int fb1=map(abs(50-fb),1,50,1,255);
Глава 28. Работа Arduino с USB-устройствами
379
if(lr<50)
{int left=min(255,max(0,fb1-lr1/2));
int right=min(255,fb1+lr1/2)}
else
{int right=min(255,max(0,fb1-lr1/2));
int left=min(255,fb1+lr1/2)}
analogWrite(9, left);
analogWrite(10, right);
}
Полностью данные скетчи можно найти в папках
examples/_28_1
и
examples/_28_2
сопровождающего книгу электронного архива.
28.6. Подключение к Arduino Android-устройства
через USB Host Shield
В 2011 г. корпорация Google представила стандарт Android Open Accessory (AOA),
который обеспечивает взаимосвязь между внешними USB-устройствами (Arduino-
подобными платами и др.) и Android-устройством. Начиная с версии Android 3.1
(поддержка AOA портирована и в Android 2.3.4) по замыслу Google все устройства
должны поддерживать USB-соединение в режиме "accessory mode". В этом режиме
подключенное устройство (к примеру плата Arduino) является хостом (в т. ч. питает
шину 5 В/500 мА), а Android-устройство — периферией.
Данная взаимосвязь между устройством на базе Android и Arduino-подобными пла-
тами открывает массу возможностей для разработчика и радиолюбителя: управле-
ние сервоприводами, двигателями, индикацией с Android-телефона, считывание
состояния датчиков на Android-телефоне или планшете — таких, как гироскоп,
акселерометр, компас, GPS, передача данных через модуль GPRS/HDSPA планшета
и многое другое.
Г Л А В А
29
Arduino и ROS
29.1. Что такое ROS?
ROS (Robot Operating System, операционная система для роботов) — это структура
программной системы (фреймворк), предоставляющая функционал для распреде-
ленной работы по программированию роботов. ROS (под названием Switchyard)
была первоначально разработана в 2007 году в Лаборатории искусственного интел-
лекта Стэнфордского университета.
При разработке робота обычно приходится реализовывать свою архитектуру, свой
протокол обмена сообщениями, драйвер пульта управления, логику навигации и пр.
И даже если имеется возможность использовать для этих задач различные готовые
библиотеки, то все равно остается серьезная проблема — объединить их для робота
в единую систему. Разработчики ROS позиционируют свою систему именно как
операционную — для программ взаимодействия и управления роботом ROS играет
роль операционной системы, предоставляя программам управления свои интерфей-
сы, библиотеки и готовые приложения. ROS работает под уже готовой OC (Ubuntu
Linux), в которой реализует свой дополнительный слой абстракции — конкретно
для управления роботами. ROS обеспечивает стандартные службы операционной
системы, такие как аппаратную абстракцию, низкоуровневый контроль устройств,
реализацию часто используемых функций, передачу сообщений между процессами
и управление пакетами.
ROS развивается в двух направлениях: в качестве уже описанной здесь операцион-
ной системы и в виде поддерживаемых пользователями пакетов (ros-pkg), органи-
зованных в наборы (
стеки), реализующие различные функции робототехники. Так,
ROS содержит вспомогательные библиотеки и приложения для роботов: преобра-
зование систем координат, утилиты для визуализации данных и распознавания объ-
ектов, стек навигации и многое другое. Реализованы для ROS и драйверы, позво-
ляющие единым образом работать со многими устройствами: джойстиками, уст-
ройствами GPS, камерами, лазерными дальномерами и пр.
ROS основан на архитектуре
графов, где обработка данных происходит в узлах,
которые могут получать и передавать между собой сообщения (структурированные
Do'stlaringiz bilan baham: |