15 package com.neuronrobotics.sdk.addons.irobot;
17 import com.neuronrobotics.sdk.common.Log;
18 import com.neuronrobotics.sdk.dyio.peripherals.DyIOPeripheralException;
19 import com.neuronrobotics.sdk.dyio.peripherals.ServoChannel;
31 private static final double l1 = 6.0;
34 private static final double l2 = 3.93;
37 private static final double l3 = 4.75;
41 private static final double M_PI = Math.PI;
44 private double scale[]={1.55,1.50,-1.76};
50 private double []
angles=
new double[3];
53 private double []
pose=
new double[3];
56 private double []
centers={134,136,128,48};
108 }
catch (InterruptedException e1) {
122 }
catch (InterruptedException e1) {
134 if(links.length != 4){
137 for(
int i=0;i<4;i++){
182 public void setAngles(
double shoulder,
double elbow,
double wrist){
183 setAngles(shoulder, elbow, wrist,(
float) 1.0);
195 public void setAngles(
double shoulder,
double elbow,
double wrist,
float time) {
207 double interference =
centers[0]-45;
208 double limit = 255 - (1.1*(
positions[0]-interference));
210 Log.
info(
"In interference zone: "+interference+
" with limit: "+limit );
212 System.err.print(
"\nAttempting to set angle that interferes, fixing. Was: "+
positions[0]+
","+
positions[1]);
228 for (
int i=0;i<3;i++){
240 Thread.sleep((
long) (time*1000));
241 }
catch (InterruptedException e1) {
254 double [] a=
new double [3];
255 for (
int i=0;i<3;i++){
274 double [] p =
new double [3];
275 for (
int i = 0; i<3; i++){
289 for(
int i=0;i <
pose.length;i++){
348 Log.
info(
"Setting Pose X: "+x+
" Y: "+y+
" Orentation: "+orentation );
353 System.err.println(
"Hypotenus too long"+x+
" "+y+
"\r\n");
358 elbow *=(180.0/
M_PI);
362 shoulder *=(180.0/
M_PI);
364 double wrist = orentation-elbow-shoulder;
392 Log.
info(
"Orentation changed");
395 Log.
info(
"No signifigant change");
435 private double sqrt(
double d) {
446 private double atan2(
double y,
double x) {
447 return Math.atan2(y, x);
456 private double acos(
double d) {
466 private double sin(
double angle) {
467 return Math.sin(angle);
476 private double cos(
double angle) {
477 return Math.cos(angle);
487 return degrees*
M_PI/180.0;
void setCartesianPose(double x, double y, double orentation, float time)
double atan2(double y, double x)
void setCartesianY(double y)
void setCartesianPose(double[] p, float time)
void setScale(double scale[])
void setBlocking(boolean blocking)
CreateArm(ServoChannel[] links)
void setCartesianX(double x)
double[] getCartesianPose()
void setAngles(double shoulder, double elbow, double wrist, float time)
void setCartesianPose(double x, double y, double orentation)
void setWrist(double angle)
boolean updateCartesian(double x, double y, double orentation)
void setElbow(double angle)
void setCartesianOrentation(double o)
void setCartesianPose(double[] p)
void setAngles(double shoulder, double elbow, double wrist)
String getCartesianPoseString()
void setCenters(double[] centers)
double ToRadians(double degrees)
void setShouler(double angle)
void check(ServoChannel[] links)
static void info(String message)
boolean SetPosition(int pos)