I have not done much more with NavBot since getting it to its current level of dead reckoning via wheel encoder odometry.
A big part of this has to do with the amazing summer we’ve had. The other is that I’m just not that motivated to develop high-level robotics logic on the Arduino platform. The Arduino has been fun to use, and very easy to setup, but at the end of the day a microcontroller can only do so much. Its strength is its ability to interface with and control hardware but it is not well suited for software development or handling complex logic.
I’ll most likely still use the Arduino platform for some projects but moving forward I will start migrating to 32 bit ARM based microcontrollers as you get much more bang for your buck and, quite frankly, I’m sick and tired of fighting the Arduino’s build process in order to modularize my code, so there are no up-sides for me to stay with the Arduino at present. [I have grown up using makefiles so while IDE’s are nice I’m just as happy with command line.]
For the software side of things I’m going to make a really great big jump to the ROS Platform. There are lots of pros and cons to using ROS and I will cover them in more detail in a later post. For now I’ll just give an cursory overview:
- From their site: “The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications.”
- ROS primarily runs on Ubuntu Linux but has also been ported to, or works with other Linux/POSIX based platforms such as OSX (which is the platform I’m using).
- It is open source and has a huge community of contributors, mainly in the research field but also in industry.
- It functions at the operating system level. That is, a ROS application is made up of collections of individual programs that communicate with each other via TCP/IP and UDP interfaces. ROS applications can be distributed across multiple computers.
If you are new to Linux-like operating systems then understanding and learning ROS will be extremely difficult. Even if you are adept with Linux, ROS is still hard to get into. While there is good documentation and detailed tutorials, ROS itself is very abstract and builds off or incorporates other systems so that it can be very hard to take it all in. Definitely not for the faint of heart.
For me the motivation for switching to ROS is for the impressive array of “packages” available for autonomous robots, as well as the development and simulation tools that come with it. There is also support for Microsoft’s Kinect device (which I happen to have) and while I have had fun developing odometry based dead-reckoning, I am much more interested in vision/sonar/lidar based navigation.
However, initially I’m going to be using the Raspberry Pi to host ROS and handle high-level logic so there are going to be limits on what can be achieved, particularly where robot vision is concerned. Nevertheless, the Rasperry Pi should be a good starting point.
It’ll be interesting to see how this all pans out.