NXTBrick.NET

    • Release

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von nafets3646.

      NXTBrick.NET

      NXTBrick.NET


      NXTBrick.NET ist eine Library, die es ermöglicht einen NXTBrick LegoMindstorm Roboter anzusteuern. Momentan wird nur der NXTBrick unterstützt, da ich keinen RCXBrick zum testen zur Verfügung habe. Es werden alle Befehle aus der Dokumentation des NXTBricks unterstützt. Quelle
      Derzeit ist ein Controller geplant, mit den man gewisse Befehle automatisch ausführen lassen kann, so dass das NXT-Device von alleine vordefinierte Aufgaben erfüllen kann. Der Controller ist bereits umgesetzt und wurde erfolgreich getestet, ist allerdings noch nicht implementiert.


      Screenshots:

      Klassendiagramme
      Enumerationen


      Verwendete Programmiersprache:

      IDE: Visual Studio 2012, C#


      Systemanforderungen:

      NET Framework 4.0 Download
      Bluetooth Adapter für die Kommunikation des NXT-Devices. (USB ist theoretisch möglich, allerdings sind die Maximalen Command Längen abgeändert, wodurch es zu Fehlern kommen kann)


      Download:

      NXTBrick.NET 0.5.1.0 (24kB)
      NXTBrick.NET 0.5.3.0 (30kB)
      NXTBrick.NET 0.5.5.0 (31kB)
      NXTBrick.NET 0.5.8.1 (31kB)


      Lizenz:

      Freeware


      Beispiele:

      Spoiler anzeigen

      C-Quellcode

      1. public Bricksample()
      2. {
      3. var brickConnector = new NXTBrickConnector();
      4. brickConnector.Connected += brickConnector_Connected;
      5. //Connect on COM5
      6. brickConnector.Connect(5);
      7. }
      8. void brickConnector_Connected(object sender, System.EventArgs e)
      9. {
      10. var brick = new NXTBrick.Robotic.NXTBrick((NXTBrickConnector) sender);
      11. var brickDevice = new Device();
      12. if (brick.GetDevice(out brickDevice))
      13. {
      14. //Working with brickDevice
      15. //Label1.Text = brickDevice.BatteryCharge
      16. }
      17. var motorState = new MotorState();
      18. motorState.Motor = MotorType.MotorA;
      19. motorState.MotorActivity = OutputStateMode.Motoron;
      20. motorState.PowerLevel = 100;
      21. motorState.Regulation = Regulation.MotorSync;
      22. motorState.RunState = RunState.Running;
      23. motorState.MotorAlwaysOn();
      24. if (brick.SetMotorState(motorState, false))
      25. {
      26. //Worked.
      27. }
      28. }
      29. public void ComPortExample()
      30. {
      31. var comFinder = new ComHelper(30); // Com1-30
      32. comFinder.DetectedComPort += comFinder_DetectedComPort;
      33. comFinder.ProgressChanged += comFinder_ProgressChanged;
      34. }
      35. void comFinder_ProgressChanged(object sender, ComHelperProgressChangedEventArgs e)
      36. {
      37. //Working with e.ProgressPercentage
      38. }
      39. void comFinder_DetectedComPort(object sender, ComPortDetectedEventArgs e)
      40. {
      41. //Available COMPorts in e.ComPorts
      42. }


      Anwendungsbeispiel mit Steuerungseinheit usw (1,1mB)


      Schlusswort:

      Bei Verbesserungsvorschlägen könnt ihr euch gerne melden, auch wenn ihr noch Ideen für neue Funktionen habt, ansonsten viel Spaß damit. Vermutlich werden nicht viele von euch so ein Gerät besitzen, jedoch ist es an Schulen sehr beliebt.
      Bilder
      • ikclUB4EzcbG.png

        26,63 kB, 331×549, 192 mal angesehen
      • r94hO53jofE4.png

        49,56 kB, 836×546, 194 mal angesehen

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ThuCommix“ ()

      Sehr interessante Library. Ich werd mal mein NXT-dingends auskramen und mal probieren, bin neugierig, wie es so läuft ;)

      mfg

      gfc
      Update 0.5.3.0


      Es ist nun möglich, vordefinierte Aufgaben zu erstellen und auf den NXT auszuführen, dazu dient der RobotController.


      Klassendiagramme:




      Beispiel:

      C-Quellcode

      1. public void ControllerSample()
      2. {
      3. var nxtController = new RobotController(BrickInstance);
      4. nxtController.ControllerTaskChanged += nxtController_ControllerTaskChanged;
      5. nxtController.ControllerCompleted += nxtController_ControllerCompleted;
      6. nxtController.MotorLeft = MotorType.MotorA;
      7. nxtController.MotorRight = MotorType.MotorB;
      8. nxtController.ExtraMotor = MotorType.MotorC;
      9. var task1 = new ControllerTask {Command = ControllerTaskCommands.Up, Duration = 5000, PowerLevel = 100};
      10. var task2 = new ControllerTask { Command = ControllerTaskCommands.Left, Duration = 1000, PowerLevel = 100 };
      11. var task3 = new ControllerTask { Command = ControllerTaskCommands.Down, Duration = 5000, PowerLevel = 100 };
      12. nxtController.Add(task1, task2, task3);
      13. nxtController.Run();
      14. }
      15. void nxtController_ControllerTaskChanged(object sender, ControllerTaskChangedEventArgs e)
      16. {
      17. //e.NextTask
      18. //e.SolvedTask
      19. }
      20. void nxtController_ControllerCompleted(object sender, System.EventArgs e)
      21. {
      22. //Tasks completed;
      23. }


      Ich denke der Code spricht für sich selber, viel Spaß damit.
      Update 0.5.5.0


      Es gibt nun Funktionen für alle erhältlichen Sensoren die mit dem NXTBrick kompatibel sind.


      Klassendiagramme:




      Neue Funktionen:

      • GetUltraSonicSensorValue
      • ReadHiTechnicColorSensor
      • ReadHiTechnicCompassSensor


      Grüße, ThuCommix
      Update 0.5.8.1


      Wrapper Funktionen für weitere Sensoren (siehe unten) implementiert.


      Klassendiagramme:




      Neue Funktionen:

      • Fix Sensor Initialize in: ReadHiTechnicColorSensor, ReadHiTechnicCompassSensor, GetUltraSonicSensorValue
      • Neue Sensoren: LightSensor, SoundSensor, DruckSensor, ColorSensor




      (Lautstärke in DB)



      Grüße, ThuCommix
      Derzeit arbeite ich an einer Script Klasse, damit der NXTBrick bestimmte Aufgaben abarbeiten kann, das ganze ist noch weit am Anfang, aber ich wollte euch trotzdem schonmal berichten. Ziel ist, später bei JugendForscht eine Aufgabenstellung abzuarbeiten, und dazu macht sich eine ScriptSprache ganz praktisch.



      Script: Variablen definieren








      So kann das Script dann z.B aussehen. (Alles was bereits da steht, funktioniert auch)

      C-Quellcode

      1. var define: myInt:int, myInt2:int, success:bool, message:string, m:string, m1:string, m2:string
      2. setVar: myInt = 33
      3. setVar: success = true
      4. setVar: m = Hallo
      5. setVar: m1 = Welt
      6. setVar: m2 = von
      7. setVar: myInt2 = 33
      8. setVar: message = device is offline
      9. wait(myInt)
      10. while(device is offline == message)
      11. {
      12. wait(3000)
      13. wait(1000)
      14. setVar: message = null
      15. }
      16. setVar: myInt2 = 70
      17. setVar: myInt = 20 / 21
      18. setVar: message = m + m1 + m2 + NXTScript.
      19. setMotor(ALL, myInt2)
      20. wait(1000)
      21. setMotor(ALL, 0)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ThuCommix“ ()

      Ich wollte fragen, ob du die Library auch mit dem .NET Framework 3.5 oder niedriger zur Verfügung stellen könntest. Wir würden das nämlich gerne in der Robotik-AG meiner Schule nutzen, die Laptops haben allerdings nur das 3.5er. Wäre cool, wenn du das erledigen könntest (am besten bis 14:00, da geht sie los und ja, ich weiss, dass das sehr kurzfristig ist, ich weiss es aber auch nur seid gerade eben und den Rest vom Schuljahr haben wir kein Robotik mehr :S)
      Hoffe, dass du das hinbekommst :)

      MfG Stefan