What do you think about Mobile Robotics Programming Toolkit? - toolkit

Did anyone use Mobile Robotics Programming Toolkit? What do you think about it?
I am currently studying the SLAM problem (I am quite new in this area) and I am planning to implement a Mono Slam solution based on Extended Kalman Filter (C++). Do you recommend to implement my solution on top of Mobile Robotics Programming Toolkit, or it would be better to start from scratch?

Well, I'd say it depends. Why would you use it? Does it provide anything special that you need, like feature extraction or visualization? Since it's for learning purposes, I'm assume their monoslam implementation is of little interest.
If not, why bother? Once you have your measurements, you pretty much only need a decent linear algebra library. I recommend Eigen; it's easy to use and does everything you need.
Disclaimer: I haven't actually used MRPT.

FYI, Eigen is also included in MRPT. I am starting to use MRPT as well. It's quite a good tool for SLAM beginner->advanced I think.

Related

AI library framework in Ada

I'm looking for an Ada constructed framework for AI. I think Ada would be perfect for implementing temporal and stochastic paradigms due to its tasking and real-time mechanisms, but did not find anyone who tried to make such a libraries. Actually I did not find strong implementations on other languages too. For C# I found http://www.c-sharpcorner.com/1/56/, and for C++ I found http://mind.sourceforge.net/cpp.html but both did not get much popularity. Maybe java has good AI libraries too, but I do not know. So, do you know an Ada implementation? Would it be useful for more anyone? If you know libraries from other languages, it would be useful to know and compare the implementation models in java, for example. Thanks.
Here's a few resources:
Book, rather old, though (1989): Artificial Intelligence With Ada
Looks like some kind of university student dissertation: MUTANTS: A generic genetic algorithm toolkit for Ada 95
Dmitry Kazakov's AI stuff, mostly fuzzy logic. (Dmitry writes really nice software.)
I once had a school AI project that used the CLIPS AI builder library.
Since I avoid coding in C where I don't have to, I made an Ada Binding to it, which I believe is licensed without restriction. If you want it, have at.
I used it to build an expert system capable of playing a user's opening moves in Empire. All the code is either in Ada, or Clips' expert system specification language.
Here's a potentially useful Java library. I haven't heard of any Ada libraries. Ada is a great language, though.
Here's some genetic stuff.

Programming Artificial Intelligence in Robots/Autonomous Robots

Im looking into to starting to do some AI programming especially aiming at robots. Creating robots that think and act for themselves. Just wanting some advice on what coding platforms/languages are out there that are best suited to this area?
Im a microsoft developer through and through, so would I be able to accomplish this with the MS Robotics studio at all. Or is that all based on remote control robot development?
Am a little confused because there is so much contradicting information out there. Please help.
Thanks in advance
What kind of robotics are you trying to do? (i.e. is it a robot where a laptop or another powerful device might be an acceptable controller? Or are you looking at a small true embedded robot?)
If it's the first, MS Robotics might be right for you. It uses .Net IIRC so there's a nice low entry barrier. If you wanna do something smaller, maybe look at Arduino, which has so much support around its platform that you'll probably find what you need. Arduino uses something very very much like C++.
Regardless of what you choose, find a kit robot. I can't stress this enough. You want to spend time doing AI, not getting hardware to all work correctly.
If you wanna try something weird and interesting, the Parallax Propeller Microcontroller is a relatively cheap arudino-weight processor with 8 cores. Might be nice for AI, where thinking generally is best done in parallel.
Try using webots for designing the control. I found it very intuitive and friendly... lets you focus on your core programming logic. Hardware should start from Boebot (the very basics) and graduate to Arduino platforms as you gain knowledge.
Try getting a Pioneer, once you move to real robotics (excellent sensor suite but prohibitively priced). Or try flying bots like A.R.Drone etc. It would be nice to program and will give you insight into UAVs as well.

How to pick a language for Artificial Intelligence programming? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 years ago.
Improve this question
What is the best programming language for artificial intelligence purposes?
Mind that using suggested language I must be able to employ any AI technique (or at least most of them).
All the cool bearded gurus in what's left of AI research use Lisp :)
There are two big camps: Common Lisp and Scheme. They have different syntax, etc. Lots of good stuff written for both.
Java is a very popular all-purpose language but a lot of the interesting stuff in AI / Functional Programming, such as passing closures as first-order objects, is clumsy to do in Java.
My personal preference would be to stay away from Windowsy languages like C# and F#. Cool people develop under Unix. Or Linux if they're cool but poor.
Some cool but weird people program in Haskell. A reasonably modern FP language with good performance. I tried it once, it made my brain hurt; but you might be smarter than I am.
UPDATE: Answers to Steve's questions.
I wouldn't be the one paying for a Unix variant; that's what corporations and research institutes do. The idea is, you want to be doing AI research for an outfit that sinks millions into their hardware and doesn't balk at paying a few thousand for an operating system. That's the kind of outfit likely to have good food in the cafeteria and/or pay well for doing fun work. But I'm certainly not knocking Linux.
F# may be cool but I see a whole raft of issues getting it to run on Linux or any other Unix (that's what I meant by "windowsy"), and I don't want to work under Windows (that's what I meant by "personal preference").
To elaborate on the "windowsy" theme: You mention that F# is an OCaml variant. From my own admittedly brief research, it seems that F# is missing functors, OCaml-style objects, polymorphic variants and the camlp4 preprocessor. A functional language without functors? Really? If one were disposed to not like Microsoft, as I admittedly am, one could conclude that they had gone ahead and crowbarred a perfectly good functional language, OCaml, into something they could get to run in their CLR so they could claim to "have" a functional language. Finally, because I don't suspect, I know that Microsoft always prioritizes market dominance over product quality, I don't plan to touch F#. But this is my personal preference, and clearly identified as such, while we're really more concerned with making a good recommendation for mary.ja45 .
I have better reasons to recommend Lisp over F# and even OCaml and Haskell. These are mostly based on the historic preponderance of Lisp over any other language in the AI field.
The bulk of AI literature is based on programs written in Lisp or Prolog. If nothing else, good knowledge of Lisp would allow a student to understand the sample programs. My personal favorite AI megaproject, Cyc, has runtimes in your choice of Common Lisp or C.
In the TIOBE index of programming language (as seen and used in industry), Lisp takes 15th place while Haskell takes 43rd and F# and OCaml place below 50th. Presence on the market correlates with employment opportunities, naturally.
That said, it's quite possible that a number of the younger "AI interesting" languages are poised to skyrocket. If some major research institute published some groundbreaking, defining-the-field research in, say, Scala, you'd see Scala's popularity advance sharply in the research community and, with some lag, in industry.
I (obviously) can't comment on F#'s other qualities but you're as welcome to make recommendations as I was.
Python seems to be used a lot in the general scientific community. It has a lot of libraries available and it's easy to learn.
I'll throw Scala into the pot.
it's usable for functional programming
it can be made as fast as Java
it's a modern language with lot's of nice aspects
Java seems to be a bit popular in AI, too and so you can use all those Java libraries from Scala
I've solved all exercises from a basic AI course in Scala. It worked really well.
If by "all of AI" you also mean machine learning, which I guess, Matlab, R and Python+Scipy should definately be mentioned.
I personally use Clojure for AI programming, and have found it to be a great all-rounder AI language.
Reasons:
It's a Lisp, and Lisps have historically been very strong the the AI field
It's a homoiconic language with powerful macros, so great for code generation and genetic programming. This is a surprisingly useful property for AI programming (and possibly explains some of the success of Lisp in general in this space)
It runs on the JVM and can easily access all the Java libraries for number crunching (Weka, Colt, etc.).
It's good for rapid interactive development - it's very dynamic and you can do pretty much everything interactively in a running Clojure REPL. No need for recompiling etc.
It matters probably whether the programming environment is academic or not, but for most non-academic AI application development I would recommend sticking with a mainstream language like Java or C++. One needs to be able to interface readily with other COTS or open-source software packages, and this can sometimes be difficult or impossible in more "exotic" languages. For academic work this may be a less critical issue.
Additionally, performance can be important for many applications, and mainstream languages generally have the most heavily-optimized compilers, e.g., C++ or Java.
It is true that functional programming languages like LISP, Scheme, etc have specialized features that may make it easier to implement particular AI methods, but I do not believe this to be true for AI-related programming as a whole, e.g., quantitative machine learning methods usually don't require a functional language. If you need access to both functional constructs and general software packages, there are some tools for LISP to help with this, and the recently-developed Clojure is a LISP-variant that runs on the JVM and can access Java libraries. Also, Groovy is another JVM-based language that includes support for closures.
Lastly, some programmers like paradigm flexibility and/or fast prototyping for AI projects. Ruby and Python both see some AI-related usage for this reason as multi-paradigm languages that can also be used for scripting.
Like most things in programming, the best answer for which language to use in AI development will ultimately depend on the needs of your projects.
It really depends on what kind of problem you are looking at. Also, how "deep" you want to go into AI stuff. If you want to learn from the basics and just implement theoretical AI stuff, go with a higher level language-- as in functional programming (and proven in AI) like lisp, or prolog. If you know what problem set you are dealing with and want efficient, go with something like Java, C++ and use a toolkit to do the stuff.
Since you mention Machine Learning look into Weka Toolkit in Java for some of these stuff.
Pick the programming language with AI techniques the same way you pick a language for any other project:
What is the problem you are trying to
solve?
Is there good support available for
the language?
What are the customers requirements?
I would recommend Prolog as a very good programming language used to implement AI systems.
There is no "best" language. Each one has its merits. When I studied AI, mostly we worked with lisp and prolog, but I've been most productive in AI with Java/C# and F# has a lot to offer.
How about a framework written in Java, supporting "High Level Logic" and agent style communication.
http://highlevellogic.blogspot.com/2010/11/when-will-we-have-artificial.html
It also depends on the size of your dataset. For web-scale datasets you may want to use Map-Reduce and that implies Hadoop. Hadoop is in Java -- but you could use any language (Python, etc.) for your Map-Reduce functions.
There is also a java framework called weka, developped by the university of waikato. I don't know wether it anwsers your question, but it may help.
Quoting wikipedia: «Weka supports several standard data mining tasks, more specifically, data preprocessing, clustering, classification, regression, visualization» and more.

What is the best path for working with 3d graphics?

Right now, I think a combination of C and openGL is what I need to learn, but it seems like there is still more to it that I need. Also, I'm not sure where to start. I know some C, from reading the C Programming Language (K&R).
If you understand the concepts behind 3D computer graphics then OpenGL + C is about all you need. If you need some help with the concepts then I'd suggest the NeHe OpenGL tutorials and a good reference book like The Red Book.
It depends on what you are trying to do:
If games interest you and you just want to develop amateur stuff without all the fuss, XNA + C# is by far the easiest way to start.
If you plan on becoming a professional game developer, your best bet is DirectX + C++.
If you like open source and just want to mess around with general 3D, OpenGL + C/C++ will offer you a nice community of dedicated people.
There are of course a number of engines and library you can use on top of the last two, such as Torque, Geometric Tools, etc.
I suggest you to take a look at .NET possibilities, i.e XNA Framework
I don't think there is more to it. What makes you think so ?
C and OpenGL is enough to begin with.
I've found that using 3D Studio Max and actually making models helped a lot when it came to learning some OpenGL. I could understand all the intricacies with normals and whatnot.
I would really recommend against trying to learn C and OpenGL at the same time. They are both complicated and more so when you mix them.
I would recommend extremely highly getting, reading, and working through some of the examples in the book Computer Graphics: Principles and Practice. Yes, the book is MASSIVELY out of date; it's still the canonical reference for this sort of thing.

An amnesia patient's "first" functional language? (I really like Clojure...)

I was recently diagnosed with a cascading dissociative disorder that causes retrograde amnesia in addition to an existing case of possible anterograde amnesia. Many people have tried to remind me of how great a programmer I was before -- Right now I get the concepts and the idioms, but I want to teach myself whether I know or not. I think I can overcome the amnesia problems in part with it.
My question for you, stackoverflow, is this: I recently found Clojure and it... it feels good to use, even in just copying down the examples from whatever webpage I can find. My goals in learning a functional programming language are to create a simple webserver, an irc AI bot of some variety, and a couchdb-like database system, all of which lightweight and specifically for education. What flaws does Clojure have? Is there a better functional programming language to use right now for education /and/ application?
I think Clojure is a very nice language. If I should point to any defect it is that it's very new, and even though the language seems very mature and production ready, the tools and frameworks around it aren't. So if you are going to make, for instance, a web-app, don't expect to fire three commands and have a "Your first web app is running, now read this documentation to create your models"-page on your browser.
There aren't that many libraries written in Clojure yet either, but that's not a huge problem if you consider that you can use almost anything written in Java.
Haskell currently has a large following and a growing base of libraries and applications. It's also used for education and research. I find it a very nice language to use.
Haskell, Erlang and Clojure are all good choices. I would personally recommend Clojure, you might be able to do some interesting database stuff with the Software Transational Memory system that is part of Clojure.
You list CouchDB in your question, and it's written in Erlang, which is meant to be a pretty engrossing language once you get into it.
I have no personal experience with Clojure, but i really recommend F#. It's quite a powerful language in the style of OCaml. I really like it because it's debugging tools and IDE are second to none, and you can take advantage of practically every library on the (huge) .NET platform.

Resources