You are on page 1of 16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Jeff McAlvay
jeff@jeffsinventions.com

Autonomous Car - evitacin de obstculos con sensor de ultrasonidos


Como parte de mi proyecto de coche autnomo ( http://jeffsinventions.com/?p=577 ), necesito el coche para evitar los obstculos. Este es un video de mi coche autnomo utilizando datos de los sensores ultrasnicos para elegir el ttulo ms cercano libre de obstculos hacia su destino.

jeffsinventions.com/autonomous-car-obstacle-avoidance/

1/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Bsicamente, un sensor ultrasnico montado en un servo toma mediciones de distancia a un nmero de ngulos y escoge el ngulo libre de obstculos ms cercana a la necesaria para llegar al siguiente punto de paso. Direcciones futuras Antes de que yo estoy satisfecho con la capacidad de evasin de obstculos del coche, tengo que hacer algunas pruebas ms para asegurarse de que se est comportando como se esperaba. Despus de que el coche est en marcha, voy a experimentar con la adicin de cmaras estreo y violn con algoritmos de deteccin de bordes, la visin estereoscpica (cuando se comparan las imgenes de las dos cmaras, las partes, con un montn de diferencias tienden a estar ms cerca, mientras que las partes con ms similitudes tienden a estar ms lejos), y el flujo ptico (mientras se mueve, las cosas que se mueven ms rpido tienden a estar ms cerca y las cosas que se mueven ms lento tienden a estar ms lejos) Para ms detalles,

Qu sensor de proximidad usar? opt por usar un sensor de proximidad ultrasnico. En concreto, he optado por un Parallax PING ( http://www.parallax.com/tabid/768/ProductID/92/Default.aspx ). He aqu por qu no elegir otras tecnologas de sensores: Capacitiva (el rango es slo unos pocos centmetros) Inductivo (el rango es slo unos pocos centmetros) Infra-rojo (luchas en la luz del da) Lser telmetro (caro) Por qu hacer una representacin de 2-D del mundo? Si el coche slo tena una distancia medida de sensor directamente en la parte delantera del coche, tendra que evitar los obstculos por conjetura y la salida sera conducir hasta que ve un obstculo, una copia de seguridad, girar un poco y vuelva a intentarlo hasta que no ve un obstculo. Esto tomara para siempre. Con una representacin 2-D del espacio en frente de ella, el coche puede elegir entre una variedad de direcciones.

jeffsinventions.com/autonomous-car-obstacle-avoidance/

2/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Cmo obtener una representacin de 2-D del mundo? Una opcin sera la de comprar un montn de sensores y variedad de ellos en diferentes ngulos en parte delantera del coche, pero sera costoso de lograr cualquier resolucin respetable con este enfoque. Una opcin ms atractiva sera la de montar un sensor en un servo y recoger lecturas mientras que el sensor gira. Afortunadamente, hay un kit para montar el sensor de ultrasonidos en un servo Sin embargo, este kit se ha diseado para Boe Bot de Parallax, no es mi coche de RC. Por lo tanto, me quit el parachoques delantero de mi coche RC, mecanizadas un soporte para montar el servo desde un ngulo de aluminio, y se atornilla el soporte en los agujeros donde el tope era.

Qu resolucin? Una de las preguntas que averiguar es cuntas mediciones Quiero que el sensor para tomar en una sola pasada. Si tomo demasiadas mediciones, el pase ser lenta y el coche podra estrellarse a la espera de que el sensor de completar su pase. Si tomo a algunas mediciones, el coche podra no detectar obstculos o rutas disponibles. Eleg 36 mediciones por pase, porque pareca que encontrar el equilibrio entre estos dos extremos. Tengo una buena resolucin, pero soy capaz de completar un pase en menos de un segundo.

jeffsinventions.com/autonomous-car-obstacle-avoidance/

3/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Qu distancia umbral? Otra equilibrio que debe lograrse es la eleccin de la distancia por debajo del cual el coche clasifica algo como un obstculo. Si la distancia es demasiado corta, el coche podra ser incapaz de detenerse antes de chocar contra algo. Si la distancia es demasiado lejos, el coche innecesariamente podra descartar caminos viables.

Cmo voy a alimentar el servo y el sensor? Una gua de cableado para el sensor ultrasnico sugiere el sensor puede accionar por el Arduino ( http://arduino.cc/en/Tutorial/Ping ). La biblioteca de servo de Arduino tambin sugiere que el servo ser alimentado por el Arduino ( http://arduino.cc/it/Reference/Servo ). Sin embargo, cuando trat de encender ambos dispositivos utilizando el Arduino, el sensor report datos errneos y el servo se portaba mal. Para solucionar el problema, me encontr con dos de los dispositivos de apagado de las bateras de los coches de RC, la intensificacin de la tensin hacia abajo usando un divisor de tensin. Gracias a DuaneB del foro Arduino ( http://arduino.cc/forum/index.php/topic, 102369.msg767877.html # msg767877 ) por sealar que el poder inadecuada fue la causa del problema.

Qu algoritmo de evitacin de obstculos usar? El coche va en constante ciclo a travs de los siguientes pasos: Barrer un sensor de proximidad una y de nuevo al frente del coche montndolo en un servo A los 36 ngulos a lo largo del camino, la distancia ultrasnico sensor mide Filtrar los ngulos en que la distancia sea inferior a cuatro pies De los ngulos restantes, elegir el ngulo ms cercano al punto de recorrido Uno de los retos que me encontr mientras configurar esto fue que el coche pareca no llegar nunca al final de cada pasada para decidir a dnde ir. Dos cambios fijos este problema: dej de mostrar todas las mediciones en el Serial Monitor acelerado la velocidad de transferencia de serie desde 9600 a 11520 baudios. Gracias a dxw00d y Nick Gammon del foro Arduino ( http://arduino.cc/forum/index.php/topic, 102369.msg768401.html # msg768401 ) para estas revisiones.
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 4/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Esquema de conexiones

Cdigo https://github.com/JeffsInventions/autonomouscar/blob/master/obstacleavoidance.ino Esta entrada fue publicada en Sistemas Embebidos , Proyectos , Vehculos (autnomo y no) en07 de mayo 2012 [http://jeffsinventions.com/autonomous-car-obstacle-avoidance/] .

7 thoughts on " Autnoma coche - evitacin de obstculos con sensor de ultrasonidos "

jeffsinventions.com/autonomous-car-obstacle-avoidance/

5/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Pingback: Autonomous Car - Resumen | Inventos de Jeff

Andrs
10 de octubre 2012 a las 21:59

Esto es genial Jeff. Soy nuevo en la programacin y estoy tratando de hacer un coche robot que localizar un obstculo y avanzar hacia ella y luego se detiene a una distancia designada, lejos. No entiendo lo que cada parte del cdigo no gira, as que no puede determinar qu partes del cdigo que tengo que modificar y lo que he de cdigo en localizar y trasladar a un objeto. Que o bien puede ayudarme a entender esas porciones de cdigo bien o reescritas proporciono las secciones? Tambin estoy buscando a su proyecto de direccin y aceleracin para ver en qu se diferencia de la ma. Ya tengo el cdigo de trabajo que va a localizar y trasladar a un objeto, pero es desigual y parece temperamental, as que estoy tratando de hacer lo mejor. Gracias, Andrew

jeff

Mensaje autor

21 de octubre 2012 a las 23:50

Hola Andrs, Dado que el cdigo era difcil de leer aqu, lo puse en github: https://github.com/JeffsInventions/autonomouscar/blob/master/obstacleavoidance.ino . En esencia, el cdigo tiene las siguientes partes: 1) Crear una serie de ngulos y distancias barriendo el servo a la izquierda y la derecha y con las medidas de asimilacin sensor de ultrasonidos en el camino (lneas 155-180). Los ngulos se miden en anchuras de impulso (microsegundos) enviados al servo (800 es el ms a la izquierda; 1700 es la
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 6/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

ms a la derecha). Las distancias son en pulgadas. Cuando se hace, tendr (sin las unidades): (800US, 48 "), (810us, 24") ... (1700,50 ") 2) Mira a travs de la gama de ngulos y distancias y, cuando la distancia es inferior a la distancia de obstculos (minimumDistance), ajuste la distancia al 0 (lneas 64-95). En el ejemplo, la matriz se convierte en: (800US, 48 "), (810us, 0") ... (1700us, 50 ") 3) Averiguar qu distancia cada ngulo es desde el ngulo del coche se supone que se va (lneas 96-119). Digamos que el coche se supone que debe estar pasando el ngulo que la correspondencia a un ancho de pulso de 900 nosotros, la matriz se convierte en: (800US, 48 ", 100us), (810us, 0", 90US) ... (1700us, 50 ", 800US) 4) Mire a travs de la matriz para encontrar el ngulo y sin un obstculo (distancia! = 0 "), que es la ms cercana a la direccin que el coche se supone que se va (lneas 120-137). En el ejemplo, devolvera: 800US 5) Si no hubiera ngulos sin obstculo, devuelva 0 (lneas 138-147). Si usted quiere que vaya hacia un obstculo, que iba a cambiar el paso 2. En lugar de establecer la distancia a 0 cuando hay un obstculo, debe ajustar la distancia a 0 cuando no hay un obstculo. Dicho de otra manera, la lnea 67 cambia de esto: if (directionsAndDistances [i] [1]> = minimumDistance) a esto: if (directionsAndDistances [i] [1] <= minimumDistance)

jeffsinventions.com/autonomous-car-obstacle-avoidance/

7/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

Si el problema estn teniendo con su movimiento desigual implica el robot oscilando hacia atrs y adelante, usted podra considerar el control PID. Brett Beauregard (el autor de la biblioteca PID Arduino) ha hecho una escritura agradable para arriba en l: http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/. Si no es oscilante, puede publicar su cdigo y yo podemos tener una mirada en ella.

shadi
22 de junio 2013 a las 10:11 am

por favor me ayude >>> hago una muestra de coches sin conductor con 2 motores de corriente continua y yo uso 4 sensor de ping y me hago un control sobre el movimiento del coche usando sensores solamente! ahora el coche puede evitar cualquier obstculo ... pero yo necesitar el coche se mueve recto y si se enfrentan a ningn obstculo ... es evitarlo y volver a la lnea recta que utilizo brjula HMC883L ... y me sale la lectura de la brjula ... ahora cmo puedo utilizar la lectura de la brjula para esto?? usted y lo siento por las gracias mi mala Ingls ... el cdigo hasta ahora: # Include # include # include # include xbee NewSoftSerial (17, 16) / / RX, TX NewSoftSerial GPS (19,18); HMC5883L del comps; gps TinyGPS;
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 8/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

void gpsdump (TinyGPS y gps); bool feedgps (); getGPS void ( ); largo lat, lon, aos, meses, das, horas, segundos, minutos, flotar LAT, LON, int error = 0; const int pingPin1 = 3; const int pingPin2 = 4; const int pingPin3 = 5; const int pingPin4 = 6; int ledPin = 13; int M1 = 7; int M2 = 8; int E1 = 9; int E2 = 10; int E3 = 11; int E4 = 12; largo cm1 cm2, cm3, cm4; void setup ( ) { GPS.begin (9600); Serial.begin (9600); Serial.println ("Inicio de la interfaz I2C."); Serial.begin (9600); Serial.println ("Arduino comenz a enviar a travs de bytes XBee"); / / establecer la velocidad de datos para el puerto SoftwareSerial xbee.begin (9600); Serial.begin (9600); pinMode (M1, OUTPUT); pinMode (M2, OUTPUT); Serial.begin (9600);
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 9/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

pinMode (ledPin, SALIDA ); / / Establecer el pin LED como salida Wire.begin (); Serial.println ("La construccin de nueva HMC5883L"); brjula = HMC5883L (); / / Construir un nuevo HMC5883 brjula. Serial.println ("Escala de ajuste de + / - 1,3 Ga"); error = compass.SetScale (1.3); / / Establecer la escala de la brjula. if (error = 0!) / / Si hay un error, imprimir hacia fuera. Serial.println (compass.GetErrorText (error)); Serial.println (". Ajuste del modo de medicin a continua"); error = compass.SetMeasurementMode (Measurement_Continuous); / / Establecer el modo de medicin de Continuo if (error = 0!) / / Si hay un error, imprimirlo. Serial.println (compass.GetErrorText (error)); } void loop () { ping1 (); retardo (0); Ping2 (); retardo (0); ping3 (); retardo (0); ping4 (); retardo (0); h ();

jeffsinventions.com/autonomous-car-obstacle-avoidance/

10/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

MagnetometerRaw prima = compass.ReadRawAxis (); MagnetometerScaled escala = compass.ReadScaledAxis (); int MilliGauss_OnThe_XAxis = scaled.XAxis ;/ / (o eje Y, o ZAXIS) flotar partida = atan2 (scaled.YAxis, scaled.XAxis); flotar declinationAngle = 0,0626; encabezamiento + = declinationAngle; if (partida 2 * PI) ttulo - = 2 * PI; flotador headingDegrees = partida * 180/M_PI; Salida (partida, headingDegrees); / / enviar caracteres a travs XBee a otros XBee conectado al Mac / / a travs de cable USB xbee.print ("\ tHeading: \ t"); xbee.print (partida); xbee.print ("Radianes \ t "); xbee.print (headingDegrees); xbee.println ("Grados \ t"); largo lat, lon; fix_age largo sin signo, hora, fecha, velocidad, rumbo, caracteres de largo sin firmar; frases cortas sin firmar, failed_checksum; / / recupera + / - lat / long en 100000ths de grado gps.get_position (& lat, y lon, y fix_age); / / hora en el formato hh: mm: ss, fecha dd / mm / aa
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 11/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

gps.get_datetime (y la fecha, y la hora, Y fix_age); ao = date% 100; mes = (fecha / 100)% 100; das = Fecha / 10000; horas = tiempo / 1000000; minutos = (tiempo / 10000)% 100; segundo = (tiempo / 100)% 100 ; Serial.print ("Fecha:"); Serial.print (aos); Serial.print ("/"); Serial.print (meses); Serial.print ("/"); Serial.print (das); Serial.print (":: Tiempo:"); Serial.print (horas); Serial.print (":"); Serial.print (minutos); Serial.print (":"); Serial.println (segundos) ; getGPS (); Serial.print ("Latitude:"); Serial.print (LAT/100000, 7); Serial.print (":: Longitud:"); Serial.println (LON/100000, 7); XBee. print ("Latitud:"); xbee.print (LAT/100000, 7); xbee.print (":: Longitud:"); xbee.println (LON/100000, 7); } getGPS void () { newdata bool = false; Principio del disco = millis (); / / Cada 1 segundos, imprimimos una actualizacin
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 12/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

mientras (millis () - comienzan 150 && cm2> 150) { digitalWrite (M1, HIGH); digitalWrite (M2 , LOW); analogWrite (E1, 175) / / PWM de control de velocidad analogWrite (E2, 0); / / PWM de control de velocidad de retardo (0); } ms { if (cm3> 55) {digitalWrite (M1, HIGH); digitalWrite (M2, HIGH); analogWrite (E1, 150) / / PWM de control de velocidad analogWrite (E2, 0); / / PWM de control de velocidad analogWrite (E3, 0); / / PWM de control de velocidad analogWrite (E4, 255); / / PWM de control de velocidad } ms { if (cm4> 55) {digitalWrite (M1, HIGH); digitalWrite (M2, HIGH); analogWrite (E1, 150) / / PWM de control de velocidad analogWrite (E2, 0) / / PWM de control de velocidad analogWrite (E3, 255) / / PWM de control de velocidad analogWrite (E4, 0); / / PWM de control de velocidad } ms { digitalWrite (M1, HIGH);
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 13/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

digitalWrite (M2, LOW); analogWrite (E1, 0) / / PWM de control de velocidad analogWrite (E2, 255) / / PWM de control de velocidad analogWrite (E3, 0); / / PWM de control de velocidad analogWrite (E4, 0); / / PWM de control de velocidad }}} } void salida (ttulo, flotador headingDegrees) { Serial.print ("\ tHeading: \ t"); Serial.print (partida); Serial.print ("Radianes \ t"); Serial.print (headingDegrees); Serial.println ("Grados \ t"); }

Jeff
25 de junio 2013 a las 10:24 am

Hola Shadi, Usted puede utilizar este modelo (esto es pseudo-cdigo): si se detecta obstculo, entonces evitarlo (utilizando el cdigo que ya tiene)

jeffsinventions.com/autonomous-car-obstacle-avoidance/

14/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

ms, utilizar esta biblioteca de control PID ( http://playground.arduino.cc/Code/PIDLibrary ) de tal manera que el punto de referencia es la direccin que usted define como recta, la entrada es la direccin en la que se lee en el comps, y la salida es el ngulo de direccin. PID es un esquema de control que tiene como objetivo minimizar el error entre un valor deseado (por ejemplo, la temperatura que desea en una habitacin) y un valor de medicin (por ejemplo, la temperatura actual de la habitacin), mediante el control del grado en el cual se modifica el sistema (por ejemplo, mediante la ejecucin de un refrigerador a 50%). He aqu un buen ejemplo de cmo utilizar la biblioteca PID: http://playground.arduino.cc//Code/PIDLibaryBasicExample

normando
24 de octubre 2013 a las 1:09 am

Buen trabajo que has hecho. pero yo tambin quiero construir evasin de obstculos mediante sensores de ultrasonidos y PIC. cual es el mejor algoritmo que puedo usar. Por ahora no estoy pensando en alcanzar una meta. Evitar obstculos Only. Por favor, aydame.

Jeff
24 de octubre 2013 a las 9:06 am

Hola Norman, Un enfoque ingenuo es: -montar un sensor de ultrasonido en un servo tal que, para cada ngulo, usted sabe qu tan lejos est el objeto ms cercano se -elegir una gama de ngulos que sera en el camino del robot si continuaba recto (por ejemplo, si el sensor barre 180 grados, nada es entre 60 grados y 120 grados)
jeffsinventions.com/autonomous-car-obstacle-avoidance/ 15/16

10/01/14

Autonomous Car - evitacin de obstculos con sensor ultrasnico | Jeff McAlvay

-identificar un umbral de distancia de un obstculo (por ejemplo, si algo es menos de 1 metro de distancia, empezar a evitar) -si se detecta un obstculo (definida como un objeto entre 60 y 120 grados y menos de 1 metro de distancia), entonces el robot retrocede un pie, dirige un par de grados y luego va por delante. Si quieres profundizar ms en el tema, debes revisar Sebastian Thrun de (quien dirigi el equipo que gan el primer coche Autnoma DARPA Grand Challenge) curso acerca de cmo desarrollar un coche autnomo, en particular, las conferencias de localizacin: https:// www.udacity.com/wiki/cs373

Seguir Siga Jeff McAlvay Recibe cada nuevo post en este blog entregado a su bandeja de entrada. nete a otros seguidores: Enter email address
Inscrbeme!

jeffsinventions.com/autonomous-car-obstacle-avoidance/

16/16