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.