So how to determine if the robot has actually hit something? After playing around with dead reckoning navigation using the encoders this was the next task to resolve. I figure you need mechanical bumpers of some sort. It needed to know if it hit a wall on the left or right corner or if it was a direct or nearly direct hit. A soft foam surface would probably be required to be glued on the bumper to prevent damage to walls.
This is a close up of the mechanism made out of a bolt and spring and the bumper out of kiln dried wood.
Here is a view of the whole robot base hitting a wall at an angle. I tipped the base upside down in one image to show the mechanisms.
Here is a view of the whole robot base hitting a wall directly (Both switches on).
Hi robotBuilder,
Your bumper design reminds me of one I saw in the book “Sensors for Mobile Robots”. That one had a 360 degree bumper. The way he solved the problem with the corners was to cut a slice out of each corner at a 45 degree angle to the sides. The corner was also a “floating” bumper like the sides, but when it collided with something the corner would push into one of the sides which would make contact with the switch nearest the corner. Clear as mud? Anyway it looked pretty clever and it was made out of wood like your design.
To err is human.
To really foul up, use a computer.
The bumper was over complicated and mechanically unreliable. If the switches failed the base would just keep trying to push through the wall. My current robot base, which I haven't worked on for some time now, is a robotic vacuum cleaner that comes with a simple bumper arrangement. Another extra test for physical contact might be monitoring the motor currents or encoder outputs. A reliable robotic base monitors its own physical states rather than carry on as if everything was working properly. My real interest is software as I don't have a workshop and tools for building things.
I’m putting together a robot with a mechanical bumper and I was thinking the same thing about having some other ways to check for a collision when the bumper gives a false negative. I imagine three situations:
1) the robot collides with something and the wheels don’t turn;
2) the robot collides with something and the wheels spin; and
3) the robot moves whatever it comes in contact with.
I hoping my bumper design covers situation 1, but I’m not sure about what approach to take with the other two cases. How might you monitor a robot's phyisical state? Collect historical sensor data? I suppose that if my indoor robot doesn't turn in x minutes then it might be snagged on something...
To err is human.
To really foul up, use a computer.
I suppose that if my indoor robot doesn't turn in x minutes then it might be snagged on something...
A lot of answers and problems are found when you actually build a robot base and start experimenting.
Ideally over time you can add more sophisticated sensors like vision that can "see" what is happening to supplement physical contact. Of course the hard part is the software to make use of that information.
1) the robot collides with something and the wheels don’t turn;
Unfortunately, this rarely happens 🙁 The wheels almost always turn.
3) the robot moves whatever it comes in contact with.
For smaller bots, this usually makes it skew the current path or stop on one side or spin a bit.
You can use the encoders and/or a current sensor to see if a wheel is going faster or slower than expected by measuring the current draw of a motor, or some gauging of how the encoder is changing based on some threshold range you expect.
I use bumpers as a "last defense" mechanism, and do a halt and reverse to try to get back on course again.
Here is my spin on an instrumented mechanical bumper. If I had it to do over again I don’t think that I’d go the 3D-printer route. Even though the bumper has a textured surface it’s still pretty flexible and on top of that it’s out of round. It’s held in place with piano wire which works surprisingly well. I found a circuit in a book by Jones and Flynn which let me tie all three micro-switches to one analog pin. In theory when the front two switches close I get a fourth voltage to indicate a front collision, but in practice the bumper seems to be a little too flexible and it just closes one switch.
To err is human.
To really foul up, use a computer.
With a round base you don't really need to reverse, simply rotate.
This is the bumper arrangement of the Deebot base I am using. The bumper switches also act as springs to hold the bumper out. There are IR windows in the bumper for the IR proximity sensors.
I imagined I could make one myself out of two round plastic containers with one being slightly larger than the other. The larger one could be cut to make the bumper.
I found a circuit in a book by Jones and Flynn which let me tie all three micro-switches to one analog pin.
I guess it is a digital to analog conversion. Each switch delivers a current via its own binary weighted resister value. You could probably use a small DAC IC to take up less space. You might monitor say eight switches. I assume software is used to convert the analog input back to a binary number equivalent where each bit represents the on/off state of a switch?
Wow, thanks for uploading your diagrams and photo. It's great to see how a commercially successful robot is built. I may try that central spring idea. The IR windows sound intriguing. Is that just a clear plastic window in the bumper? I got my robot running today doing obstacle avoidance and I like having the IR sensors low to the ground.
I also thought that I could fashion a bumper out of some food grade container made out of HDPE. I may try that one yet if I can't find some way to heat form a sheet of plastic.
As far as the switch circuit goes, electronics is definitely my weakest link and you lost me with "binary weighted resister value". With 5 volts applied by my Arduino clone, I use an analogRead(A0) to read the voltage The 10-bit ADC turns that voltage into a value between 0 and 1023. In my code I'm looking for bands of values that indicate which switch was closed. A trial and error approach for sure. I uploaded a photo that has the voltages I found when I breadboarded the resistors.
To err is human.
To really foul up, use a computer.
Commercial products have to actually work and be trouble free as possible.
The windows are cut out of the bumper and a shaded transparent sheet on the outside.
There is some other sensor on the bumper itself which maybe someone knows what it is?
I got my robot running today doing obstacle avoidance and I like having the IR sensors low to the ground.
I am always interested in other people's robots and the physical, electronic and code details 🙂
Well, I have a mechanical problem to solve before I can get back to the programming. I'll update you when I've finished it.
To err is human.
To really foul up, use a computer.
In my quest for a better circular bumper I tried heat forming a piece of HDPE around a clay pot I raided from the garden. I used a heat gun on the low setting and after about 5 minutes, wrapped it around the pot and let it cool for about an hour and a half. It worked great. There was some spring back so I attached the ends together with some M3 bolts. I spent more time looking for a large pot than I did shaping it.
If anyone is interested the HDPE was 1/8” by 2.5” by 4’ and I picked it up at McMaster-Carr.
To err is human.
To really foul up, use a computer.
I tried a new mechanical bumper design that I think I’ll file under ‘epic fail’. I saw the design in “Robot Mechanisms and Mechanical Devices Illustrated” by Paul Sandin.
The idea is that an oversized disk with be screwed down to the smaller sprung disk. When the robot hits the unseen table leg it pushes the smaller disk into a switch and you’re off to the races. I imagined this bumper to be sandwiched between other layers of a tiered robot. Here are the problems I have with the design:
1) The coverage is pretty bad. It works fine at the three points where the springs are attached but any other direction doesn’t trigger the switch.
2) Very limited ‘floor space’ to attach spacers and to drill holes for wires to pass through.
3) Determining the correct spring tension will be a trial and error process, because I don’t know enough Physics to get it right the first time. Eg. with this version, a robot would have to be traveling around 10 meters/second to push the disk into a switch, BANG!
I have to admit that I pretty much ran out of patience with this one. I want to build a few small, cheap, sensor rich robots and this bumper seems to take up too much real estate. If anyone wants to try this I’d suggest a robot with a diameter of at least 10”, but the coverage will probably still be lousy.
Tom
To err is human.
To really foul up, use a computer.