Официальный сайт компании Arduino по адресу arduino.cc
Езда за объектом
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 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, спасибо