VACUUM ROBOT

Hello i am pretty new to Arduino but i have done all the examples in all the books and done my own GSM and BlueToothe projects integrating them into my home automation and system and i'm in need of a new project, so i decided on my own personal version of the robot vacuum cleaner

i know there are a handful of examples and forums out there about vacuum robots but i have yet to find one i like or think would be efficient, so i have a couple questions about programming, looking for any input or suggestions on hardware too.

First i see a bunch of people say i want to be able to bring it places and have it work, and then say i might use markers and triangulate my location and so on, my issue with that is why do you need to know where it's at? My idea is to have it go in a linear pattern back and forth across the room moving one half unit across the y axis of the room (the y-axis being the perpendicular axis to the way it is going across for a longer distance) if it sees and object it will slow down and move over until it can keep going X direction if it can't that means there must be a wall and will follow that and when it gets to the end of that function it will be done and dock, i believe this code will be much more simple that it seems, the thing i would like to do is for it to map its path and store it.

first question is : what would be the best way to store the map?

second question : is it redundent to store the map? i mean since it can navigate around a room and all it shouldn't matter? i just thought it would be cool for it to remember a room and then in the future when i become more proficient with arduino maybe have it know the map and not just move linear but figure out what room it's in and choose it's own path as long as it covers the whole map and then return to base

third is when it docks i think i will have the charging station have a small piece of copper or something that it runs into connecting a separate circuit for a transistor or relay that disconnects the power to the robot and only connects it to the charger, then when it's done charging the charger will have a separate simple component level circuit with a linear servo and just push the bot off of the charger when a timer tells it to, i feel like this is relatively simple and didn't see anyone with this idea so naturally i wonder i'm missing something obvious and this won't work.

fourth lol sorry i know this is almost an essay minus good grammar : i can't decide whether i want to stepper motors two plain dc motors two dc motors with an encoder(essencialy a servo) or one big DC motor with encoder and a front wheel to steer with a small linear actuator, would be pretty simple and i could have one distance with direction attached at certain distances making mapping easier but steering with two wheels rather than a front steering undriven wheel would steer much better just not sure how to be absolutely sure its traveling straight because if one motor is even slightly slower than the opposing it will be going at a slight angle and eventually not cover areas and i know stepper motors but they are just so damn heavy, not sure where to make the compromise here

oh and the vacuum will be attached after i have the bot learning room, that's the easy part!!

well i think that's it, i'm still in the planning stages of this and that's why i'm here, i apologize for the length of this but instead of posting 5 different things i figured i'd compact it

why do you need to know where it's at?

If it doesn't know where it is, how would it know it isn't re-cleaning the same area over and over again?

Process of elimination type of deal don't go where you have went before, that's why I'm having such a hard time deciding on a drive system because any flaw in wheel spin or not doing what it thinks it's doing and like you said unless it knows where it's at(which in this case it wouldn't) will appear to just be doing a randomized pattern obviously there will be a function for determining the difference between a wall and a object to go around but the goal would be start on one side and go to the opposing and be done

xEE77x:
because any flaw in wheel spin or not doing what it thinks it's doing

Guess what: In any such system you are always going to have error - error in the output, error from the sensors - error everywhere.

If you want to have any hope of making the robot navigate properly within a certain level of probability of being in the proper location where it thinks it is (but only within a certain level of error - mind you!) - then you need to be thinking in this manner.

The problem, though, is that it is very difficult (but possible) to build a robot that navigates in such a manner. The main concept is known as SLAM (Simultaneous Localization and Mapping - google it), and there are as many possible solutions and algorithms as you could care to investigate (some are sized for small processing systems, others for much larger systems). Despite what you may read or see as you research, SLAM can be implemented as an outbound, on-board sensor system (think on-board the robot chassis LIDAR, ultrasonic sensors, cameras, etc) or an inbound, off-board beacon or sensor system (think cameras looking in on where the robot is, or IR beacons, or ultrasonic beacons, etc). Most SLAM discussion, though, focuses on sensors located on the chassis of the robot - so keep that in mind.

The process is difficult to understand, and more difficult to implement - but it is at the heart of the most advanced robot navigational systems being researched and implemented. That said, you don't see such things on robot vacuums, because they are so difficult to implement well, and that costs money, lowering profits (well - not completely true - I suspect that the Neato XV series use some form of simple SLAM or something real close). Instead, you get the typical random walk and edge following behavior such as the Roomba uses. Much simpler to implement, and the parts are inexpensive (which translates into larger profits).

Dyson just released a Dyson Eye 360...