element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Just Encase
  • Challenges & Projects
  • Design Challenges
  • Just Encase
  • More
  • Cancel
Just Encase
Blog Orb-Weaver Rover - Blog #4 - Making the Rover!
  • Blog
  • Forum
  • Documents
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Just Encase to participate - click to join for free!
  • Share
  • More
  • Cancel
Group Actions
  • Group RSS
  • More
  • Cancel
Engagement
  • Author Author: milosrasic98
  • Date Created: 22 Feb 2022 9:55 PM Date Created
  • Views 5615 views
  • Likes 11 likes
  • Comments 8 comments
  • Arduino MKR WAN 1300
  • python
  • rover
  • 3D Printing
  • lora
  • arduino
Related
Recommended

Orb-Weaver Rover - Blog #4 - Making the Rover!

milosrasic98
milosrasic98
22 Feb 2022
Orb-Weaver Rover - Blog #4 - Making the Rover!

Orbweaver Rover - Making the rover

Orb-weaver Rover - Full Battery Test <----- Previous Blog

Table of Contents

  • Orbweaver Rover - Making the rover
  • 1. Introduction
  • 2. Inspiration
  • 3. Design
    • Gearbox
    • Wheel assembly
    • Differential suspension
    • Connecting everything together
    • Full Assembly
  • 4. Build
    • Gearbox
    • Suspension
  • 5. Assembled rover and suspension test
  • 6. Summary

image1. Introduction

Hi! This will be my 4th blog for the Orb-weaver project. In the last blog, I covered a 45-hour long test I did with one of the sensor boxes. In this blog, I will focus on the main part of this project, the rover itself. This is something I’ve been working on in the background since the project started pretty much and now you’ll see why. This blog will be dedicated to the mechanical design of the rover, and at the end of this blog, we will have what I will call the minimum configuration rover. Before I get to my design, let’s take a look at where I got the inspiration from.

2. Inspiration

As you might have guessed, I drew inspiration from the NASA rovers that are currently exploring Mars. There are 5 rovers sent to Mars by NASA: Sojourner, Spirit, Opportunity, Curiosity, and Perseverance. These are amazing 6 wheel robots that are literally on another planet, the thought of that still seems so unreal, but also so amazing. They are much bigger in real life than I have previously thought.

imageimage

Some things I find quite interesting about the rover are the rocker-bogie suspension, the radioisotope power system (MMRTG), and a whole bunch more cool tools on the rover themselves. Another thing that I never thought about was the rover speed. The rover's top speed is about 5cm/s (2 inches). However, in order to ensure a safe drive, the rover is equipped with hazard avoidance software that causes the rover to stop and reassess its location every few seconds which brings the overall average speed down to about 1cm/s. I found a lot of cool things shared by NASA about the rover, here are a few cool links, one with an interactive 3D model!

  • Interactive 3D model: https://mars.nasa.gov/msl/rover-3d/
  • About Curiosity: https://mars.nasa.gov/msl/spacecraft/rover/summary/
  • Rover wheels and speed: https://mars.nasa.gov/mer/mission/rover/wheels-and-legs/
  • Electrical power: https://mars.nasa.gov/mars2020/spacecraft/rover/electrical-power/ & https://mars.nasa.gov/msl/spacecraft/rover/power/

3. Design

There’s a lot of information shared by NASA on their amazing rovers, but now it’s time to get to the design of my baby rover. Before I get to the design itself, let’s first look at what are some of the things I plan on integrating on the rover that we need to incorporate into the design:

  1. RC wheels - though I would love to make my own, I sadly can't work with TPU on my current setup
  2. Digilent motors that I've shown in the first blog
  3. MG995 servo motors
  4. Hammond Enclosure as the main structure and body - if this doesn't show toughness, nothing will!

With that out of the way, let’s take a look at the final design first, and then I’ll go part by part explaining the design for it!

image

It's just a drawing teaser, but we will get to the real thing by the end of this blog! Let's take a look at specific parts of the rover first and how they're designed.

Gearbox

The first part of the design that I will cover is the gearbox. This is the part that will connect the Digilent motor to the RC wheels I’ve shown above. The easiest thing to do would be to mount the wheel directly to the motor, but this means that the weight would be transferred directly onto the small bearings of the motor and that we would be stuck with the gearing that the motor has. Here is a video to show why that would be a bad idea for the rover:

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

The wheel spins way too fast for what we need, so why not reduce the speed and increase the torque along the way. In the first blog, I covered a lot of simulations and calculations for different kinds of parameters for the rover and set on the reduction ratio of 3.

There are many different ways we can transfer torque, we can look at different gear arrangements, belts, and so on. I will cover 2 approaches here, one will be using something that can be categorized into a belt drive and a geared transfer method. I wanted to use small O-rings to transfer the torque, but the rubber was too slippery and it would sleep on the pulleys no matter how tight I got it, so I tried using a couple of common rubber bands, which proved to work wonderfully. Here are a few pictures of the design:

image

The motor is connected to a small pulley which is supported by a small 4mm bearing and it transfers torque to a bigger pulley that is mounted on 2 5mm bearings which are the ones that need to handle the weight. This way we’ve transferred the load from the small motor bearings to the much stronger 5mm bearings.

imageimage

I went with this approach for now because it allows for the small pulley to slip in case the wheel gets jammed somewhere. This is important because I don’t have current sensors for the motors (I plan on getting them for a future build), so I don’t burn out the motor or the controller when it slips. I did a few tests with the rubber bands, and when I used 3 of them, I got about 1.5A on the motor when I blocked the wheel, which is acceptable both for the motor and the motor controller. I also made a geared design that fits into the same form factor as the one with the rubber bands. Here is a picture of that.

image

It performs surprisingly well and quietly considering I am using just 3D printed gears. But if the wheel got jammed, there would be a possibility of killing the motor or the controller which I am trying to avoid. Since I plan on working on the rover for quite some time, this is the gearbox that will in the end be on the rover because I will have much more precise wheel odometry compared to the rubber band approach.

There have been some changes on the parts shown above which you can see in the next blog. I've added a metal nut in the big pulley and the wheel hub, so the grub screws don't destroy the threads.

Wheel assembly

Besides having a geared DC motor, every wheel is also equipped with an MG995 servo for steering each of the wheels. The easiest thing to do here would be to mount the gearbox and wheel directly to the servo motor with an M3 screw, but that construction wouldn’t fare well under any kind of load. That’s why I redesigned it to use an M8 screw and an 8mm bearing so I can take the load off the servo completely. The servo mount also has a part that connects to a PVC pipe that goes to the rover suspension.

imageimage

One thing I tried giving a thought to here is leaving some space in the 3D printed models for the wires to go inside the pipes rather than on the outside. This will give the rover a much cleaner look and also there will be less chance of snagging a cable somewhere when they are hidden inside the pipes.

Differential suspension

Now we come to the suspension of my rover. Unlike the NASA rovers, I will have only 4 wheels instead of 6, so I can’t go and copy the rocker-bogie suspension completely, but I can take inspiration from it. Here is a link to an interactive 3D model of the rover where you can click on the suspension to get more details about it: https://mars.nasa.gov/msl/rover-3d/

What rocker-bogie does amazingly is how it moves the body of the rover only half of what the wheels are moving, keeping all of the wheels on the surface and therefore keeping the whole rover more stable. Instead of going with the rockers, I went with a differential from an old RC car that I have. This causes the same effect as with the rockers, but it gives me the additional ability to attach a continuous servo motor to the input shaft of the differential to have active control of the rover body as you will see later in the blog. Here are some pictures of how I designed the suspension for the rover.

imageimage

The main structural part for the suspension will be one of the Hammond enclosures that I will use as the body of the rover. The differential and bearing mount, as well as the suspension braces, will be screwed into the box to give it extra rigidity.

imageimage

Connecting everything together

The only thing left to do is connect the wheel assemblies to the suspension and body. To connect everything together I designed 2 half pipe clamps that attach with a couple of M3 screws with a big M8 bolt that goes all the way to the differential through the suspension bearings.

imageimage

Full Assembly

With all of that done, here are a few pictures of the finished assembly as well as a video showing how everything goes together.

image

image

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

That would be it for the model. The design is not yet finished, there are still a few things I want to change on it, as soon as I do that, I will upload all of the files on GitHub. There are some details I didn't get to talk about at this moment, but I will cover them in the next blog where I'll be playing with the electronics and the wiring,

4. Build

After a long few weeks of designing this when I had free time, it was finally time to start building the rover. You can see from the video above how most of the parts go together. One thing to point out is that I design the holes for the screws with a smaller diameter, for example, for M3 screws, I put a 2.4mm hole, so the screw can cut its own threads when I screw it in. Here I'll cover how the gearbox should be put together as well as how I assembled the suspension part.

Gearbox

The gearbox by far has the smallest parts and requires the most time to be assembled properly. As mentioned above, I will now show the rubber band version and how to assemble it, though, the geared version follows the same process, it just needs a bit of grease to run properly. Here are the parts that will be needed for the gearbox.

image

Here is the list of parts:

  1. Digilent motor
  2. Big pulley - 3D printed
  3. Small pulley - 3D printed
  4. Wheel hub - 3D printed
  5. Motor plate - 3D printed
  6. Gearbox casing - 3D printed
  7. 2 625RS bearings 
  8. 694ZZ bearing
  9. M5 threaded rod - 50mm
  10. 4 M3x15mm screws
  11. 2 M3x8mm screws
  12. Rubber bands
  13. 2 M3 grub screws

The first step is to put the bearing into the housing and the motor plate, this is most easily done with a small vice or with a small rubber mallet as I did.

image

The next step is to thread the threaded rod into the big pulley and secure it with a grub screw. To thread the rod into the big pulley, I recommend using a drill on the threaded rod and holding the big pulley in the hand. You should end up with something like this.

image

The next step is putting the motor into the motor plate and securing it with the 2 shorter M3 screws. While we're working with the motor we can also put on the small pulley which press fits on the shaft. I put it on the motor with the help of a small rubber mallet.

imageimage

The next step is putting the rubber bands on the pulleys. Since they are stretched, you will have to hold the big pulley with one finger. As mentioned above, I used a total of 3 rubber bands, since I got about a 1.5A draw with that setup.

image

While holding the big pulley, now you need to put on the gearbox casing. This can be a little fiddly to get the motor shaft in the 4mm bearing, But as soon as you get that, it will all click in place and you should have something that looks like this.

image

The only thing left to do is to attach the gearbox now to the motor casing and the rest of the wheel assembly which is done with the 2 top screws on the gearbox casing (the 2 on the right on the picture above), and here is how that looks in the end.

image

Suspension

This is where things get a bit more tricky. They get tricky because we need a way to connect the M8 bolts with the differential. One way of doing this would be designing and printing small adapters. I decided to go a different but much more robust way. The differential has a small steel coupling on each side, so with a lot of help from my dad, we turned the M8 bolts down to 6mm plus we drilled and tapped a hole for a 3mm screw to go through the center of the bolt.

imageimage

The steel couplings were a bit too small for the M3 screw, so I used a Dremel and one of those diamond bits to just make a small hole for the M3 screw.

imageimage

With all of that done, here is how the suspension part looks assembled.

image

5. Assembled rover and suspension test

With all of that done (the gearbox part 4 times) I put everything together for the first part and here is how it turned out in real life!

image

And here it is! I was so thrilled to see it on its wheels for the first time. It's one thing seeing it on the screen at different iterations and a completely different thing seeing it standing beside me. There are a few things that I of course see now after building it that I want to change, but those are some small things that will be fixed by the next blog. For example, the wheels on the outside get a bit too close for comfort, but that's a simple spacer that I can print and the problem will be fixed. I love the suspension setup and how it conforms to anything.

imageimage

One thing you might notice in the pictures above is a yellow cable and that the box is completely level in both pictures. I assembled everything with the continuous servo underneath, so I thought I might as well do a fast setup to see how well the rover could balance the body. To do this, I attached an MPU6050 IMU inside the enclosure and put an Arduino Mega inside. To keep it level, I wrote a small code that implements a PI regulator for keeping it level, and as you will see in the video it needs some tuning, but I will do that once all of the electronics are on board. Here is the code for the PI regulator as well as the video of the active suspension.

// Basic demo for accelerometer readings from Adafruit MPU6050
#include <Servo.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>

Adafruit_MPU6050 mpu;
Servo myServo;

float reference = 0.0;
float kp = 10.0;
float ki = 0.12;
float e = 0.0;
float angle = 0.0;
int servoCommand = 0.0;
float servoStationary = 90.0;
float intSum = 0.0;

void setup(void) {
  Serial.begin(115200);
  myServo.attach(2);
  myServo.write(90);
  while (!Serial) {
    delay(10); // will pause Zero, Leonardo, etc until serial console opens
  }

  // Try to initialize!
  if (!mpu.begin()) {
    Serial.println("Failed to find MPU6050 chip");
    while (1) {
      delay(10);
    }
  }

  mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
  mpu.setGyroRange(MPU6050_RANGE_250_DEG);
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
  Serial.println("");
  delay(100);
}

void loop() {

  /* Get new sensor events with the readings */
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
  angle = a.acceleration.x;
  /* Print out the values */
  Serial.print(angle);
  Serial.println("");

  e = reference - angle;
  intSum += e;
  servoCommand = servoStationary + round(e*kp + ki*intSum);

  if(servoCommand > 180 || servoCommand < 0)
  {
    intSum -= e;
    servoCommand -= ki*e;
    }

  myServo.write(servoCommand);
  

  delay(10);
}

And here is a video of the rover balancing:

You don't have permission to edit metadata of this video.
Edit media
x
image
Upload Preview
image

6. Summary

This was such a rewarding part of this blog to see it finally stand on its wheels, and an even more rewarding part will be seeing the rover move for the first time, which will come in shortly! My next goal is to quickly redesign a few crucial parts that I've noticed need a touch-up and then start with the wiring and soldering so I can finally get some movement from the rover! There is a lot of work to do and not a lot of time, but it will be rewarding in the end! Thanks for reading the blog, hope you like it!

Milos

Relevant links for the competition:

  • Just Encase Design Challenge
  • Just Encase Design Challenge - About
  • Just Encase Design Challenge - Challengers

Link to my GitHub where you can find all of the files used for this project (codes, 3D models,...):

  • GitHub Orbweaver Rover

Link to my Project Collection:

  • Milos Rasic - Project Collection

Orb-Weaver Rover - Blog #3 - Full Battery Test <----- Previous blog

  • Sign in to reply
  • milosrasic98
    milosrasic98 over 3 years ago in reply to genebren

    Thanks! I'm glad you like it!!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • milosrasic98
    milosrasic98 over 3 years ago in reply to mp2100

    Thanks, glad you like it! Easy way to save me the trouble of burning the motors/controllers instantly!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • milosrasic98
    milosrasic98 over 3 years ago in reply to dubbie

    Thank you! Angus from Maker's Muse did a really good series where he built a small platform with 3D printed gearboxes, that's what inspired me to give it a try. I'll be switching to the geared gearboxes in the near future because they won't slip, but I'll need those current sensors to make sure I don't burn anything.

    www.youtube.com/watch

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • milosrasic98
    milosrasic98 over 3 years ago in reply to javagoza

    Thanks! I love that idea hahahahhaha, I'll make sure to include a test like that when I get the rover moving!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
  • genebren
    genebren over 3 years ago

    Very cool work done here.  I really like all of the mechanical work that you have done on your rover.  The results of all this hard work are very evident in your video clips. Well done!

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • More
    • Cancel
>
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube