Thymio Todoterreno

Puedes montar orugas en las ruedas de Thymio para que pueda enfrentar obstáculos más importanes. Este es un ejemplo del montaje:

global-tout-terrain.jpg
frontal.jpg
side-view.jpg

A continuación, te presentamos un ejemplo en el que se programa al robot para detectar pendientes y emitir una alarma en caso de peligro:

En el código se calcula el promedio de 4 medidas de aceleración de los acelerómetros 0 y 1. Los cuatro valores se suman (en sumacc0 y sumacc1) y se multiplican por ellos mismos para evitar valores negativos. Luego se obtiene pendiente, que toma valores en función de la inclinación del robot. Puedes probar el código y monitorear pendiente mientras inclinas el robot. El color de Thymio se ajusta de acuerdo al valor que toma pendiente y la variable danger_level toma el valor de 0, 1, 2 ó 3, que de alguna manera, representa el nivel de riesgo de vuelco que corre el robot. En el nivel 3 se emite una señal sonora guardada en la tarjeta micro-SD, bajo el nombre de p3.raw. Algunos sonidos de demostración y que puedes utilizar, se encuentran en un archivo zip, aquí.

var accTampon0[4] = 0,0,0,0
var accTamponPos0 = 0
var accTampon1[4] = 0,0,0,0
var accTamponPos1 = 0
var sumacc0
var sumacc1
var pendiente
var danger_level
var r
var g
var b=0

onevent acc
# verificación de la inclinación promediando 4 valores
  accTampon0[accTamponPos0] = acc[0]-3
  accTamponPos0 = (accTamponPos0 + 1) % 4
  sumacc0 = accTampon0[0] + accTampon0[1] + accTampon0[2] + accTampon0[3]
  accTampon1[accTamponPos1] = acc[1]-2
  accTamponPos1 = (accTamponPos1 + 1) % 4
  sumacc1 = accTampon1[0] + accTampon1[1] + accTampon1[2] + accTampon1[3]

  pendiente = sumacc0*sumacc0 + sumacc1*sumacc1

  if pendiente<500 then
      danger_level = 0
      g=32
      r=0
  else 
    if pendiente<1000 then
      danger_level = 1
      r=10
      g=10
    else 
      if pendiente<1500 then
           danger_level = 2
          r=10
          g=10
      else 
        when pendiente<2000 do
             danger_level = 3
             call sound.play(danger_level)
            r=32
            g=0
        end 
      end
    end
  end

  call leds.top(r,g,b)

Utilizando el siguiente código, se emiten otras señales de alarma, en situaciones de nivel de peligro 1 y 2 se emiten otras señales de alarma:

onevent temperature # cada segundo
  if danger_level != 0 then
    if danger_level != 3 then
      call sound.play(danger_level)
    end
  end

Finalmente, para hacer que el robot se desplace, pudes utilizar el siguiente código:

onevent button #gestion del comando
  when button.forward==1 do
    motor.left.target=200 
    motor.right.target=200 
  end

  when button.center==1 do 
    motor.left.target=0 
    motor.right.target=0 
  end

  when button.backward==1 do 
    motor.left.target=-200 
    motor.right.target=-200 
  end

  when button.left==1 do 
    motor.left.target=-200 
    motor.right.target=200 
  end

  when button.right==1 do 
    motor.left.target=200 
    motor.right.target=-200
  end

Combinando todo (no olvidar los archivos de sonido en la tarjeta SD) resulta en el siguiente comportamiento:

También podemos incluír otras funciones, como por ejemplo la detección de obstáculos infranqueables, o la desaceleración en función de la proximidad de los obstáculos.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License