[MOC] NXT Killough Platform

Mindstorms, WeDo, Lego Digital Desinger, Stud.io

Moderatorzy: Mod Team, Mod Team

Autor
Wiadomość
Awatar użytkownika
Sariel
VIP
Posty: 5418
Rejestracja: 2007-03-28, 08:16
Lokalizacja: Warszawa
brickshelf: Sariel
Kontakt:

 

[MOC] NXT Killough Platform

#1 Post autor: Sariel »

Obrazek

Ot, platforma Killougha w wersji powered by NXT. Nic nowego, zbudowałem jedną pięć lat temu, tylko tamta była na samych PFach i sterowanie trzema silnikami jednocześnie wymagało małpiej zręczności. Na starość zrobiłem się wygodny, więc siadłem z padem do Xboxa i pogrzebałem w RobotC tak, żeby ruchy joysticka przekładały się na ruch platformy. Cały kod poniżej. W teorii działa jak powinno, w praktyce trochę całym tym biznesem trzęsie bo jeździ to na omnikołach z 12 rolkami w każdym, co daje 30 stopni odstępu między jedną rolką a drugą. Stąd czasem ciężko nad tym zapanować, szczególnie przy jeździe w bok - mam wrażenie, że jest to kwestia nierównego obciążenia omnikół, do którego dokłada się wspomniana trzęsionka.

Podziękowanie dla 3doma za użyczenie baterii do NXT. Nie taki był plan wykorzystania, ale przynajmniej będzie wstrząśnięta, nie zmieszana ;)

Kod:

Kod: Zaznacz cały

#include "JoystickDriver.c" 
 
task main() 
{ 
  bMotorReflected[motorA] = true; 
  bMotorReflected[motorB] = true; 
  bMotorReflected[motorC] = true; 
  while(true) 
  { 
    getJoystickSettings(joystick); 
    int goY = joystick.joy1_y1 /20; 
    int goX = joystick.joy1_x1 /20; 
    wait1Msec(100); 
 
      if (joystick.joy1_x2 == 126) // rotate left 
      { 
        motor[motorA] = 100; 
        motor[motorB] = 100; 
        motor[motorC] = 100; 
      } 
      else if (joystick.joy1_x2 == -128) // rotate right 
      { 
        motor[motorA] = -100; 
        motor[motorB] = -100; 
        motor[motorC] = -100; 
      } 
      else if (goY == 0 && goX == 0) 
      { 
        motor[motorA] = 0; 
        motor[motorB] = 0; 
        motor[motorC] = 0; 
      } 
      else 
      { 
        motor[motorA] = (goY - goX) * -40; 
        motor[motorB] = goX * -20; 
        motor[motorC] = (goY + goX) * 40; 
      } 
 
    nxtDisplayCenteredTextLine(0, "BATTERY: %3.1fV", nImmediateBatteryLevel / (float) 1000); 
    nxtDisplayTextLine(2, "Y1: %d", goY); 
    nxtDisplayTextLine(3, "X1: %d", goX); 
  } 
}
Galeria: http://www.brickshelf.com/cgi-bin/gallery.cgi?f=535886
Kilka fotek:
Obrazek Obrazek Obrazek Obrazek Obrazek

I film z obowiązkową wkładką mięsną:
[youtube]http://www.youtube.com/watch?v=f8FuMf6R9P0[/youtube]
Ostatnio zmieniony 2013-11-04, 00:22 przez Sariel, łącznie zmieniany 2 razy.

ODPOWIEDZ