Construire un Robot pince Arduino avec un DynamixShield. (20 / 21 étapes)

Étape 20 : Programmer le robot.

Vous aurez besoin de télécharger le code source de ce robot de mon dépôt github. Puisque vous avez déjà attribué les ID de servo, vous devriez avoir les bibliothèques installées au bon endroit. Nous allons utiliser la classe DynamixSerial et la classe CommanderHS. DynamixSerial est utilisé pour contrôler les servomoteurs Dynamixel servos, tandis que la classe commandant est utilisée pour traiter les commandes de la manette commandant Arbotix qui sont en provenance du XBee. L’esquisse que vous voulez charger se trouve à DynamixShield/sketches/ProbingRobot/ProbingRobot.ino. Je vais aller sur les parties principales de cette esquisse ici d’expliquer comment il fonctionne.

1. nous partons en incluant les en-têtes pour les bibliothèques, que nous aurons besoin.

#include //include la bibliothèque de servo pour commander les Servos RobotGeek

#include « CommanderHS.h »

#include

2. ensuite, nous déclarons certaines constantes, que nous aurons besoin qui définissent les ID pour les servos et certaines valeurs min et max pour les mouvements.

Servo 1: Gauche, roue arrière

#define LEFT_REAR_WHEEL_ID 1

Servo 2: Gauche, roue avant

#define LEFT_FRONT_WHEEL_ID 2

Servo 3: Droite, roue avant

#define RIGHT_FRONT_WHEEL_ID 3

Servo 4: Droite, roue arrière

#define RIGHT_REAR_WHEEL_ID 4

Servo 5: Poignet de griffe

#define CLAW_WRIST_ID 5

Griffe de Servo gauche standard

#define GRIPPER_SERVO_PIN 2

#define GRIPPER_MIN 0

#define GRIPPER_MAX 150

Servo gripperServo ; créer un objet de servo pour les micro servos de 9g FT-FS90MG

#define WRIST_POS_MIN 312

#define WRIST_POS_MAX 612

#define LEFT_CLAW_POS_MIN 412

#define LEFT_CLAW_POS_MAX 712

#define RIGHT_CLAW_POS_MIN 312

#define RIGHT_CLAW_POS_MAX 612

#define ENABLE_DEBUG 1

int wristPos = 512 ; int leftClawPos = 512 ; int rightClawPos = 512 ;

int gripperPos = 150 ; Commencent à 150 degrés

int gripperAdd = 0 ; Ajouter commencent à 0 degrés

int currentLeftSpeed = 0 ; int currentRightSpeed = 0 ;

3. puis définir les classes DynamixSerial et commandant. La classe de DynamixSerial suppose qu’il utilise pour les communications pour les servos de servomoteurs Dynamixel Serial1. Toutefois, si vous passez d’un port série hardware ici vous pouvez l’ignorer. C’est donc le logiciel peut être utilisé sur des projets personnalisés qui n’utilisent pas le DynamixShield. Pour la classe de commandant, vous devez passer dans une classe de série de matériel. J’ai également inclus une version de la classe commandant qui vous permet d’utiliser le logiciel série ainsi. Si vous souhaitez utiliser, puis incluent le CommanderSS.

Commande de CommanderHS = CommanderHS (& Serial3) ;

DynamixelSerial Dynamixel() ; ou Dynamixel(&Serial1) ;

4. dans la configuration, nous commençons tout d’abord la connexion série de débogage si le débogage est activé. Nous puis démarrez le commandant à 38 400 bauds et puis commencer la classe DynamixSerial. Il est par défaut à une fréquence de communication 1 Mbaud et la broche qu’elle utilise pour contrôler l’half duplex du protocole servomoteurs Dynamixel est définie en fonction sur la carte que vous utilisez. Ainsi de suite a Due c’est cheville 22, mais sur le zéro c’est la broche 2. Cependant, vous avez également la possibilité de spécifier ces paramètres dans l’appel à la méthode begin pour remplacer ce qui est utilisé pour des projets personnalisés. Après que c’est fait, alors il appelle une méthode pour configurer les servos et les décalages de commandant. Je n’entrerai pas dans ces méthodes en détail. Ils ont principalement juste les servos dans le bon mode d’installation et tout réinitialiser une position par défaut.

void setup() {}

#ifdef ENABLE_DEBUG

Serial.Begin(57600) ;

while (!. Série) ;

Serial.println (« configuration de départ ») ;

#endif

Command.Begin(38400) ;

Dynamixel.Begin () ; ou Dynamixel.begin (1000000, 22) ;

configureServos() ;

configureCommanderOffsets() ;

}

5. la boucle principale est très simple. Il appelle simplement checkCommander et puis des retards de 10 millisecondes.

void loop() {}

checkCommander() ;

Delay(10) ;

}

6. la base de la méthode checkCommander est montré. Il vérifie d’abord si la commande a reçu tous les messages. Si elle a il vérifie ensuite si les boutons pour un tour rapide ont été touchés. Si ce n’est pas le cas, elle traite ensuite les boutons pour déplacer les roues. Il traite ensuite les boutons pour le poignet et la pince.

void checkCommander() {}

if(Command. ReadMsgs() > 0) {}

Si nous tournons vite puis utilisez-le pour contrôle

les roues. Sinon, utilisez manette de jeu régulière.

{if(!processFastTurns())}

processWheels() ;

}

processWrist() ;

processGripper() ;

7. vous pouvez utiliser les six boutons sur le dessus du commandant pour faire le robot tourner en place. Les trois boutons sur le côté droit il fera tourner à droite à des vitesses différentes, alors que les trois boutons sur la gauche il fera tourner à gauche à des vitesses différentes. En outre, les touches droite et gauche à l’avant du commandant rendra rotation droite et gauche à la vitesse la plus rapide. Nous pouvons le voir ci-dessous où nous avons mis les roues gauche et droite pour tourner dans des directions opposées avec les valeurs de vitesse différente selon laquelle le bouton est frappé.

bool processFastTurns() {}

Si (command.buttons & BUT_R1 ||

Command.Buttons & BUT_RT) {}

setLeftWheels(1023) ;

setRightWheels(-1023) ;

retourne la valeur true ;

}

ElseIf (command.buttons & BUT_L6 ||

Command.Buttons & BUT_LT) {}

setLeftWheels(-1023) ;

setRightWheels(1023) ;

retourne la valeur true ;

}

ElseIf (command.buttons & BUT_R2) {}

setLeftWheels(512) ;

setRightWheels(-512) ;

retourne la valeur true ;

}

ElseIf (command.buttons & BUT_L5) {}

setLeftWheels(-512) ;

setRightWheels(512) ;

retourne la valeur true ;

}

ElseIf (command.buttons & BUT_R3) {}

setLeftWheels(256) ;

setRightWheels(-256) ;

retourne la valeur true ;

}

ElseIf (command.buttons & BUT_L4) {}

setLeftWheels(-256) ;

setRightWheels(256) ;

retourne la valeur true ;

}

retourne la valeur false ;

}

8. Si vous n’êtes pas dans le rapide activer le mode, puis il vérifie si vous utilisez le joystick pour contrôler le mouvement du robot. la méthode processWheels pour cela trouver la grandeur et l’angle du mouvement du levier de commande à pied. Le levier de commande de marche est celui sur la gauche du commandant. Il utilise ces valeurs pour déterminer les vitesses gauche et à droite moteurs à utiliser.

void processWheels() {}

Tout d’abord permet de déterminer la longueur totale du vecteur walkV

Il contrôlera la vitesse globale

int vitesse = sqrt ((command.walkV*command.walkV) +

(command.walkH*command.walkH)) ;

float speedNorm = (float) Vitesse / (float) 144,0 ;

int leftSpeed = 0, rightSpeed = 0 ;

L’angle de la verticale à l’horizontale va contrôler combien de tour il est

Si (vitesse > 0) {}

ratio de flotteur = (float) (vitesse de command.walkV)/ ;

float leftRatio = 0, rightRatio = 0 ;

Si (command.walkH > 0) {}

leftRatio = sign(ratio) * speedNorm ;

rightRatio = rapport * speedNorm ;

}

else {}

rightRatio = sign(ratio) * speedNorm ;

leftRatio = rapport * speedNorm ;

}

Les valeurs du retour du commandant arbotix ne sont pas circulaires

Ils sont plus rectangulaires. Donc, si vous normalisez il puis au max

avance et retour paramètres c’est seulement à environ 70 % force. Ceci

multiplicateur permet d’obtenir la vitesse max en allant vers l’avant ou vers l’arrière.

flotteur multiplicateur = 1 ;

Si (((ratio > = 0,90) & & (ratio < = 1,0)) ||

((ratio < = -0,90) & & (ratio > = -1,0))) {

coefficient multiplicateur = 1.4141f ;

}

leftSpeed = 1023 * leftRatio * multiplicateur ;

rightSpeed = 1023 * rightRatio * multiplicateur ;

setLeftWheels(leftSpeed) ;

setRightWheels(rightSpeed) ;

}

9. ensuite, nous vérifions le poignet dans la méthode processWrist. Il prend le signal vertical de regard joystick pour contrôler les mouvements de montée/descente du bras de la pince. Le joystick du regard est celle sur la droite du commandant.

void processWrist() {}

int wristAdd = carte (command.lookV, -102, 102, -10, 10) ;

Si ((wristPos + wristAdd > = WRIST_POS_MIN) & &

(wristPos + wristAdd < = WRIST_POS_MAX)) {

wristPos += wristAdd ;

}

Si (wristAdd! = 0) {}

Dynamixel.moveSpeed (CLAW_WRIST_ID, wristPos, 700) ;

Delay(10) ;

}

}

10. ensuite, nous vérifions si quelqu'un tente de fermer la pince en regardant le signal du regard horizontal.

void processGripper() {}

int gripperAdd = carte (command.lookH, -102, 102, -10, 10) ;

Si (gripperAdd! = 0) {}

gripperPos += gripperAdd ;

if(gripperPos > GRIPPER_MAX) {}

gripperPos = GRIPPER_MAX ;

}

d’autre if(gripperPos < GRIPPER_MIN) {}

gripperPos = GRIPPER_MIN ;

}

gripperServo.write(gripperPos) ;

}

}

11. Enfin, voici une description de le setRightWheels. Cette méthode contrôle les roues droite du robot pour les faire bouger. Le setLeftWheels est à peu près la même chose, mais il contrôle les roues de l’autre côté.

void setRightWheels (int vitesse) {}

Si (vitesse! = currentRightSpeed) {}

currentRightSpeed = Vitesse ;

Si (vitesse > 0) {}

Si {(vitesse > 1023)

Vitesse = 1023 ;

}

Dynamixel.Turn (RIGHT_REAR_WHEEL_ID, 1, vitesse) ;

Delay(10) ;

Dynamixel.Turn (RIGHT_FRONT_WHEEL_ID, 1, vitesse) ;

Delay(10) ;

}

else {}

Si (vitesse < -1023) {}

Vitesse = -1023 ;

}

Dynamixel.Turn (RIGHT_REAR_WHEEL_ID, 0,-vitesse) ;

Delay(10) ;

Dynamixel.Turn (RIGHT_FRONT_WHEEL_ID, 0,-vitesse) ;

Delay(10) ;

}

}

}

Et c’est tout. Il y a d’autres choses dans le sketch que j’ai n’ont pas discuté ici, mais c’est principalement pour des fins de débogage. Vous pouvez activer le débogage de décommenter la //#define ENABLE_DEBUG 1 ligne en haut. Cet exemple affiche ce qui se passe lorsque vous exécutez l’esquisse. Utiliser l’IDE Arduino pour vous programmer le croquis dans votre microcontrôleur, puis permet d’exécuter notre nouveau robot !

Articles Liés

Comment construire un Robot jouant Arduino alimenté par Chess

Comment construire un Robot jouant Arduino alimenté par Chess

à en juger par le nombre d'échecs liés Instructables, je pense qu'il est sûr de dire que la communauté bénéficie du jeu.  Il peut être difficile, toutefois, de trouver quelqu'un qui joue au même niveau que vous faire.  Pour résoudre ce dilemme et d'a
Construire un bras Robot 5 axes avec Arduino et DynamixShield

Construire un bras Robot 5 axes avec Arduino et DynamixShield

Dans ce instructable je va vous montrer comment créer rapidement et facilement un bras de robot 5 axes à l'aide de composants sur étagère commerciales et contrôler à l'aide d'un Arduino avec un DynamixShield. Le DynamixShield est un nouvel Add-on pou
Construire un Robot très petit : Make The World de roues plus petit Robot avec une pince.

Construire un Robot très petit : Make The World de roues plus petit Robot avec une pince.

Construire un robot de 1/20 pouces cubes avec une pince qui peut ramasser et déplacer les petits objets. Il est contrôlé par un microcontrôleur Picaxe. À ce stade, je crois que c'est peut-être le robot au monde plus petite sur roues avec une pince. C
Construire un Robot Simple en utilisant un Arduino et L293 (pont en H)

Construire un Robot Simple en utilisant un Arduino et L293 (pont en H)

Hé les gars, c'est mon premier instructable et je suis ici pour montrer comment construire un robot simple avec un peu d'Arduino programmation ne vous inquiétez pas, j'ai joint le fichier de code ci-dessous, vous pouvez l'utiliser pour la référence.C
Johnny5 Arduino Robot DfRobotshop rover avec interface html télécommande

Johnny5 Arduino Robot DfRobotshop rover avec interface html télécommande

Dans ce post, j'ai expliquer étape par étape comment construire un Arduino base Robot et programmer avec Javascript. J'ai expliquer quels choix de conception que j'ai fait, les cadres et les technologies que j'ai utilisé et comment je programme et co
Robot de piscine avec un Arduino Uno

Robot de piscine avec un Arduino Uno

Hey tout le monde, il s'agit de mon premier Instructable, s'il vous plaît aller facile sur moi.Alors avez-vous jamais voulu construire un petit bateau comme robot qui nage vers la lumière, c'est quoi ce Instructable est tout au sujet. Ce projet est p
Débutants guident de construction de robots Arduino avec Bluetooth et Android

Débutants guident de construction de robots Arduino avec Bluetooth et Android

dans ce tutoriel, nous allons aller au cours de la construction d'un robot Arduino qui peut être contrôlé via bluetooth avec une téléphone/tablette Android. Il s'agit d'un guide de débutants qui va franchir brièvement le processus de câblage et de pr
Raspberry Pi et Arduino : construire des systèmes fiables avec les minuteries de chien de garde

Raspberry Pi et Arduino : construire des systèmes fiables avec les minuteries de chien de garde

Résumé : Dans ce Instructable, nous examinons comment construire des systèmes informatiques plus fiables à l'aide de minuteurs de chien de garde. Nous montrons comment configurer et utiliser le Raspberry Pi et minuteries de chien de garde interne Ard
Le robot aspirateur Floor - contrôlé par Arduino avec flasque arrière du moteur, avec imprimé moteur-roues

Le robot aspirateur Floor - contrôlé par Arduino avec flasque arrière du moteur, avec imprimé moteur-roues

robot aspirateur Floor. Version #17. Essayez de faire plus simple.Le robot est proposé par les petits moteurs à courant continu intégrés moteur-roues imprimés sur l'imprimante 3D :http://www.thingiverse.com/Thing:225576Composants :Arduino avec pare-m
Construire un Robot avec Perler Beads

Construire un Robot avec Perler Beads

Ne vous détestez quand un titre vous promet quelque chose dont l'auteur ne peut pas remettre à plus tard ? Eh bien, je suppose que je suis coupable de cela. Bien sûr vous ne pouvez pas construire un robot avec perler beads. Mais vous pouvez construir
Contrôle robot Arduino avec iOS, iPhone, iPad ou Android

Contrôle robot Arduino avec iOS, iPhone, iPad ou Android

LOFI CONTROL vous permet de contrôler un robot Arduino avec un appareil iOS (iPhone ou iPad) sur LE Bluetooth (Bluetooth 4.0) module comme HM-10 ou HM-11.L'application a été conçue pour fonctionner avec contrôleur de cerveau LOFI et est compatible av
Comment construire un Robot humanoïde de framboise Pi Zero avec Java

Comment construire un Robot humanoïde de framboise Pi Zero avec Java

Salut, je vais vous montrer comment faire un robot humanoïde avec pi zéroÉtape 1: piècesla liste complète devient comme suite pour alimenter les capteurs et les PI :* Raspberry PI Zero + carte micro SD 16Go* Micro-usb hub + Wifi Dongle* AdaFruit Powe
Robot autonome Arduino (Land Rover / voiture) Stage1Model2

Robot autonome Arduino (Land Rover / voiture) Stage1Model2

Mi août 2014 - j'ai décidé de poursuivre la robotique et de construire un grand robot humanoïde.Ce robot serait construit en plusieurs étapes. Étape 1 consiste à construire un Land Rover. Model1 dansStage1 est le Land Rover sans microcontrôleur Model
Construire le Robot Builder

Construire le Robot Builder

Le Robot Builder est une plate-forme de robotique mobile complète et comprend un bras avec une pince et un système de vision active. Ce mode d'emploi décrit les étapes à mais ensemble le robot 3D imprimés fichiers. Instructions figurent également sur