demo project

Dependencies:   AX-12A Dynamixel mbed iothub_client EthernetInterface NTPClient ConfigFile SDFileSystem iothub_amqp_transport mbed-rtos proton-c-mbed wolfSSL

Committer:
henryrawas
Date:
Wed Dec 23 18:34:06 2015 +0000
Revision:
4:36a4eceb1b7f
Child:
5:36916b1c5a06
RobotArm plus publish IoTHub status

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryrawas 4:36a4eceb1b7f 1 /*
henryrawas 4:36a4eceb1b7f 2 Copyright (c) 2015 Jonathan Pickett & Microsoft. Some appropriate open source license.
henryrawas 4:36a4eceb1b7f 3 */
henryrawas 4:36a4eceb1b7f 4
henryrawas 4:36a4eceb1b7f 5 #ifndef __ROBOT_ARM_H__
henryrawas 4:36a4eceb1b7f 6 #define __ROBOT_ARM_H__
henryrawas 4:36a4eceb1b7f 7
henryrawas 4:36a4eceb1b7f 8 #include "mbed.h"
henryrawas 4:36a4eceb1b7f 9 #include "rtos.h"
henryrawas 4:36a4eceb1b7f 10
henryrawas 4:36a4eceb1b7f 11 #include "DynamixelBus.h"
henryrawas 4:36a4eceb1b7f 12 #include "RobotNode.h"
henryrawas 4:36a4eceb1b7f 13
henryrawas 4:36a4eceb1b7f 14 #define MAX_PARTS 8
henryrawas 4:36a4eceb1b7f 15
henryrawas 4:36a4eceb1b7f 16
henryrawas 4:36a4eceb1b7f 17 enum ArmAction
henryrawas 4:36a4eceb1b7f 18 {
henryrawas 4:36a4eceb1b7f 19 AA_RunSeq = 0x1,
henryrawas 4:36a4eceb1b7f 20 AA_Status = 0x2,
henryrawas 4:36a4eceb1b7f 21 AA_Alert = 0x3
henryrawas 4:36a4eceb1b7f 22 };
henryrawas 4:36a4eceb1b7f 23
henryrawas 4:36a4eceb1b7f 24 enum ArmThreadSignals
henryrawas 4:36a4eceb1b7f 25 {
henryrawas 4:36a4eceb1b7f 26 AS_Action = 0x1,
henryrawas 4:36a4eceb1b7f 27 AS_LocalAlert = 0x2,
henryrawas 4:36a4eceb1b7f 28 AS_Cancel = 0x4,
henryrawas 4:36a4eceb1b7f 29 AS_NextStep = 0x8,
henryrawas 4:36a4eceb1b7f 30 AS_NextSeq = 0x10
henryrawas 4:36a4eceb1b7f 31 };
henryrawas 4:36a4eceb1b7f 32
henryrawas 4:36a4eceb1b7f 33 enum IothubThreadSignals
henryrawas 4:36a4eceb1b7f 34 {
henryrawas 4:36a4eceb1b7f 35 IS_Close = 0x1,
henryrawas 4:36a4eceb1b7f 36 IS_SendStatus = 0x2
henryrawas 4:36a4eceb1b7f 37 };
henryrawas 4:36a4eceb1b7f 38
henryrawas 4:36a4eceb1b7f 39 class RobotArm
henryrawas 4:36a4eceb1b7f 40 {
henryrawas 4:36a4eceb1b7f 41 public:
henryrawas 4:36a4eceb1b7f 42
henryrawas 4:36a4eceb1b7f 43 RobotArm();
henryrawas 4:36a4eceb1b7f 44
henryrawas 4:36a4eceb1b7f 45 // move all parts to specified postions in ms time
henryrawas 4:36a4eceb1b7f 46 bool MoveArmPositions(vector<float> positions, int ms, int steps);
henryrawas 4:36a4eceb1b7f 47
henryrawas 4:36a4eceb1b7f 48 // start - move all parts to specified postions in ms time
henryrawas 4:36a4eceb1b7f 49 bool MoveArmPositionsStart(vector<float> positions, int ms);
henryrawas 4:36a4eceb1b7f 50
henryrawas 4:36a4eceb1b7f 51 // start - move all parts to specified postions - test if done
henryrawas 4:36a4eceb1b7f 52 bool MoveArmPositionsHasNext();
henryrawas 4:36a4eceb1b7f 53
henryrawas 4:36a4eceb1b7f 54 // start - move all parts to specified postions - next step
henryrawas 4:36a4eceb1b7f 55 bool MoveArmPositionsNext(int& nextdelay);
henryrawas 4:36a4eceb1b7f 56
henryrawas 4:36a4eceb1b7f 57 // start - move all parts to specified postions - finish
henryrawas 4:36a4eceb1b7f 58 bool MoveArmPositionsEnd();
henryrawas 4:36a4eceb1b7f 59
henryrawas 4:36a4eceb1b7f 60 // move one part to specified postion in ms time
henryrawas 4:36a4eceb1b7f 61 bool MovePartPosition(int partIx, float position, int ms, int steps);
henryrawas 4:36a4eceb1b7f 62
henryrawas 4:36a4eceb1b7f 63 // get all parts positions
henryrawas 4:36a4eceb1b7f 64 bool GetArmPositions(vector<float>& outPos);
henryrawas 4:36a4eceb1b7f 65
henryrawas 4:36a4eceb1b7f 66 // get all parts last positions
henryrawas 4:36a4eceb1b7f 67 bool GetArmLastPositions(vector<float>& outPos);
henryrawas 4:36a4eceb1b7f 68
henryrawas 4:36a4eceb1b7f 69 // get one part position
henryrawas 4:36a4eceb1b7f 70 float GetPartPosition(int partIx);
henryrawas 4:36a4eceb1b7f 71
henryrawas 4:36a4eceb1b7f 72 // get all parts for a measurement
henryrawas 4:36a4eceb1b7f 73 bool GetArmMeasure(int measureId, vector<float>& outPos);
henryrawas 4:36a4eceb1b7f 74
henryrawas 4:36a4eceb1b7f 75 // get all parts last measurement
henryrawas 4:36a4eceb1b7f 76 bool GetArmLastMeasure(int measureId, vector<float>& outPos);
henryrawas 4:36a4eceb1b7f 77
henryrawas 4:36a4eceb1b7f 78 // get one part measurement
henryrawas 4:36a4eceb1b7f 79 float GetPartMeasure(int measureId, int partIx);
henryrawas 4:36a4eceb1b7f 80
henryrawas 4:36a4eceb1b7f 81 int GetNumParts();
henryrawas 4:36a4eceb1b7f 82
henryrawas 4:36a4eceb1b7f 83 // set arm speed as ms between steps
henryrawas 4:36a4eceb1b7f 84 void SetStepMs(int stepms);
henryrawas 4:36a4eceb1b7f 85
henryrawas 4:36a4eceb1b7f 86 // set ThreadId for signals
henryrawas 4:36a4eceb1b7f 87 void SetThreadId(osThreadId tid);
henryrawas 4:36a4eceb1b7f 88
henryrawas 4:36a4eceb1b7f 89 // get the part object
henryrawas 4:36a4eceb1b7f 90 RobotNode* GetArmPart(int partIx);
henryrawas 4:36a4eceb1b7f 91
henryrawas 4:36a4eceb1b7f 92 // get last error code from action
henryrawas 4:36a4eceb1b7f 93 unsigned char GetLastError();
henryrawas 4:36a4eceb1b7f 94
henryrawas 4:36a4eceb1b7f 95 // get index of part with error
henryrawas 4:36a4eceb1b7f 96 int GetLastErrorPart();
henryrawas 4:36a4eceb1b7f 97
henryrawas 4:36a4eceb1b7f 98 private:
henryrawas 4:36a4eceb1b7f 99 // sensors and actuators
henryrawas 4:36a4eceb1b7f 100 RobotNode* _armParts[MAX_PARTS];
henryrawas 4:36a4eceb1b7f 101
henryrawas 4:36a4eceb1b7f 102 int _numParts;
henryrawas 4:36a4eceb1b7f 103
henryrawas 4:36a4eceb1b7f 104 // #ms between steps
henryrawas 4:36a4eceb1b7f 105 int _stepms;
henryrawas 4:36a4eceb1b7f 106
henryrawas 4:36a4eceb1b7f 107 // thread id
henryrawas 4:36a4eceb1b7f 108 osThreadId _tid;
henryrawas 4:36a4eceb1b7f 109
henryrawas 4:36a4eceb1b7f 110 // part ix for last error
henryrawas 4:36a4eceb1b7f 111 int _lastErrorPart;
henryrawas 4:36a4eceb1b7f 112
henryrawas 4:36a4eceb1b7f 113 // for thread friendly moves
henryrawas 4:36a4eceb1b7f 114 vector<float> lastpos;
henryrawas 4:36a4eceb1b7f 115 vector<float> differentials;
henryrawas 4:36a4eceb1b7f 116 int numsteps;
henryrawas 4:36a4eceb1b7f 117 int curstep;
henryrawas 4:36a4eceb1b7f 118 int delayms;
henryrawas 4:36a4eceb1b7f 119 int expDelay;
henryrawas 4:36a4eceb1b7f 120 Timer elapseTimer;
henryrawas 4:36a4eceb1b7f 121 };
henryrawas 4:36a4eceb1b7f 122
henryrawas 4:36a4eceb1b7f 123 #endif