How to implement RANSAC and kalman filter or particle filter algorithms with ROS packages?

I'd like to implement those algorithms by using ROS packages to solve one way the SLAM problem. I know that gmapping, Rviz, slam_gmapping and robot_pose_ekf (for extended kalman filter) could be useful packages, but I'm kind of lost. I don't ask a tutorial because the next days I'm going to start studying deeper this subject, but I need orientation in the procedure.

"a possible way to implement RANSAC algorithm" http://pointclouds.org/documentation/...

Note: I'm planning to do something like this indoors. https://www.youtube.com/watch?v=17W8dkzkvWA. I'm working on ubuntu. I have the "kinect" (xbox360), and for now I don't know what kind of cheap 2WD robotic platform choose in pages as amazon, robotshop and ebay (although Canakit 2WD, DFrobot 2WD and alphabot seems to be a good option). More than anything, I need orientation about how to mix everything to solve the SLAM problem with a 2WD robotic platform, the kinect and ROS packages :)

Thanks in advance

• Well, the thing about ROS and other similar open source platforms is that they are highly optimized to be used and there is a lot of 'grey' area in how the whole system interacts. Atleast internally (libraries, matrix optimizations). One good way to learn the SLAM problem is to understand the 'math' and try to get simulations. Or in your case you could assume the robot parameters and plug in a SLAM to show how its better. Here's one for the simulation link Oct 31, 2018 at 20:43

1 Answer

Like with anything in engineering, you first need a good definition of what "success" (or "done") means. SLAM running how fast? Under what particular lighting and environmental conditions? Using what kind of processing power, what kind of weight, driving what kind of chassis, with what kind of battery lifetime? Then, you need to break the problem backwards into sub-components, and establish parameters for those components. Then, you need to go looking for solutions that exist to fulfill each of the tasks of those components.

It seems like you're going to other way -- "Here's a pile of parts, what can I build with this?" That's okay for exploratory investigation, and creativity (a box of Legos!) but it's a bit harder to hit any PARTICULAR goal using that method.

So, to build "forward" like you're attempting to, you still need a way to monitor what's going on. Thus, you want to make sure that your development platform (the computer on the robot) has some kind of monitor, or remote access. X Windows over WiFi might work. A 10" LCD on the robot with a wireless keyboard/mouse may work, if it's easy to read from where you need to be to monitor.

Once you can measure and inspect everything, then it's a process of adding each component from the bottom, poking it with expected stimuli, and making sure it performs as expected.

Screw wheels to motors, and connect encoders and motor drive to motor controller. Send commands to motor controller -- do the wheels move as you expect them to?

Add a ROS program to drive your robot. Make sure it connects to the overall ROS system on the control computer. Add a component for driving the motor controllers. Make your program send the appropriate command to make the motors move half a foot. Does the robot move half a foot? This will also make you familiar with how different processes/modules within a ROS system communicate using the ROS message bus topics.

Then, add a ROS module to read the Kinect data and display it on the monitor. Does it look okay? Can you read this from your control program?

Keep adding bits and pieces, verifying that each piece performs in the way you expect. Ideally, also verify what the piece does when you drive it outside its "sweet spot" or when it loses control or gets a bad command -- saftey is important!