Meet the Stars - Part 1

 

 

1. Introduction

     Hi! This will be my second update for this design challenge. In the first blog I've covered the idea and plan for my project - DiPinto Da BRACCIO - Idea & Plan - Blog 1 . My next 2 blogs will be the "Meet the Stars" blogs, where I'll be going over the 2 main "stars" of my project, the 2 essential components of my project, Raspberry Pi and BRACCIO. In this part I will be going over BRACCIO, doing a small showcase as well going over some ideas around it and doing some work. First I'll begin with the whole BRACCIO kit itself and then continue from there.

 

2. BRACCIO

The Kit

     The kit can be found in a couple of different places, for example Arduino (https://store.arduino.cc/tinkerkit-braccio ) and Farnell (https://export.farnell.com/arduino/t050000/tinkerkit-braccio-arduino-robotic/dp/2831002 ). One more thing that can be found is a BRACCIO rescue kit, which includes 2 servos and a lot of motor mounts, which can break, as I will show later in the blog (https://store.arduino.cc/tinkerkit-braccio-rescue-kit ). The kit already comes with a couple of additional motor mounts which is a great thing. Besides all of the parts that you need to assemble BRACCIO in the kit you will also find an Arduino Uno Shield, philips screwdriver and very well written instructions with some code examples in them.

The Library

     One more great thing about BRACCIO is that it comes with a library as well. It allows for very easy testing and playing around with BRACCIO. It also has some limits for some of the motors, to save them from ending out, for example the claw can only go between 10 and 73 degrees, but there is a problem of if you've set up the motors correctly, if you've set up the neutral point correctly that is, which I haven't done the first time I was assembling it. I just went and attached the motors as they were assuming they were all at 90 degrees, but for example the claw wasn't. While the library is pretty good I won't be using it for my project, because I'll have feedback and would like to try and see if I could adjust  the speed of individual motors slightly with delays and so on. Here is one of the example codes, that shows some basic movements with BRACCIO:

 


/*
  simpleMovements.ino


 This  sketch simpleMovements shows how they move each servo motor of Braccio


 Created on 18 Nov 2015
 by Andrea Martino


 This example is in the public domain.
 */


#include <Braccio.h>
#include <Servo.h>


Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_rot;
Servo wrist_ver;
Servo gripper;


void setup() {
  //Initialization functions and set up the initial position for Braccio
  //All the servo motors will be positioned in the "safety" position:
  //Base (M1):90 degrees
  //Shoulder (M2): 45 degrees
  //Elbow (M3): 180 degrees
  //Wrist vertical (M4): 180 degrees
  //Wrist rotation (M5): 90 degrees
  //gripper (M6): 10 degrees
  Braccio.begin();
}


void loop() {
   /*
   Step Delay: a milliseconds delay between the movement of each servo.  Allowed values from 10 to 30 msec.
   M1=base degrees. Allowed values from 0 to 180 degrees
   M2=shoulder degrees. Allowed values from 15 to 165 degrees
   M3=elbow degrees. Allowed values from 0 to 180 degrees
   M4=wrist vertical degrees. Allowed values from 0 to 180 degrees
   M5=wrist rotation degrees. Allowed values from 0 to 180 degrees
   M6=gripper degrees. Allowed values from 10 to 73 degrees. 10: the toungue is open, 73: the gripper is closed.
  */
  
                       //(step delay, M1, M2, M3, M4, M5, M6);
  Braccio.ServoMovement(20,           0,  15, 180, 170, 0,  73);  


  //Wait 1 second
  delay(1000);


  Braccio.ServoMovement(20,           180,  165, 0, 0, 180,  10);  


  //Wait 1 second
  delay(1000);
}

 

3. GUI

     This was something that I've done in my free time, a month or two ago, a simple GUI for just playing around with the robot. I plan on developing this further and whenever I get it to any real usable state without any bugs I will be posting the whole code on github, so anyone can try it out and add their features if they wanted to. For now the GUI can send values to the Arduino Uno via USB cable, by either clicking the button, or using the "live movement" which still has a couple of bugs and sends the BRACCIO on an unknown adventure sometimes, which in the end led to breaking one of the motor mounts. Here is how the GUI looks for now as well the code on the Arduino.

 

Arduino

#include <Braccio.h>
#include <Servo.h>


Servo base;
Servo shoulder;
Servo elbow;
Servo wrist_ver;
Servo wrist_rot;
Servo gripper;


int m[6];


String mySt;
char myChar;
int i=0;


void setup() {
  Serial.begin(9600);
  while(!Serial){}
  Braccio.begin();
  Braccio.ServoMovement(10,90,90,90,90,90,10);
  
}


 void establishContact() {
   while (Serial.available() <= 0) {
     Serial.print("Arduino data: ");
     Serial.println("Waiting for commands"); 
     i+=1;
     delay(500);
   }
 }




void loop() {
  establishContact();
  if (Serial.available() > 0) {
     myChar = Serial.read();
     mySt +=myChar;  //receive string from Computer
   }
   if ((mySt.length() >0)&(!Serial.available())) {
     m[0]=mySt.substring(0,3).toInt();
     m[1]=mySt.substring(3,6).toInt();
     m[2]=mySt.substring(6,9).toInt();
     m[3]=mySt.substring(9,12).toInt();
     m[4]=mySt.substring(12,15).toInt();
     m[5]=mySt.substring(15,18).toInt(); 
     Braccio.ServoMovement(10,m[0],m[1],m[2],m[3],m[4],m[5]);
     Serial.println(mySt);
     mySt="";
     delay(500);
     
   }


}

 

The Arduino sketch is pretty simple, for the GUI I used C#, so the only thing there was to do was to establish serial communication between the two. The Arduino side really had nothing complicated, it was a matter of opening serial and looking for incoming data and then converting the data into angles for the servo. This part needs a rework for sure, but I just went with one string and chopped into bits which I then converted to angles, while it works pretty well, it does have a few bugs every now and then.

 

C#

     This part was new to me, since I've never used serial ports in C#, but it turned out not to that much of a problem. I used a couple of trackbars for setting up the correct value and added a couple of labels, a button and check box and that would be it. While it's extremely basic, it really does what I want it to do. It allowed me to try out BRACCIO and see how it functions. Here is a picture of the GUI. As soon as I figure out the bug I am getting with the live movement part I will be uploading everything to github since I haven't found much material on BRACCIO online and this to me seems like a simple solution to just play around for a bit.

 

 

Playing around with BRACCIO

     I planned on putting a few videos of BRACCIO here, but unfortunately before I could do that, I managed to strip the gears in one of the motor mounts so I'll have some videos later down the line. For now I only got this one video which shows one of the example codes running on BRACCIO where he grabs a sponge spins around with it and places it back on the table.

 

 

4. Disassembly

     Now when we're done playing with the robot, time to take it apart. There are a few reasons for this, first off I need to make a precise 3D model of it, as well as mount the servos correctly. By mounting the servos correctly I mean setting them to their neutral position of 90 degrees and then screwing on the parts (I haven't done this the first time around, which means all of the values need to be adjusted by a couple of degrees). One more thing that happened while playing is I destroyed the teeth on one of the motor mounts.Luckily the kit comes with a couple of spare mounts. Here is how the ruined motor mount looks like.

 

{gallery} Destroyed Motor Mount

Normal Part: This is how the part should look like

Ruined Part: This is how the ruined part looks like, you can see that the teeth on the inside have worn out. I had a few problems while testing my GUI where the robot would get stuck, so that's probably why it happened in the first place

 

 

Time to take it apart

     The disassembly itself went pretty fast. I started by untangling all of the motor wires first, and then started removing parts by starting at the claw. I didn't disassemble the claw completely because I don't currently need a 3D model of it, so I left it as one piece. There are 2 types of motors in the kit, and all of the motor connectors are numbered so I didn't have to worry about mixing anything up. One really great thing about how this kit was designed is, how many of the parts are used multiple times in the build, which certainly brings the production cost down, but also made the job of making the 3D models much much easier for me, as I will shot in the next part of the blog. Here is a before and after picture of the disassembly.


 

5. 3D model

     After the disassembly was done, it was time to start making all of the 3D models. I don't need it to be extremely accurate, but I wanted to do it as best as I could. So it was time to pull out the calipers and start measuring and making the parts. The biggest problem here is that all of the edges are rounded, so it took a lot of time to measure everything properly, again I didn't need to be extremely precise, but I want to get it as best as I can. Here all of the parts that I've made so far.

 

Parts

{tabbedtable} Tab LabelTab Content
Base Plate

First of all, let's begin with the Base Plate of BRACCIO. It's the simplest piece by far, so it went pretty smoothly, here are some pictures.

 

 

{gallery} Base Plate

Base Top

This was one of the more complicated parts, and quite frankly I couldn't measure everything, so I had to made assumptions on how the original designer made the part. As much as I could see, it was half a sphere on top of a cylinder, and from there I went and cut out everything that was needed as well as rounding out all of the edges.

 

{gallery} Base Top

Top View: The top view of the 3D model

Bottom View: The shell command really made things easy here!

Back View: The back view

Top View: A lot of the edges are rounded, so I eyed out to very it looked ok to me, it won't be that accurate but I really don't need the accuracy there

Front View: The front view showing all of the different shapes of the part

Bottom View: I managed to measure the thickness of the walls at a few different places, and it seemed consistent, so I figured the original designer also used something like the shell command and just went with it


While some people find this kind of work pretty tedious, because it can be honestly, It was honestly interesting trying to make this in 3D just from the measurements I had.

 

Here is also a short video of the base top:

 

Universal Motor Mount

This is the part that I've already talked about, the servo motor mount. As I've already shown, I managed to destroy the teeth on the inside of it, but luckily the kit comes with a couple of replacements of it, which is an amazing thing. They can be changed really fast, and I've also seen that they can be bought in a support kit if you run out of them.

 

{gallery} Universal Motor Mount

These are just some of the parts, I'll be finishing the 3D models in one of the next blogs, where I will also go into the full assembly and maybe try out some simulations with it! I'm still looking for what software would be best for running some robot arm simulations, so if anyone has suggestions or prior experiences please let me know!

 

6. Plans

     My plans for this part of the project are finishing up all of the 3D models, getting the important dimensions that I need and ultimately running some simulations with it. Furthermore, I'll design a couple of potentiometer mounts which I will be using as angle sensors for all of the joints. One more thing I will be doing is testing out some markers and deciding on how I will be designing a holder for them, got the main idea on this, but I want to test stuff like at what angles will the marker write properly, what kind of pressure needs to applied and so on. In the next blog I will be looking at the other side of the project, the Raspberry Pi and the whole starter kit, as well as start work there with trying to set up voice commands on it!

 

7. Conclusion

     I really like the whole BRACCIO kit, I feel it's a great kit for someone like me who is trying to get into something like this, specially the fact that there are spare motor mounts, because in my case they are obviously needed. I'm sad I didn't get to film and show a bit more of the robot, but I will in the near future for sure. As for the whole project for this challenge, I had a little bit of a slow start but there is a lot of time left (though I am well aware on how fast that time can fly by), so it's time to go and continue working! Thanks for reading the blog, hope you liked it!

 

 

Previous Blog: DiPinto Da BRACCIO - Idea & Plan - Blog 1

Next Blog: coming soon

 

Milos