Езда за объектом
- Войдите на сайт для отправки комментариев
Пнд, 13/04/2015 - 18:10
Езда за объектом.Ща все распишу
Имеем:
Комната, какой-то спецальный неподвижный объект, arduino, тележка, мотор шилд и все-все-все(есть алгоритм который огибает препятствия с помощью УЗ датчика(Arduino и все-все-все едет из китая)).
Нужно:
Ставим робота и он едет по направлению к спецальному неподвижному объекту огибая препятствия с помощью УЗ
и ещё если не трудно проверьти код
#include <Ultrasonic.h>
//Объявляем переменные
char incomingbyte; // переменная для приема данных
//motors A (RIGHT)
int R_A_IA = 9; // A-IA
int R_A_IB = 10; // A-IB
//motors B (LEFT)
int L_B_IA = 11; // B-IA
int L_B_IB = 12; // B-IB
//Радар
Ultrasonic ultrasonic(5, 6);
//Или 8
//Инициализация переменных
void setup() {
Serial.begin(38400);
//motors RIGHT
pinMode(R_A_IA,OUTPUT);
digitalWrite(R_A_IA, HIGH);
pinMode(R_A_IB,OUTPUT);
digitalWrite(R_A_IB, HIGH);
//motors LEFT
pinMode(L_B_IA,OUTPUT);
digitalWrite(L_B_IA, HIGH);
pinMode(L_B_IB,OUTPUT);
digitalWrite(L_B_IB, HIGH);
}
void go_forward(){
//motors LEFT
digitalWrite(L_B_IA, LOW);
digitalWrite(L_B_IB, HIGH);
//motors RIGHT
digitalWrite(R_A_IA, LOW);
digitalWrite(R_A_IB, HIGH);
}
void go_back(){
//motors LEFT
digitalWrite(L_B_IA, HIGH);
digitalWrite(L_B_IB, LOW);
//motors RIGHT
digitalWrite(R_A_IA, HIGH);
digitalWrite(R_A_IB, LOW);
}
void go_right(){
//motors LEFT
digitalWrite(L_B_IA, LOW);
digitalWrite(L_B_IB, HIGH);
//motors RIGHT
digitalWrite(R_A_IA, LOW);
digitalWrite(R_A_IB, LOW);
}
void go_left(){
//motors LEFT
digitalWrite(L_B_IA, LOW);
digitalWrite(L_B_IB, LOW);
//motors RIGHT
digitalWrite(R_A_IA, LOW);
digitalWrite(R_A_IB, HIGH);
}
void stop_robot(){
//motors LEFT
digitalWrite(L_B_IA, LOW);
digitalWrite(L_B_IB, LOW);
//motors RIGHT
digitalWrite(R_A_IA, LOW);
digitalWrite(R_A_IB, LOW);
}
//Основной цикл программы
void loop() {
float distcm = ultrasonic.Ranging(CM); //измеряем расстояние в см.
if( (distcm<=10)&&(distcm>0) ){//если до препятствия менее 10 см.
stop_robot();
go_right();
go_forward();
//ИЛИ НЕ едем впреред
}
else
{
go_forward();
}
}
Езда за объектом.
...
Ставим робота и он едет по направлению к спецальному неподвижному объекту огибая препятствия с помощью УЗ
Видимо, имеется в виду езда к объекту, то есть поиск и достижение его ? Тогда откуда робот узнает направление на Спецальный Неподвижный Объект (сильно названо, боюсь даже себе представить))), как робот придерживается этого направления ? Уточните пожалуйста решаемую задачу, без этого о приведенном скетче говорить бессмысленно.
имеется в виду езда к объекту, то есть поиск и достижение его
Тогда откуда робот узнает направление на Спецальный Неподвижный Объект? Вот это и хотел спросить.
В общем случае на объект ставится метка/маркер/маячок (световая/цветовая/ИК/звуковая/другая), робот ее обнаруживает и пытается двигаться к ней, постоянно уточняя пеленг. Можно еще объект лазером подсвечивать, но это немного из другой области. В любом случае, задача достаточно сложная, УЗ датчиком не обойдетесь. Разве что если значительно упростить начальные условия, например, движение к точечному источнику света в темной комнате.
Насчет радиомаячка : допустим он посылает сигналы в эфир а робот определяет где он по уровню сигнала вращаещмся датчиком(где выше уровень), только датчик должен быть узко-направленный.
Но можно и движение к точечному источнику света в темной комнате
и ещё если не трудно проверьти код
1. строчки 78 - 79 :
после go_right(); нужна задержка, чтобы дать время для поворота.
2. объезд препятствия подразумевает объезд, а не уход направо.
вот так и считаем сколько нужно сделать поворотов для объезда
zhenious, спасибо