-
Notifications
You must be signed in to change notification settings - Fork 1
/
ArmMotorController.cs
118 lines (101 loc) · 4.33 KB
/
ArmMotorController.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
using System;
using System.Threading;
using Scarlet.IO.BeagleBone;
using Scarlet.IO;
using Scarlet.Components;
using Scarlet.Components.Motors;
using Scarlet.Components.Sensors;
using System.Diagnostics;
using Scarlet.Filters;
namespace UseArm
{
public class ArmMotorController
{
const BBBPin ShoulderPin = BBBPin.P9_16;
const BBBPin ElbowPin = BBBPin.P9_14;
const BBBPin WristPin1 = BBBPin.P8_19;
const BBBPin WristPin2 = BBBPin.P8_13;
const BBBPin WristDirectionPin1 = BBBPin.P8_09;
const BBBPin WristDirectionPin2 = BBBPin.P8_10;
const BBBPin ShoulderPotPin = BBBPin.P9_38;
const BBBPin ElbowPotPin = BBBPin.P9_40;
const BBBPin WristPotPin = BBBPin.P9_36;
Arm a;
IMotor Shoulder;
IMotor Elbow;
IMotor Wrist1;
IMotor Wrist2;
ISensor ShoulderPot;
ISensor ElbowPot;
ISensor WristPot;
IPWMOutput ShoulderPWM, ElbowPWM;
public ArmMotorController()
{
Scarlet.Utilities.StateStore.Start("ARM");
BBBPinManager.AddMappingPWM(ShoulderPin);
BBBPinManager.AddMappingPWM(ElbowPin);
BBBPinManager.AddMappingPWM(WristPin1);
BBBPinManager.AddMappingPWM(WristPin2);
BBBPinManager.AddMappingGPIO(WristDirectionPin1, true, ResistorState.PULL_UP);
BBBPinManager.AddMappingGPIO(WristDirectionPin2, true, ResistorState.PULL_UP);
BBBPinManager.AddMappingADC(ShoulderPotPin);
BBBPinManager.AddMappingADC(ElbowPotPin);
BBBPinManager.AddMappingADC(WristPotPin);
BBBPinManager.ApplyPinSettings(BBBPinManager.ApplicationMode.APPLY_IF_NONE);
BeagleBone.Initialize(SystemMode.DEFAULT, true);
const double DegToRad = Math.PI / 180.0;
a = new Arm((0, 0, Math.PI / 2, Math.PI / 2, 0, 0, 6.8),
(0, 0, -76 * DegToRad, 100 * DegToRad, 0, 0, 28.0),
(0, 0, -168.51 * DegToRad, -10 * DegToRad, 0, 0, 28.0),
(-2 * Math.PI, 2 * Math.PI, -Math.PI / 2, Math.PI / 2, 0, 0, 12.75));
//(0, 12.75, -Math.PI / 2, Math.PI / 2));
LowPass<float> ShoulderFilter = new LowPass<float>();
LowPass<float> ElbowFilter = new LowPass<float>();
ShoulderPWM = PWMBBB.PWMDevice1.OutputB;
ElbowPWM = PWMBBB.PWMDevice1.OutputA;
IPWMOutput WristPWM1 = PWMBBB.PWMDevice2.OutputB;
IPWMOutput WristPWM2 = PWMBBB.PWMDevice2.OutputA;
IDigitalOut WristDirectionGPIO1 = new DigitalOutBBB(WristDirectionPin1);
IDigitalOut WristDirectionGPIO2 = new DigitalOutBBB(WristDirectionPin2);
IAnalogueIn ShoulderADC = new AnalogueInBBB(ShoulderPotPin);
IAnalogueIn ElbowADC = new AnalogueInBBB(ElbowPotPin);
IAnalogueIn WristADC = new AnalogueInBBB(WristPotPin);
Shoulder = new TalonMC(ShoulderPWM, 0.2f, ShoulderFilter);
Elbow = new TalonMC(ElbowPWM, 0.2f, ElbowFilter);
Wrist1 = new CytronMD30C(WristPWM1, WristDirectionGPIO1, 0.3f);
Wrist2 = new CytronMD30C(WristPWM2, WristDirectionGPIO2, 0.3f);
ShoulderPot = new Potentiometer(ShoulderADC, 300);
ElbowPot = new Potentiometer(ElbowADC, 300);
WristPot = new Potentiometer(WristADC, 300);
}
public void MoveMotors()
{
Shoulder.SetSpeed(0.3f);
Thread.Sleep(2000);
Shoulder.SetSpeed(0);
ShoulderPWM.SetEnabled(false);
//Console.WriteLine("Shoulder: " + ShoulderPot.GetData().GetValue<float>("Data"));
//Shoulder.SetSpeed(0);
//ShoulderPWM.SetEnabled(false);
//Elbow.SetSpeed(0);
//ElbowPWM.SetEnabled(false);
/*Elbow.SetSpeed(0.2f);
Console.ReadLine();
Elbow.SetSpeed(0.1f);
Thread.Sleep(1000);
Elbow.SetSpeed(0.05f);
Thread.Sleep(1000);
Elbow.SetSpeed(0);*/
//Shoulder.SetSpeed(0);
/*Wrist1.SetSpeed(0.01f);
Wrist2.SetSpeed(0.01f);
Thread.Sleep(500);
Wrist1.SetSpeed(0);
Wrist2.SetSpeed(0);*/
}
public void MoveTo(float X, float Y, float Z)
{
a.MoveTo(X, Y, Z);
}
}
}