Romulo is a robotic forklift that i made for my high school graduation project. The goal of this project is to show the relationship between the industrial automation and robotics, a forklift robot is the perfect candidate for this role because of his ease of implementation inside of a non-automated warehouse.
Romulo was designed to simulate an industrial project, so in the design i tried to consider (in a small scale) safety and efficiency standard.
- Based on PIC18F24K22
- Full automated loading and unloading from and to the "warehouse"
- Color sensor to differentiate the "pallets"
- Line sensor to navigate in the "warehouse zone"
- PWM - LAP motor control for ensure the braking
- Auto standby in case of low battery
- Buzzer for acoustic signaling during maneuvers
The majority of the electronics for the robot is in the mainboard. It acquires all the sensors, controls the motors, the stepper, checks the battery and more. The core of the board is the PIC18F24K22, programmed in C++.
Two integrated H-Bridge SN754410 are used for driving the motors. One IC is for the stepper and one, with a not-gate IC, controls the traction motors in PWM LAP control. The LAP control ensures a more precise control of the motor, but most importantly it permits to really brake the motor, which is fundamental for a forklift robot.
The power for the robot comes from a 12V 1.2Ah Pb battery, monitored from the PIC by a voltage divider. A linear voltage regulator 7805 is used to power all the logic and control electronics.
The pushbuttons used for the color selection. Each button creates a precise tension which is read by the PIC ADC.
The PCB layout design is done on Orcad suite because it was the CAD used in my school. The PCB is also printed in my school, here's a photo of the mainboard assembled:
An industrial robot needs to know a lot of things from both the outside environment and the robot itself. Professional robots use LIDAR, artificial vision, and other expensive stuff to monitor the outside, but since this is a low-budget project i had to find a more DIY way.
For tracking the position, i created a line follower-like track, this permits Romulo to navigate through the whole "warehouse" using simple line sensor. By adding markers on the track (actually, they are simple black rectangle larger than the line) Romulo is able to know when he has reached a defined position. With a marker near every "pallet" in the track, Romulo is able to navigate the track and know when it's time to stop and star the maneuver to pick up the pallet. Here is a simple drawing that shows the track.
There's plenty of IR sensor arrays on the internet, but i decided to make my own sensor board, simply by using an IR led and an IR photodiode. Note the bad choice on the sensor board: i should have used a I/V converter instead of a simple resistor. This has created a lot of problems: the high impendence input of the OP-Amp in the mainboard affects the readout of the sensors, and the flat cable used for transport the signals over the mainboard cause lots of noise on the signals. In the circuit below you can see how the 6 sensors are interfaced with the PIC. Each signal is digitalized by a simple comparator (i know, i should have used a Schmitt Trigger) and then they are used to create 2 analog signals. Each of this resulting signal represents the readout of 3 sensors. I know it's a very complicated way, and it works very bad. I'm currently working on a "correction board" (aka shame-board)
The goal of Romulo is to replicate a robotic forklift. In practical terms an user must be able to select the desired pallet, then the robot goes into the "warehouse zone", searches and pick up the right pallet and come back to the user. So the robot must be able to differentiate the pallets. In a professional robot, this is done by barcode, QR code or even RFID tag. In this project i used a simple color sensor. I chose, like for the line sensors, to make my own board. I used the TCS3200 IC, which is an array of 64 photodiodes, divided in 4 group, each filtered by color: red, green, blue and no filter. You can select with 2 inputs the desired filter, and the IC will output a digital signal with a frequency proportional to the intensity of light of the color you selected. By acquiring the value of every filter you can calculate the RGB value of the color you are reading. After the TCS there is an f/V converter (LM331) to convert the frequency to an analog signal, much easier to read, and the result works very well, the value is stable and very accurate.
The carriage and the lift system are the most delicate parts of the entire project.
The carriage must be lightweight but strong enough to support the load, the lift system must run smoothly and the positioning must be precise.
There's plenty of ways to do this, steel rods and linear bearing, rail and linear guides... but looking for a more DIY solution i found that truck curtain rails work very well. It surprised me, but using two of these rails and 4 of the original slides i'v been able to make a carriage that slides pretty well. There's only a little play on the tilt, but nothing to worry about.
Here's a prototype of the carriage, you can clearly see the 4 slides.
The final carriage and fork:
The lift system consists of a string (actually a braided fishing wire) attached to the carriage that rewinds on a motorized spool on the base of the robot. A steel rod on the top of the rails allows a vertical lift of the carriage.
The motor used for rewinding the spool is a stepper recycled from an old laser printer. Why a stepper? Because it permits a precise positioning without a closed loop control and has a high holding torque to maintain the fork lifted. In this case even the detent torque (the maximum torque by the motor when it's not powered) is enough to maintain the fork lifted. So it's possible to lower the power consumption by turning off the motor when the fork needs to stand still.
Here you can see a video done during the test of the lift system to count the number of steps necessary to fully lift the carriage.
The construction started from the chassis. Romulo has 4 wheels, the front ones are motorized and the back ones are freely steering and act as a pivot point.
The driving wheels are 80mm (3.15") in diameter and are made of rubber, they have good traction on the surface where the robot will work. For the motors, i used a pair of micromotors HV155.12.90 that i already have from another project. They have a torque of 25Ncm (2.21 lb-in), which is perfect (if not too much) for a robot of this size.
For the chassis, i used two angular aluminum profile, as you can see in the photo below.
And here you can see the very engineering way to couple motor and wheel:
And the chassis finally completed
Note that i used two "pivoting wheels" instead of ball casters, and this was a very bad idea. During maneuvers and change of direction, the pivoting wheels need space to rotate and get in the new position. This creates a small load variation on the motor and, since Romulo use an open-loop control system, affect the result of the maneuvers.
The solution could be to use ball caster or Omni-wheel.
You can even see in the photos the two sliding guides for the carriage and the two screws for the line sensor.
The next log will cover the big part of this project: the carriage, the fork and the lift system.
Truly, a most amazing piece of machinery constructed here. Perhaps one of the best engineering builds that I have seen in a while. Very nicely done!