Baldroid v3 balansera Robot med Actobotics delar och IOIO-OTG (12 / 12 steg)

Steg 12: Main koden...



Här är den viktigaste koden... Jag kan skicka en ZIP-fil med hela Java projektet på begäran... Skicka ansökan till joebotics

MAIN-KOD:

paketet ioio.examples.simple;

BALANCE ACT 4 + MOGA 2

import ioio.lib.api.PwmOutput;

import ioio.lib.api.exception.ConnectionLostException;

import ioio.lib.util.BaseIOIOLooper;

import ioio.lib.util.IOIOLooper;

import ioio.lib.util.android.IOIOActivity;

import android.os.Bundle;

import android.widget.TextView;

import android.hardware.Sensor;

import android.hardware.SensorEvent;

import android.hardware.SensorEventListener;

import android.hardware.SensorManager;

import android.widget.SeekBar;

import com.bda.controller.Controller;

import com.bda.controller.ControllerListener;

import com.bda.controller.KeyEvent;

import com.bda.controller.MotionEvent;

import com.bda.controller.StateEvent;

allmän klass IOIOSimpleApp sträcker sig IOIOActivity implementerar SensorEventListener {

privat SensorManager mSensorManager;

privat Sensor mRotVectSensor;

privat float [] orientationVals = ny float [3].

privat float [] mRotationMatrix = ny float [16].

privat TextView textView_Current_Angle;

privat TextView textView_Tilt_adjuster;

privat TextView textView_kP_adjuster;

privat TextView textView_kI_adjuster;

privat TextView textView_kD_adjuster;

privat SeekBar seekBar_Tilt_adjuster;

privat SeekBar seekBar_kP_adjuster;

privat SeekBar seekBar_kI_adjuster;

privat SeekBar seekBar_kD_adjuster;

Controller mController = null;

sista ExampleControllerListener mListener = ny ExampleControllerListener();

sista ExamplePlayer mPlayer = nya ExamplePlayer (0.0f, 1.0f, 0.0f);

public void onCreate (bunt savedInstanceState) {

mController = Controller.getInstance(this);

mController.init();

mController.setListener (mListener, null);

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);

mRotVectSensor=mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);

textView_Current_Angle = (TextView) findViewById(R.id.TextView_CurrentAngle_Value);

textView_Tilt_adjuster = (TextView) findViewById(R.id.TextView_Tilt_adjusterValue);

seekBar_Tilt_adjuster = (SeekBar) findViewById(R.id.SeekBar_Tilt_adjuster);

textView_kP_adjuster = (TextView) findViewById(R.id.TextView_kP_adjusterValue);

seekBar_kP_adjuster = (SeekBar) findViewById(R.id.SeekBar_kP_adjuster);

textView_kI_adjuster = (TextView) findViewById(R.id.TextView_kI_adjusterValue);

seekBar_kI_adjuster = (SeekBar) findViewById(R.id.SeekBar_kI_adjuster);

textView_kD_adjuster = (TextView) findViewById(R.id.TextView_kD_adjusterValue);

seekBar_kD_adjuster = (SeekBar) findViewById(R.id.SeekBar_kD_adjuster);

seekBar_Tilt_adjuster.setProgress(500);

seekBar_kP_adjuster.setProgress(0);

seekBar_kI_adjuster.setProgress(0);

seekBar_kD_adjuster.setProgress(0);

enableUi(false);

}

allmän klass ExampleControllerListener implementerar ControllerListener {

public void onKeyEvent (KeyEvent händelse) {

Switch (event.getKeyCode()) {

fall KeyEvent.KEYCODE_BUTTON_X:

seekBar_Tilt_adjuster.setProgress(seekBar_Tilt_adjuster.getProgress() - 2);

bryta;

fall KeyEvent.KEYCODE_BUTTON_B:

seekBar_Tilt_adjuster.setProgress(seekBar_Tilt_adjuster.getProgress() + 2);

bryta;

fall KeyEvent.KEYCODE_BUTTON_Y:

seekBar_kP_adjuster.setProgress(seekBar_kP_adjuster.getProgress() + 2);

bryta;

fall KeyEvent.KEYCODE_BUTTON_A:

seekBar_kP_adjuster.setProgress(seekBar_kP_adjuster.getProgress() - 2);

bryta;

fall KeyEvent.KEYCODE_DPAD_UP:

seekBar_kI_adjuster.setProgress(seekBar_kI_adjuster.getProgress() + 2);

bryta;

fall KeyEvent.KEYCODE_DPAD_DOWN:

seekBar_kI_adjuster.setProgress(seekBar_kI_adjuster.getProgress() - 2);

bryta;

fall KeyEvent.KEYCODE_DPAD_RIGHT:

seekBar_kD_adjuster.setProgress(seekBar_kD_adjuster.getProgress() + 2);

bryta;

fall KeyEvent.KEYCODE_DPAD_LEFT:

seekBar_kD_adjuster.setProgress(seekBar_kD_adjuster.getProgress() - 2);

bryta;

}

}

public void onMotionEvent (MotionEvent händelse) {

mPlayer.mAxisX = event.getAxisValue(MotionEvent.AXIS_X);

mPlayer.mAxisY = event.getAxisValue(MotionEvent.AXIS_Y);

mPlayer.mAxisZ = event.getAxisValue(MotionEvent.AXIS_Z);

mPlayer.mAxisRZ = event.getAxisValue(MotionEvent.AXIS_RZ);

}

public void onStateEvent (StateEvent händelse) {

Switch (event.getState()) {

fall StateEvent.STATE_CONNECTION:

mPlayer.mConnection = event.getAction();

bryta;

}

}

}

allmän klass ExamplePlayer {

statisk slutliga float DEFAULT_SCALE = 4.0f;

statisk slutliga float DEFAULT_X = 0.0f;

statisk slutliga float DEFAULT_Y = 0.0f;

booleska gotPadVersion = false;

Public int mConnection = StateEvent.ACTION_DISCONNECTED;

Public int mControllerVersion = StateEvent.STATE_UNKNOWN;

Public int mButtonA = KeyEvent.ACTION_UP;

Public int mButtonB = KeyEvent.ACTION_UP;

Public int mButtonX = KeyEvent.ACTION_UP;

Public int mButtonY = KeyEvent.ACTION_UP;

Public int DpadUp = KeyEvent.ACTION_UP;

Public int DpadDown = KeyEvent.ACTION_UP;

Public int DpadLeft = KeyEvent.ACTION_UP;

Public int DpadRight = KeyEvent.ACTION_UP;

offentliga flyta mAxisX = 0.0f;

offentliga flyta mAxisY = 0.0f;

offentliga flyta mAxisZ = 0.0f;

offentliga flyta mAxisRZ = 0.0f;

slutliga flyta Herr;

slutliga float mG;

slutliga float mB;

flyta mScale = DEFAULT_SCALE;

flyta mX = DEFAULT_X;

float min = DEFAULT_Y;

offentliga ExamplePlayer (flyta r, flyta g, flyta b) {

Herr = r;

mG = g;

mB = b;

}

}

offentliga klassen Looper utökar BaseIOIOLooper {

privat PwmOutput LeftWheel;

privat PwmOutput RightWheel;

privat PwmOutput LeftArm;

privat PwmOutput RightArm;

privata int currentAngle;

privata int previousAngle;

privata int P = 0;

privata int jag = 0;

privata int D = 0;

privata int PID = 0;

privata int D_delta;

privata int I_delta;

Public int seekbar_tilt_adjuster_value = 500.

privata int seekbar_kP_adjuster_value = 0;

privata int seekbar_kI_adjuster_value = 0;

privata int seekbar_kD_adjuster_value = 0;

public void setup() kastar ConnectionLostException {

LeftArm = ioio_.openPwmOutput (13, 50);

RightArm = ioio_.openPwmOutput (12, 50);

LeftWheel = ioio_.openPwmOutput (10, 100);

RightWheel = ioio_.openPwmOutput (11, 100);

enableUi(true);

}

public void loop() kastar ConnectionLostException, InterruptedException {

seekbar_tilt_adjuster_value = seekBar_Tilt_adjuster.getProgress() - 500.

seekbar_kP_adjuster_value = seekBar_kP_adjuster.getProgress();

seekbar_kI_adjuster_value = seekBar_kI_adjuster.getProgress();

seekbar_kD_adjuster_value = seekBar_kD_adjuster.getProgress();

currentAngle = (Math.round (orientationVals [1] * 100)) + seekbar_tilt_adjuster_value - Math.round(mPlayer.mAxisY*10) - Math.round(mPlayer.mAxisRZ*10);

currentAngle = (Math.round (orientationVals [1] * 100)) + seekbar_tilt_adjuster_value;

D_delta = currentAngle - previousAngle;

I_delta = I_delta + D_delta;

P = (seekbar_kP_adjuster_value * currentAngle) / 2000;

Jag = (seekbar_kI_adjuster_value * I_delta) / 4000;

D = (seekbar_kD_adjuster_value * D_delta) / 4000;

om (jag < -100) {

Jag = -100;

} else om (jag > 100) {

Jag = 100;

// }

PID = P + I + D;

previousAngle = currentAngle;

RightArm.setPulseWidth (1590 - Math.round(mPlayer.mAxisY*900));

LeftArm.setPulseWidth (1540 + Math.round(mPlayer.mAxisRZ*900));

RightWheel.setPulseWidth (1500 + Math.round(mPlayer.mAxisY*35) + PID);

LeftWheel.setPulseWidth (1502 - Math.round(mPlayer.mAxisRZ*35) - PID);

LeftWheel.setPulseWidth (1502 - PID);

RightWheel.setPulseWidth(1500 + PID);

setText_current_angle(Integer.toString(currentAngle));

setText_tilt_adjuster(Integer.toString(seekbar_tilt_adjuster_value));

setText_kP_adjuster(Integer.toString(seekbar_kP_adjuster_value));

setText_kI_adjuster(Integer.toString(seekbar_kI_adjuster_value));

setText_kD_adjuster(Integer.toString(seekbar_kD_adjuster_value));

setText_current_angle(Integer.toString(currentAngle));

setText_tilt_adjuster(Integer.toString(PID));

setText_kP_adjuster(Integer.toString(P));

setText_kI_adjuster(Integer.toString(I));

setText_kD_adjuster(Integer.toString(D));

}

public void disconnected() {

enableUi(false);

}

}

skyddade IOIOLooper createIOIOLooper() {

returnera nya Looper();

}

privata void enableUi (slutliga booleska aktivera) {

runOnUiThread (nya Runnable() {

public void run() {

}

});

}

privata void setText_current_angle (sista strängen str) {

runOnUiThread (nya Runnable() {

public void run() {

textView_Current_Angle.setText(str);

}

});

}

privata void setText_tilt_adjuster (sista strängen str) {

runOnUiThread (nya Runnable() {

public void run() {

textView_Tilt_adjuster.setText(str);

}

});

}

privata void setText_kP_adjuster (sista strängen str) {

runOnUiThread (nya Runnable() {

public void run() {

textView_kP_adjuster.setText(str);

}

});

}

privata void setText_kI_adjuster (sista strängen str) {

runOnUiThread (nya Runnable() {

public void run() {

textView_kI_adjuster.setText(str);

}

});

}

privata void setText_kD_adjuster (sista strängen str) {

runOnUiThread (nya Runnable() {

public void run() {

textView_kD_adjuster.setText(str);

}

});

}

public void onSensorChanged (SensorEvent händelse)

{

IF(Event.sensor.getType()==sensor.TYPE_ROTATION_VECTOR)

{

SensorManager.getRotationMatrixFromVector(mRotationMatrix,event.values);

SensorManager.remapCoordinateSystem (mRotationMatrix,SensorManager.AXIS_X, SensorManager.AXIS_Z, mRotationMatrix);

SensorManager.getOrientation (mRotationMatrix, orientationVals);

orientationVals[1]=(float)Math.toDegrees(orientationVals[1]);

seekBar_kD_adjuster.setProgress(Math.round((orientationVals[1]*4)+500));

}

}

public void onAccuracyChanged (Sensor sensor, int noggrannhet) {

}

skyddade void onResume() {

super.onResume();

registrera den här klassen som avlyssnare för orientering och

accelerationsmätare sensorer

mSensorManager.registerListener (detta,

mRotVectSensor,

10000);

mController.onResume();

mPlayer.mConnection = mController.getState(Controller.STATE_CONNECTION);

mPlayer.mControllerVersion = mController.getState(Controller.STATE_CURRENT_PRODUCT_VERSION); Få styrenhet version

mPlayer.mButtonA = mController.getKeyCode(Controller.KEYCODE_BUTTON_A);

mPlayer.mButtonB = mController.getKeyCode(Controller.KEYCODE_BUTTON_B);

mPlayer.mButtonX = mController.getKeyCode(Controller.KEYCODE_BUTTON_X);

mPlayer.mButtonY = mController.getKeyCode(Controller.KEYCODE_BUTTON_Y);

mPlayer.DpadUp = mController.getKeyCode(Controller.KEYCODE_DPAD_UP);

mPlayer.DpadDown = mController.getKeyCode(Controller.KEYCODE_DPAD_DOWN);

mPlayer.DpadLeft = mController.getKeyCode(Controller.KEYCODE_DPAD_LEFT);

mPlayer.DpadRight = mController.getKeyCode(Controller.KEYCODE_DPAD_RIGHT);

mPlayer.mAxisY = mController.getAxisValue(Controller.AXIS_Y);

mPlayer.mAxisRZ = mController.getAxisValue(Controller.AXIS_RZ);

}

skyddade void onPause() {

avregistrera lyssnaren

super.onPause();

mSensorManager.unregisterListener(this);

mController.onPause();

}

skyddade void onDestroy() {

mController.exit();

super.onDestroy();

}

}

// ----------------- ROBOT DIAGRAM ----------------------------- //

//

// _________

// | Främre |

// | Inför |

// | Telefon |

// ----------

// | |

// =========

LeftArm = 13 || ===| |===|| RightArm = 12

// || ===| |===||

// || | | ||

// || | | ||

// | |

// | |

// || | | ||

LeftWheel = 10 || =============|| RightWheel = 11

// || ||

//

//

Se Steg
Relaterade Ämnen

Enkla objekt avoider robot med Actobotics Runt Rover Peewee chassi och en Arduino

Det finns många sätt att bygga en robot, från början ett kit, ett färdigt system eller en kombination av dessa metoder. Vägen tar vi här kommer att vara mestadels från ett kit och andra objekt som en Arduino styrenhet, motorn förarens och sensorer fr...

SainSmart InstaBots upprätt Rover (själv balansera Robot med Arduino)

Upprätt Rover är en självbalanserande robot som ritades av SainSmart. De verkligen gjort det enkelt. Som ni ser, finns det bara 8 ledningar på robot och 8 ledningar på handkontrollen. Så låt oss ta reda på hur det fungerar!DELAR I RUTAN3 x Potentiome...

IoT: Raspberry Pi Robot med Video Streamer och Pan/Tilt kamera fjärrkontroll över internet

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar om SAKERNAS INTERNET och AUTOMATION tävlingar. Tack så mycket! ;-)Detta är en andra del av min föregående Intructable: IoT - kontrollera en Raspberr...

Verktyg arrangören - gjorda med 3d delar och EGT trattar

För att förklara det först, EGT trattar i detta fall är inte en viss person, det betyder bara en huvudsaklig del av detta projekt:"Apelsinjuice tratten"Tratten själv är en del av apelsinjuice flaskan gjorda av plast och får släppa in i pappersko...

Styra din Robot med en Wii Nunchuck (och en Arduino)

efter bär själv spela Wii boxning jag måste tänka vore det inte bra om jag kunde använda detta för att styra min robot, (ser att min vänstra hand).Titta runt på internet hittade jag en uppsjö av människor som gör liknande saker, (länkar till alla bar...

Kontrollera en Roomba robot med Arduino och Android

(Om du gillar detta Instructable, glöm inte att rösta på den - ovan: högra hörnet flaggan. Det tävlar på AUTOMATION tävling. Tack så mycket! ;-)Som en av robotteknik tävling 2016 vinnarna här på Instructables fick jag som pris en iRobot Roomba Create...

Raspberr Pi Robot-en Hybrid Robot med Advance funktioner

En robot kan inte skada en människa eller genom passivitet, tillåter en människa att komma till skada. En robot måste lyda order som ges av människor utom där sådana order skulle strida mot den första lagen. En robot måste skydda sin egen existens so...

Arduino-baserad rad efterföljare robot med hjälp av Pololu kvart-8RC line sensor

uppdatering FEB 2012: denna guide är med på Adafruits blogghttp://www.adafruit.com/blog/2012/02/14/Arduino-based-line-Follower-robot/Detta är Faz3a II, min första linje-efter roboten, vilket jag hoppas också att använda för labyrint-lösa. Jag använde...

Lägga till Internet-kontroll i Raspberry Pi Robot med Runmyrobot.com

Hur dela din Robot med världen och låta andra människor spela med den med runmyrobot.com. Denna webbplats beta-testning men det bör fungera. Om du har några frågor, låt oss veta genom att publicera på webbplatsen Disqus sida.BTW, måste du ansluta din...

Grundläggande raden efter Robot med Arduino

09/07/2015Det har varit några år eftersom vi Ursprungligen postat denna grundläggande linje följande Robot med Arduino handledning, och det verkar så många människor tyckte att det bra att vi ska skicka en uppdatering som löper nuvarande Arduino bibl...

Komma igång med din Smith och Wesson 22A-1 Pistol

när en person försöker lära en pistol som de är obekanta med de bör börja med lära om grunderna i pistolen tillsammans med dess säkerhet. Efter att ha läst denna 10 minuters instrucable, kommer du vara väl förtrogen med smith och Wesson modell 22A-1...

Bygga en modulär Robot chassi med Actobotics

Jag har älskat robotar från min tidiga barndom. Första filmen robotarna jag minns någonsin verkligen gillar först, där tre robotar från "Silent Running" (fortfarande en av mina favoritfilmer!) Dessa fånig liten vandrande lådor nådde mitt intress...

Hur du använder en Android-enhet och Lego NXT för att bygga en tvåhjuliga själv-balansera Robot

Idag, lär jag dig hur man gör en Android driv och kontrollerade tvåhjuligt självbalanserande robot med Lego NXT.För det första, låt oss se en test video för den slutliga roboten.Här är en annan test på sluttningen:För att bygga denna robot, är allt d...

Enkel rad efterföljare robot med hjälp av en Actobotics Runt Rover spira

Vid hinder undvika robotar, vore vanligaste nybörjare bot en rad efterföljare. Jag själv älskar linje anhängare, och de är några av mina favorit helgen bygger. Det är bara så kul titta på lite bot efter lite svart linje om och om igen, men det är bar...

En enkel och mycket lätt inverterad pendel balansera Robot

Låt oss göra en enkel inverterad balanserande robot, och driva den.Du behöver bara en halv dag att göra dem, om du har en arduino och några material.[en video av en robot som du skulle göra]Inledning:Efter några arbetar med arduino, har jag tänkt på...

Bygga din Internet kontrollerad Video-Streaming Robot med Arduino och Raspberry Pi

< the Instructable och koden är redo. Njut! Lämna en kommentar med du feedback! >Jag är (aka LiquidCrystalDisplay / Itay), en 14 år gammal student från Israel lärande i Max Shein Junior High School för avancerad vetenskap och matematik. Jag gör dett...

2-wheel Self Balancing Robot med hjälp av Arduino och MPU6050

2-Wheel Self Balancing Robot med hjälp av Arduino och MPU6050.Använda Arduino som controller och sensor MPU6050 för att styra balansen. Bara lägga till en enkel seriell Bluetooth-modul och använda en Bluetooth Serial Controller APP för Android-telefo...

Trådlöst styr en Robot med hjälp av Arduino och RF-moduler!

/*Redigera 05/05/2016Hej killar, jag har varit upptagen med college och kunde inte svara på commments. De flesta av y'all ville koden och scheman gjort lite bättre så jag har gjort scheman på Eagle 7.2.0 och laddat upp allt på Github.Här är länken: h...

Gest kontroll car(robot) med Arduino och Android(bluetooth)

Hej folk,Här är ett intressant projekt för alla er kreativa hjärnor ute. Vi ska bygga en android-telefon kontrollerade RC bil.Inget kunde vara mer fascinerande än avlägsen kontrollerade bilar. Denna använder en Bluetooth för kommunikation och acceler...