arduino 6 dof

New member? Introduce yourself here!

arduino 6 dof

Postby dragsim » Sun 3. Aug 2014, 02:09

bonjour tout le monde j ai commencer un mini projet 6 dof,j avance tranquillement avec aucune connaissance sur le sujet, j ai suivit le plan de stephenb, mais il y a trois mot qui ne marche pas servo-min, servo-max et servo mult, le livre arduino pour les nul sort seulement lundi et le temps que la librairie les recoivent peut etre une a deux semaine de plus. question c est quoi le bon firmware est-ce-qu un firmata fait la meme chose!!j y comprend plus rien et je suis incapable de settermon simulateur meme en suivant le manuel, je crois que j ai besoin d un peu d aide, merci a tous a l avance, une chance que j ai commencer petit parce que le plus compliquer c est la programmation.
je commence par se petit projet pour problablement terminer avec un 6dof avec whipper motor, mais pas pour tout de suite
User avatar
dragsim
 
Posts: 4
Images: 1
Joined: Mon 7. Jul 2014, 04:05
Location: canada, quebec
Has thanked: 0 time
Been thanked: 0 time

Re: arduino 6 dof

Postby dragsim » Mon 4. Aug 2014, 05:26

:oops: bonjour la moi je comprend plus rien voici mon code pour ma arduino mega 2560 r3 plus [code][
#include <Servo.h>

const float pi = 3.14159,
theta_r = radians(48.0),
theta_p = radians(23.2),
theta_s[] = {-pi/3, 2*pi/3, pi, 0, pi/3, -2*pi/3},
RD = 2.560,
PD = 4.040,
L1 = 1.08,
L2 = 4.60,
z_home = 3.75,
servo_min = 3.50,
servo_max = 5.50,
servo_mult = 6,
p[2][6] = {{PD*cos(pi/6 + theta_p), PD*cos(pi/6 - theta_p), PD*cos(-(pi/2 - theta_p)), -PD*cos(-(pi/2 - theta_p)), -PD*cos(pi/6 - theta_p), -PD*cos(pi/6 + theta_p)},
{PD*sin(pi/6 + theta_p), PD*sin(pi/6 - theta_p), PD*sin(-(pi/2 - theta_p)), PD*sin(-(pi/2 - theta_p)), PD*sin(pi/6 - theta_p), PD*sin(pi/6 + theta_p)}},
re[2][6] = {{RD*cos(pi/6 + theta_r), RD*cos(pi/6 - theta_r), RD*cos(-(pi/2 - theta_r)), -RD*cos(-(pi/2 - theta_r)), -RD*cos(pi/6 - theta_r), -RD*cos(pi/6 + theta_r)},
{RD*sin(pi/6 + theta_r), RD*sin(pi/6 - theta_r), RD*sin(-(pi/2 - theta_r)), RD*sin(-(pi/2 - theta_r)), RD*sin(pi/6 - theta_r), RD*sin(pi/6 + theta_r)}};
/*
theta_r = angle between attachment points
theta_p = angle between rotation points
theta_s = orientation of the servos
RD = distance to end effector attachment points
PD = distance to servo rotation points
L1 = servo arm length
L2 = connecting arm length
z_home = default z height with servo arms horizontal
servo_min = lower limit for servo arm angle
servo_max = upper limit for servo arm angle
servo_mult = multiplier to convert to milliseconds
p = location of servo rotation points in base frame [x/y][1-6]
re = location of attachment points in end effector frame [x/y][1-6]
*/

const int servo_pin[] = {9,3, 5, 11, 6, 10},
servo_zero[6] = {1710, 1280, 1700, 1300, 1680, 1300};
/*
servo_pin = servo pin assignments,
servo_zero = zero angles for each servo (horizontal)
*/
Servo servo[6];
/*
Servos 0, 2, 4: reversed (+ = down, - = up)
Servos 1, 3, 5: normal (+ = up, - = down)
*/
void setup()
{ //Serial.begin(9600);
for(int i = 0; i < 6; i++)
{ servo[i].attach(servo_pin[i]);
servo[i].writeMicroseconds(servo_zero[i]);
}
delay(1000);
}
void loop() {
static float pe[6] = {0,0,0,radians(0),radians(0),radians(0)}, theta_a[6], servo_pos[6],
q[3][6], r[3][6], dl[3][6], dl2[6];
/*
pe = location and orientation of end effector frame relative to the base frame [sway, surge, heave, pitch, roll, yaw)
theta_a = angle of the servo arm
servo_pos = value written to each servo
q = position of lower mounting point of connecting link [x,y,x][1-6]
r = position of upper mounting point of connecting link
dl = difference between x,y,z coordinates of q and r
dl2 = distance between q and r
*/

for(int i = 0; i < 6; i++)
{ q[0][i] = L1*cos(-theta_a[i])*cos(theta_s[i]) + p[0][i];
q[1][i] = L1*cos(-theta_a[i])*sin(theta_s[i]) + p[1][i];
q[2][i] = -L1*sin(-theta_a[i]);
r[0][i] = re[0][i]*cos(pe[4])*cos(pe[5]) + re[1][i]*(sin(pe[3])*sin(pe[4])*cos(pe[5]) - cos(pe[3])*sin(pe[5])) + pe[0];
r[1][i] = re[0][i]*cos(pe[4])*sin(pe[5]) + re[1][i]*(cos(pe[3])*cos(pe[5]) + sin(pe[3])*sin(pe[4])*sin(pe[5])) + pe[1];
r[2][i] = -re[0][i]*sin(pe[4]) + re[1][i]*sin(pe[3])*cos(pe[4]) + z_home + pe[2];
dl[0][i] = q[0][i] - r[0][i];
dl[1][i] = q[1][i] - r[1][i];
dl[2][i] = q[2][i] - r[2][i];
dl2[i] = sqrt(dl[0][i]*dl[0][i] + dl[1][i]*dl[1][i] + dl[2][i]*dl[2][i]) - L2;
theta_a[i] += dl2[i];
theta_a[i] = constrain(theta_a[i], servo_min, servo_max);
if(i%2 == 1)
servo_pos[i] = servo_zero[i] + theta_a[i]*servo_mult;
else servo_pos[i] = servo_zero[i] - theta_a[i]*servo_mult;
}

for(int i = 0;
i < 6; i++)
{
servo[i].writeMicroseconds(servo_pos[i]);
}
}

/code]


j ai reussi a le faire fonctionner le code, sur la arduino.
quand je demarre out put set up USO usb serial port est la com3, la ligne de code que rentre est

S~a01~R~a02~Y~a03~W~a04~P~a05~H~a06~

Rendu a interface setting rien, found interface rien j ai essayer plein d exemple rien j ai trouver un code pour deux moteur DC
sur le site et il marche je crois que c est SIRnoname qui l avait poster pour quelqu un d autre.
J ai hate a demain le livrer Arduino pour les nul sort en librairie.

Et dans math set up, suis-je mieux d utiliser le pluggin pour le thanos 6dof ou simplement axe par axe.
merci a l avance moi j ai la tete qui chauffe, svp quelque indices ou si c est autre chose faite moi signe ou un petit mot
je commence par se petit projet pour problablement terminer avec un 6dof avec whipper motor, mais pas pour tout de suite
User avatar
dragsim
 
Posts: 4
Images: 1
Joined: Mon 7. Jul 2014, 04:05
Location: canada, quebec
Has thanked: 0 time
Been thanked: 0 time

Re: arduino 6 dof

Postby RacingMat » Mon 4. Aug 2014, 11:05

salut Dragsim !

Bon courage pour la partie programmation, c'est super intéressant ensuite et gratifiant quand ça fonctionne enfin !

Pour l'aspect pédagogique, tu peux regarder le code que j'utilise en 2DOF : il est très simple et te permettra peut-être de creuser le sujet ;)

voir le lien dans ma signature
Mat
2 DOF playseat : arduino, motomonster, 12V truck wiper motors
http://www.x-sim.de/forum/viewtopic.php?f=37&t=943
User avatar
RacingMat
X-Sim Stage 2 edition
 
Posts: 456
Images: 147
Joined: Wed 20. Feb 2013, 21:30
Location: Marseille - FRANCE
Has thanked: 4 times
Been thanked: 130 times

Re: arduino 6 dof

Postby Wanegain » Mon 4. Aug 2014, 13:21

C'est très courageux de commencer par un 6dof !!

Peut être même trop ambitieux car c'est beaucoup plus complexe à mettre en oeuvre, tant mécaniquement que logiciellement !

Première remarque concernant le code que tu donnes : à aucun moment tu ne reçois des données du logiciel, donc je ne vois pas trop à quoi sert ce code (je n'ai pas tout lu ni étudié en détails, mais c'est peut être les calculs de chaque axe) et surtout le fait de mettre serial.begin(9600) en commentaire, fais que tu coupes toutes les liaison série... Ton code n'est pas celui adapté je pense !

Deuxième remarque : dans le même code, il est peu probable d'utiliser et USO et Interface settings (où là il te faut un plugin compatible avec ton code).
Le code de Sirnoname (usb xpid) utilise un plugin qu'il founit avec X-Sim, et donc tu n'as rien à mettre dans USO et là tu auras tes interfaces qui vont apparaitre dans Interface settings.

Tu as quoi comme moteurs et cartes d'interface ? Il faudrait que l'on en sache un peu plus pour pouvoir t'aider...
User avatar
Wanegain
 
Posts: 55
Images: 1
Joined: Mon 19. Nov 2012, 17:55
Has thanked: 1 time
Been thanked: 0 time

Re: arduino 6 dof

Postby dragsim » Mon 4. Aug 2014, 17:45

un gros merci les gars, mon projet dans l etat actuel est fait avec 6 servo de teleguider (RC), une carte mega 2560 r3 plus
J ai pris mes information de base du post de stephenB.
Si tout va bien apres bien ce sera avec 6 moteur de wiper.
Je part presque de 0 pour faire ce projet et je parle de connaissance informatique en code, le code que j ai poster je me demandais s il manquait quelque chose comme protocole de communication et si j ai bien compris on m a confimer que oui, la ca devrait aller mieux le livre ARDUINO pour les nul sorte en magasin et internet aujourd hui memeca va surement aider prace que la j ai l air d un aveugle.
Et pour la mention que j ai essayer le programme de SIRnoname s etait pour demontrer qu avec un bon code ca marche et en comparant les codes j ai remarquer qu il me manquait un protocole de communication! :D :)
je commence par se petit projet pour problablement terminer avec un 6dof avec whipper motor, mais pas pour tout de suite
User avatar
dragsim
 
Posts: 4
Images: 1
Joined: Mon 7. Jul 2014, 04:05
Location: canada, quebec
Has thanked: 0 time
Been thanked: 0 time

Re: arduino 6 dof

Postby dragsim » Mon 4. Aug 2014, 17:55

En passant ca peu parraitre niasseux mais ou je dois aller pour vous remercier racingmat et winegame
ma tete chauffe moins de savoir que je suis dans le bon chemin.
je commence par se petit projet pour problablement terminer avec un 6dof avec whipper motor, mais pas pour tout de suite
User avatar
dragsim
 
Posts: 4
Images: 1
Joined: Mon 7. Jul 2014, 04:05
Location: canada, quebec
Has thanked: 0 time
Been thanked: 0 time


Return to New users start here - FAQ

Who is online

Users browsing this forum: No registered users and 2 guests