![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Delta Robot example
Dependencies: BufferedSerial Eigen
Fork of TCPSocket_Example by
main.cpp
- Committer:
- je310
- Date:
- 2018-10-07
- Revision:
- 4:778bc352c47f
- Parent:
- 3:10fa3102c2d7
- Child:
- 5:01e1e68309ae
File content as of revision 4:778bc352c47f:
#include "mbed.h" #include "odrive.h" #include "lwip-interface/EthernetInterface.h" #include "comms.h" #include <string> #include "calibration.h" #include "Axis.h" #include "kinematics.h" #include "BufferedSerial.h" DigitalOut led1(LED1); DigitalOut homeGND(PF_5); DigitalIn homeSwitchA(PA_3); DigitalIn homeSwitchB(PC_0); DigitalIn homeSwitchC(PC_3); DigitalIn trigger(PF_3); BufferedSerial buffered_pc(SERIAL_TX, SERIAL_RX); calVals calibration; using std::string; const int BROADCAST_PORT_T = 58080; const int BROADCAST_PORT_R = 58081; EthernetInterface eth; void transmit() { UDPSocket socket(ð); string out_buffer = "very important data"; SocketAddress transmit("10.0.0.160", BROADCAST_PORT_T); fromRobot msg; msg.motor1.busVoltage = 69; while (true) { msg.motor1.busVoltage += 1; int ret = socket.sendto(transmit, &msg, sizeof(msg)); //printf("sendto return: %d\n", ret); Thread::wait(100); } } void receive() { SocketAddress receive; UDPSocket socket(ð); int bind = socket.bind(BROADCAST_PORT_R); //printf("bind return: %d", bind); char buffer[256]; while (true) { //printf("\nWait for packet...\n"); int n = socket.recvfrom(&receive, buffer, sizeof(buffer)); toRobot inmsg; memcpy(&inmsg, buffer, n); //buffer[n] = '\0'; buffered_pc.printf("Count:%i, Motor1Vel:%f, Motor1Tor: %f \r\n",inmsg.count, inmsg.motor1.velocity,inmsg.motor1.torque); //Thread::wait(1); } } int getCountPos(BufferedSerial ser, int axis) { } void runOdrive() { BufferedSerial ODSerial0(PC_12,PD_2); ODSerial0.baud(115200); BufferedSerial ODSerial1(PD_5,PD_6); ODSerial1.baud(115200); ODrive OD0(ODSerial0); ODrive OD1(ODSerial1); //Axis A(&OD1, 1, &homeSwitchA,calibration,AX_A); // Axis B(&OD1, 0, &homeSwitchB,calibration,AX_B); // Axis C(&OD0, 0, &homeSwitchC,calibration,AX_C); // Kinematics kin(&A, &B, &C, calibration); // the Kinematics class contains everything // kin.activateMotors(); // kin.homeMotors(); // //int error = kin.goToPos(0,0,-10); // kin.goToAngles(pi/4,pi/4,pi/4); // Thread::wait(1000); // float inc = pi /500; // float i = 0; // float k = -100; // int up = 0; while(true) { // int count = 0; // for(int j = 0 ; j < 100; j++) { // // if(trigger == false) { // count++; // } // } // if(count>90) { // i += inc; // if(up == 1)k+=0.05; // else k-=0.05; // if(k >= -80) up = 0; // if(k <= -180) up = 1; // //int error = kin.goToPos(40.0*sin(i),40.0*cos(i),k); // //int error = kin.goToPos(0,0,k); // if(i > 2*pi) i = 0; Thread::wait(10); buffered_pc.printf("bus voltage %f\r\n",OD1.readBattery()); //buffered_pc.printf("k= %f\r\n",k); //} } } int main() { calibration.e = 58.095; calibration.f = 60.722; calibration.re = 150; calibration.rf = 143.0; calibration.Aoffset = 0.43 - 0.111701; calibration.Boffset = 0.43 - 0.111701; calibration.Coffset = 0.43 - 0.111701; calibration.gearRatio = 89.0/24.0; buffered_pc.baud(115200); buffered_pc.printf("hello\r\n"); Thread transmitter; Thread receiver; Thread odriveThread; //set switches up homeGND = false; homeSwitchA.mode(PullUp); homeSwitchB.mode(PullUp); homeSwitchC.mode(PullUp); trigger.mode(PullUp); //eth.connect(); //buffered_pc.printf("Controller IP Address is %s\r\n", eth.get_ip_address()); Thread::wait(5000); //transmitter.start(transmit); //receiver.start(receive); odriveThread.start(runOdrive); while (true) { //led1 = !led1; Thread::wait(500); } }