User Tools

Site Tools


No ACL setup yet! Denying access to everyone.
en:edu:zmitac:macro:lego:lab:csharp

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
en:edu:zmitac:macro:lego:lab:csharp [2018/01/15 22:23] – [Coordinates System] sebadab796en:edu:zmitac:macro:lego:lab:csharp [2018/01/28 05:59] (current) – patrkaz065
Line 1: Line 1:
-===== Laboratory on LEGO Mindstorms - Programming NXT in C# =====+===== Laboratory on LEGO Mindstorms - EV3 C# Programming Theory & Practice =====
  
 +==== Introduction ====
 +
 +This tutorial shows the basics of programming theory and practice of LEGO EV3 robot in C# language. The physical behaviour and parameters of the robot are represented by set of methods and fields assigned to appropriate classes. 
 +In order to control the behaviour of the robot, appropriate classes have to be instantiated and initialized and appropriate methods have to be called. For example, the EV3 brick is represented in code by the class Brick.
 +
 +
 +==== C# Example - Controlling EV3 movement with hand gestures ====
 +The example is program which navigates the EV3 depending on the hand movement detected by kinect device.
 +The EV3 robot brick is represented in the C# code by class brick. The following code creates a new brick instance and initializes it with the new blutooth connection assigned to given port (COM4 in this case). Then, asynchronous bluetooth connection is etablished and confirmation sound is played on the robot side:
 +
 +
 +<code>
 +_brick = new Brick(new BluetoothCommunication("COM4"));
 +_brick.ConnectAsync();
 +_brick.DirectCommand.PlayToneAsync(10, 1000, 300);
 +</code>
 +
 +
 +The idea is such: asynchronously detect the movement of hands and take into account joints placement - basing on its coordinates the relative position of hand with respect to shoulders will be recognized. All neccessary data is given in argument "joints"
 +
 +<code>
 +this.DrawHandAsync(body.HandLeftState, jointPoints[JointType.HandLeft], dc, joints);
 +this.DrawHandAsync(body.HandRightState, jointPoints[JointType.HandRight], dc, joints);
 +</code>
 +
 +
 +In the above method, hand and shoulder variables (both right) should be defined:
 +<code>
 +Joint rShoulder = joints[JointType.ShoulderRight];
 +Joint rHand = joints[JointType.HandRight];
 +</code>
 +
 +Basing on the relative placement of the hand with respect to the shoulder, the appropriate action is performed (movement method is called). The mathematical comparisons are simply horizontal and vertical displacements between shoulders and hands.
 +
 +<code>
 +drawingContext.DrawEllipse(this.handClosedBrush, null, handPosition, HandSize, HandSize);
 +if (Math.Abs(rShoulder.Position.X - rHand.Position.X) < Math.Abs(rShoulder.Position.Y-rHand.Position.Y))
 +{
 +   if (rHand.Position.Y > rShoulder.Position.Y)
 +      goForward();
 +   else
 +      goBackward();
 +} else
 +{
 +   if (rHand.Position.X > rShoulder.Position.X)
 +      turnRight();
 +   else
 +      turnLeft();
 +}
 +</code>
 +
 +The movement functions are self explanatory and designed in the following way, calling the direct brick commands with appropriate parameters to move the robot as expected.
 +
 +<code>
 +private async void goForward()
 +{
 +   _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B|OutputPort.D,20);
 +}
 +
 +
 +private async void turnRight()
 +{
 +   _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, 20);
 +   _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.D, 0);
 +}
 +</code>
  
  
Line 66: Line 132:
 <figure RefPic4> <figure RefPic4>
 {{ :en:edu:zmitac:macro:lego:lab:4.png |}} {{ :en:edu:zmitac:macro:lego:lab:4.png |}}
-<caption>Leap-enabled application. Source</caption>+<caption>Leap-enabled application. [[https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Architecture.html|Source]]</caption>
 </figure> </figure>
  
Line 74: Line 140:
   * Tracking data in the form of JSON messages   * Tracking data in the form of JSON messages
   * JavaScript client is available for convenience   * JavaScript client is available for convenience
-  * More information: Details 
  
 ==== Setting Up a Project ==== ==== Setting Up a Project ====
Line 112: Line 177:
 All citations, used images and more information about Leap Motion All citations, used images and more information about Leap Motion
 can be found here: can be found here:
-https://developer.leapmotion.com/documentation/csharp/devguide/Sample_Tutorial.html +  * [[https://developer.leapmotion.com/documentation/csharp/devguide/Sample_Tutorial.html|Sample_Tutorial]] 
-https://developer.leapmotion.com/documentation/python/devguide/Leap_Overview.html +  * [[https://developer.leapmotion.com/documentation/python/devguide/Leap_Overview.html|Leap_Overview]] 
-https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Architecture.html +  * [[https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Architecture.html|Leap_Architecture]] 
-https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Coordinate_Mapping.html+  * [[https://developer.leapmotion.com/documentation/csharp/devguide/Leap_Coordinate_Mapping.html|Leap_Coordinate_Mapping]]
en/edu/zmitac/macro/lego/lab/csharp.1516051407.txt.gz · Last modified: by sebadab796