Intro: Rover Repair Robot
Rover Repair Robot is my inspiration after I read about Hubble Space Telescope repair and upgrade mission back in 2008 - 2009. I came to a realization that long term mission would be possible soon. I started design a robot that was not focus on mobility for exploration but a flexible arm that can pick up tube, battery, nuts, bolts and even screw the bolts in place.
12/28/2016 Update: RRR now equipped with 3D printed parts after step 6.
Step 1: A Rover Robot With a Quadruped Robot's Leg.
2009 is the year I just moved to U.S. It took me 3 years to researched, designed, and saved up to purchase a basic rover platform from Lynxmotion's website . Then I started experiment with different design for the wheels and the arms mechanism.
The first design was great on paper, the idea was giving the rover the ability of a quadruped robot. Let’s talk a little about quadruped robot walking gaits exclusively the tripod stability. (Thanks to OscarLiang blog ) .
The concept of the tripod stability is there will always three legs on the ground to make a triangle with the center of gravity within the triangle area then the robot would be stable. The rover could use this in its advance. In situation when the rover occurs obstacle, rover can use the tripod stability to walk over the obstacle or move wheels to a more advance location(click here to see rover in action, sorry for the video quality , it has been a while back :) ) .
After couple experiments, I then realized a big problem. The HS-645 servos do not have enough torque to hold up the rover’s weight over a long period of time. The HS-645 servo got event hotter when I applied
or try to apply the tripod stability concept. I then had to scratch the idea of a rover with quadruped leg ability (until 2 years later when I discovered servo gear box technology from Servocity's website, then I knew this idea would be possible if I have the fund to invest in the servo gearbox.)
Because of the funding limited, I had to move on to the rover arms design.
Step 2: Two Is Better Than One ?
My first design of the Rover Repair Robot arm was two gripers working side by side. The design capable of picking up object from one side pass object to the other griper (sorry for the video and picture quality, it has been a while :)).
The design again was great in concept, however after conducted more experiments with the design I came to a conclusion. The double arm or humanoid’s arm design is a monster of energy to operate and the final outcome is passing object from one side to the other. I was using Lynxmotion Visual Sequencer and SSC-32 Servo Controller to conduct the research.
Let's cover the basic of Lynxmotion Visual Sequencer (LVS). Just like its name, the program provides user with an interface that could control up to 32 servos O_o and also create group of sequences for the robot then we have a robot's demo (I know sweet ha). However to harvest this super power, the robot need two things with it to operate. First thing is a laptop or a Micro Processing Unit (Arduino, Raspberry Pi...) and the second thing that is required is the SSC-32 Servo Controller.
The SSC-32 is a powerful board. With the cable of control up to 32 servos, the board provide number of jumper give the flexible of power source option. What I mean here is the board can be power by its own power source ( up to 11 volt ) instead of using the power provide from MPU ( only up to 5 volt and weird thing start happen with the sensors when the MPU reaching over 5 volt).
I have the link under if you want to learn more about Lynxmotion Visual Sequencer & SSC-32 Servo Controller.
As you can see in the terrible resolution video and pictures, one of my sequences project was using the right gripper to pick up the red box from the right location, after a success transfer , the left gripper then move the red object to the left location. Which is the goal for the rover at beginning. So then it was time to do some analysis to the system to evaluate the safety, efficiency, realistically.
Safety: there were couple safety problems I discovered during the experiment.
- First was the idea of passing object in the air. The ideal sounds hard and it is. Object can fall onto the robot surface that possibly cover with solar panel.
- Second was the rover arm collide on each other during operation and sometimes even tangling, the gripper kept holding on to object. This event could causing damage to the servo gear box system decrease robot operation time.
Efficiency: there were also couple major efficiency problems I discovered during the experiment.
- During routine operation like roaming and avoiding obstacle. The robot required a fair amount of energy to keep the arms from swinging around.
- During complex operation like picking up battery, picking up construction tube . The robot require a large amount of energy from the power bank to operate two arms in the precise matter.
Realistically: there was only one problem. However, it took me longest to realize the complexity of the code required to upload on the Arduino board almost unachievable by a single person in a short period of time from scratch. The robot was only able to archive the task if the object got place at the same location over and over ( sound like car manufactory program system) due to the nature of the LVS software. If I was going to use Arduino board then each arm would require their own inverse kinematic code to recognize their position during operation. On top of that, each arm will need to connect to series of sensor in case of tangling or holding on to object.
Let's talk about what did I get out from this process:
- I have learned a lot through out the process. I have a better understand of the Arduino Software ( IDE ).
- I also learn a lot between something "kool" showing but has little use in real life.
- And the most important thing I have learned from this is the limit of the hardware I had accessed at the moment.
From all the points above and much more, I started to design my model simpler and more energy effectiveness. Here is some of the later design single arm, seven degree of freedoms. Pick up Battery Project & Pick up Construction Tube Project.
I have to say thank to Coleman Benson And Jeffrey Arcand from Robotshop Forum. Before I join the forum the speed of the research process is negligible. I got stumble on the most simple and rookie mistakes, however CBenson & JArcand were never discourse and helped me understand everything from electronic to coding the Arduino.
Step 3: Time to Do Some Math :}, My Favorite Part.
Sometimes I jokes with my friends, "I cannot descried my love for math right now, our relationship is complicate :D" . The reason I joke about such thing is because after taking couple engineering course I then realized that most of the Math problem I had in my Calculus class can be solve just by couple line of code in MATLAB or Maple program. This experience gave me a sense of how the real world problem actually solve , and realized that Math was not a really priority at the moment.
Step 4: Time to Do Some More Math :}, My Favorite Part 2.
I was wrong because Math was one of the biggest part of the project. However, I love Math so I was enjoying myself solving these problems. Sometimes I took extra time to go over my own work, or even solves it over again.
To be functional , the Math need:
- A constant variable in this case will be the length of each of the arm sections.
- An independent variable in this case will be the angle between the two arm section.
- A dependent variable in this case will be the coordinate of the tip of the robot arm.
( My mind was blown away when I came to conclusion >"< .)
Here is what I call "test case". I measured the robot arm and wrote the Math for the robot arm.
Step 5: Time to Test the Real Thing !
The arm setup as same as the diagram with A, B , C , D represents the connection point where the dependent variable angle form.
Using basic properties of trigonometry; inverse; I was able to predict the coordinate of point D would be if I have control over the dependent angle in this case I am. Therefor, in theory, if I know the coordinate of point D then I can resolve for the angle require between each joint. And I did prove it on the paper.
The reason behind the Math function is every time I feed the function with point D x and y coordinates, the function should return the proper angle for each joint to achieve the task. And then that when I realize that why the Math function call Inverse Kinematic. >"<