I've been working on this since over a year now and am happy with the results achieved, so why not brag about it :).
The project originated from ArduCopter after I bought one and started playing with it. I've rewritten all of the functional code in an object-oriented fashion. I reused the driver part of ArduCopter code, though. I'm using APM1 as low-level autopilot and iEi PM-PV-D5251 Single Board Computer (SBC) with 2GB RAM and 32GB flash for higher level tasks performed onboard. The SBC runs Linux (Ubuntu 10.04) and Robot Operating System (ROS). I used rosserial for APM<->ROS communication.
I'm planning to release the code I've been using around October as LGPL and was wondering if there is interest for such a project in the community. The platform is aimed at research entities and hobbyists. The platform I'm flying costed less than 1000USD (without laser scanner visible on images below). There is also an option to replace the SBC I'm using with a PandaBoard or BeagleBoard for lower cost (and lower performance, though). Other platforms (like fit-PC without casing) would fit too, of course.
The code is not compatible with ArduCopter any more nor I think there is need for it to be, but I'm open for all good ideas. It only supports APM1, but I think migrating to APM2 shouldn't be very hard.
Any friendly questions invited, I'm curious of your opinion. I'm planning to record a promo-video in one or two months with the quadrotor performing indoor SLAM, just don't have time for it now.
Looking good. I see you have the hokuyo lidar on there as well.
I think it's inevitable that people will want to add higher level functions on top of the arducopter/ardupilot so it's very interesting to see that you've already done that although it also looks like you had to rewrite all the lower level stuff as well.
I think we'd thought that people would use mavlink to handle the communication between the boards so it's interesting to see you use rosserial. Presumably you think that's a much better or more natural choice? On the arducopter side we'd tend towards mavlink because that's what we already use for the GS <-> Arducopter comms...but it's probably more important that the "customer" is happy with the protocol.
Yes I agree Randy. This is a very interesting development. Marcin would you mind commenting on your choice to use rosserial vs MAVLink. Does it integrate better with the ROS than MAVlink?
Thanks for your interest Randy and Craig.
Actually, I might just not remember all the reasons why I decided to go with ROSSerial and not MAVLink about a year ago any more. Definitely, I found ROSSerial to be better documented back then and hence easier to use, and GCS compatibility was not an issue for me. I must also say, I'm using some of the older ROSSerial versions onboard, not its newest release.
As far as I can recall, serialization algorithms in both MAVLink and ROSSerial were very similar (this might have changed, now, though). I also don't know how well ROS drivers for MAVLink are, so I cannot compare those two too well, I'm afraid.
I think, the biggest drawback for both ROSSerial and MAVLink is APM's (Atmega1280 / 2560) lack of native USB or ethernet support, anyway. I guess for the low-level autopilot (APM) to be able to interchange data with higher-level boards at higher bandwitdh this is really the first design step had to be taken. Are you planning to go this way with APM3, maybe?
This looks like an impressive... thanks for sharing!
Can I ask a simple question, where did you get your blade guards?
Thank you Mark - my brother designed them for me (as he did the whole frame), I then ordered all parts at a local manufacturer. It's all black acrylic / G10 fiberglass. I've also got additional elements for the guards making them protect at the rotor blade level, too - they can be mounted using the M3 wholes visible at the protector's edge.
It's a very nice design, is it possible for you to share it ?
I'm building a similar drone, using Xtion as a depth sensor, and an odroid arm board for the video processing computation. How's going you work by the way ?
Your blade guard could be nice if I adjust them to my indoor version.
congratulations to this great work!
i would be very, very happy for some informations how to communicate between APM and ROS. i have to do a project where i want to equip a 3DR ArduCopter Hexa-B Frame with pandaboard (with ROS) and kinect to do mapping and indoor SLAM, too.
for that i selled a hexacopter with APM 2.5. i don't have that time of one year, just till end of this year, so i would be very thankfull for some help.
maybe you can contact me for that?!
in the mean time, I added a video to present current project state: https://vimeo.com/49829221. I'm assuming, this is more or less what you're aiming at. As partially mentioned above it's APM1, custom, but originating from ArduCopter frame design, x86 architecture SBC and a Hokuyo URG-04 LX LIDAR. I also used Gmapping and ROS for SLAM. No laser scan orthogonalization mechanism like http://www.ros.org/wiki/laser_ortho_projector used, hence relatively low map quality - this due to time and computational power limitations.
I don't know how good your background in UAV systems is, but still I wouldn't assume achieving the above is possible in 2.5 months time (even though I really think there is still much to be done to make my system perform better). Or could you please explain your background or project environment a little better, please?
Before you dive into quadrotor SLAM, make sure PandaBoard has enough processing power to perform Kinect based SLAM, or, at least, it's possible to interface Kinect sensor using ROS on an ARM based computer - my experience tells me it's not trivial (I tried that once with BeagleBoard, with no success, unfortunately). Are you planning to perform 3D, or 2D SLAM (eg. using kinect_laser, like here: http://www.hessmer.org/blog/2011/04/10/2d-slam-with-ros-and-kinect/)? Mind, you won't be able to estimate odometry using the second approach, as it is possible when using real laser data, which is necessary for SLAM.
I don't know how much APM2.5 is different from APM1 I'm using, but I'd assume it still has no native USB support or ethernet, which severely limits bandwidth and link reliability. For the above reason I'm rather planning moving to PX4: https://pixhawk.ethz.ch/px4/, than further extending my system. For the same reason I will possibly not release it as is under LGPL, as it is not yet release ready (though functional), and I don't have the time to make it so.
Please, let me know if you have any more specific questions. Of course, I wish you all the best with your project. Just wanted to give you some stuff to think about, in case you didn't have much experience in the field yet.
thank you very much for your fast reply!
your video is great, it would be dreamy if it's gonna work like that at the end.
i see the problems you are talking about and i really know it will get very hard work.
little background to the project: we have to do a project by university and we are with 4-5 students working on one project. our knowledge about UAV starts at zero, so there is a lot of work! i am going to do the software-part, maybe i will get help by one more student. i am the only one who is involved with ROS, but i am also not a pro, just beginner, but i am learning by hard and don't give up very fast.
the first thing i wanted to do is to make the pandaboard ready with ROS and then get kinect working. also i know that this is more than plug&play and there will be problems, but there are a lot of threads in world wide web which solved pandaboard + kinect.
if this works i am going on to get SLAM working, i wanted to start with RGBD-SLAM, but i also see this could be very critical. if this doesn't work i am looking for an other SLAM.
my goals are high, i know that but i am really gonna try to reach it!
and sorry for my late answer, but my notebook is broken atm.
i think specific questions gonna come by doing :D i would be very thankfull if i could ask you then again ;)
hi again ;)
some days left since my last reply. here is what i have done:
pandaboard + ros + kinect... i love it :D it doesn't work and doesn't work and doesn't work... but i still believe that it's possible and i think that i will reach this goal in the next 2 or 3 weeks.
the hexacopter is now ready to fly, just need to calibrate it, but that should not be a problem.
but there is still a big point i did not work on till now: communication between adrupilot and ros. i will try to communicate about usb, but there is still no idea how to do. could you maybe explain how you solved this point? you talked about rosserial, but i still don't know how to use?!
I am also very interested in Multicopter with adequate TOF camera like Kinect to be able to implement a simple SLAM system at least capable of reference point establishment, path finding and multipoint navigation.
From what I have been seeing the PX4 is a far more capable system than the APM and given it's existing application with stereo cameras it should easily have the power to deal with a Kinect like distance image which should be MUCH less computationally intensive than stereo camera image overlay distance image extraction.
Of course, the other significant news is the Capri by PrimeSense (the same people who make the Kinect) of a much smaller and lighter version of the Kinect's distance image camera.
I have a Kinect which I have been exploring with Microsoft Robotic Studio and will probably soon get a PX4 to begin experimenting with connecting them.
From what I can tell, the Capri works the same as the distance camera portion of the Kinect, so when the Capri is available it should be a drop in for a practical multicopter application.
I hope you are still pursuing this and would very much like to hear about your progress.
i finished my work (for the first time) and i was possible to stream the kinect data via wi-fi from pandaboard to the network. then i used a notebook to work with this data in ros. for me it was possible to lookup pointcloud2 in rviz so it should also be possible to work with some SLAM-algorithm and so on!
the way i streamed the data was with USBIP which works fine!
so good luck for your project!