I'm doing a project with the iRobot Create 2. I want it to be able to map out a room and navigate to a point for example. My problem is that the robot doesn't have any distance sensors. What it can do is detect if there is an obstacle ahead of it or not (0 or 1) and it can measure how far it has traveled in millimeters. Any good techniques out there or best to buy an IR sensor?
With footslam or actionslam it is possible to locate pedestrian and smartphones even they have no distance-sensor. It is an advanced stochastic technic which is derived from classical "sebastian thrun slam" but uses less input data. The precision is low and thats the reason why footslam is often used together with other localisation techniques like satellite GPS. But, a "footslam only" implementation is possible. Most research on this topic is done by DLR (Deutschen Zentrums für Luft- und Raumfahrt) which also has invented lots of similar algorithms like MagSlam oder WISLAM.
According to iRobot Create 2 sensors the irobot Create 2 has a "light bumper" as a sensor. To use this in a stochastic model the following sources may help:
- Hassan A. Karimi: Indoor Wayfinding and Navigation, 2015, page 125-139
- Dmytro Bobkov: Simultaneous Localisation and Mapping for 3D Pedestrian
- Michael Hardegger, Michael: Navigation based on FootSLAM using Inertial Sensors, 2012
- ActionSLAM on a Smartphone: At-Home Tracking with a Fully Wearable System, 2013
According my knowledge, there is no ready-to-run footslam-implementaton on github which can be used via out-of-the-box. But under the term "indoor mapping" there are a lots of opensource projects which are used together with smartphones.
I would suggest you better used some ultrasonic sensors. iRobot is compatible with both arduino and raspberry pi. There are lots of good and cheap sensors, for both platforms, along with some good examples on the net. You have to find a way to save the data though. That means two things: 1. you need extra space to save those (if in arduino) and 2. find a formula to create them. What you suggested with the travel per millimeters should definitely be into consideration. Sensors are to declare what and where is an obstacle. Another problem is making your robot "unerstand" in which point of the mapped area is it moving at a given time, so that it won't have to check again what an obstacle looks like. Last but not least, it has to know when to stop mapping a room. Start by letting it calculate the dimensions of the area it will be moving into (going round the walls).
"I want it to be able to map out a room and navigate to a point for example."
to map the room you need to localize the robot (thus you have to implement SLAM algorithm), unless you have a mean of recuperating the position of the robot (localizing it)
Navigation is another problem, I suggest you start working on the SLAM problem to map the environment later on you could tackle the navigation problem
" My problem is that the robot doesn't have any distance sensors."
you don't necessarily need a distance sensor (LIDAR for example), you can use a web cam and implement a kind of SLAM known as monocular SLAM