190 linhas
11 KiB
HTML
190 linhas
11 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
|
|
|
<link href='http://fonts.googleapis.com/css?family=Audiowide' rel='stylesheet' type='text/css'>
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen" />
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/pygment_trac.css" media="screen" />
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print" />
|
|
|
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
|
|
<script type="text/javascript" src="https://blockchain.info//Resources/wallet/pay-now-button.js"></script>
|
|
|
|
<title>AR.Drone Autonomy</title>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<header>
|
|
<div class="container">
|
|
<h1>AR.Drone Autonomy</h1>
|
|
<h2>Autonomously flying an ARDrone in Javascript!</h2>
|
|
<a href="https://github.com/eschnou/ardrone-autonomy"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub"></a>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container">
|
|
<section id="main_content">
|
|
|
|
<p>An autonomous flight library for the <a href="http://ardrone2.parrot.com/">AR.Drone 2.0</a>, built on top of
|
|
the <a href="https://github.com/felixge/node-ar-drone">node-ar-drone</a> library. </p>
|
|
|
|
<p>Instead of directly controlling the drone speed, you can use Autonomy
|
|
to plan and execute missions by describing the path, altitude and
|
|
orientation the drone must follow.</p>
|
|
|
|
<p><strong>Autonomous means that this library will move your drone automaticaly to reach a given target. Experiment with this library in a closed/controlled environment before going in the wild !!</strong></p>
|
|
|
|
<div class="screenshot">
|
|
<iframe width="560" height="315" src="//www.youtube.com/embed/wPXsG_fjncM" frameborder="0" allowfullscreen></iframe>
|
|
</div>
|
|
|
|
<h2>Features</h2>
|
|
|
|
<ul>
|
|
<li><p><strong>Extended Kalman Filter</strong> leveraging the onboard tag detection as the observation source
|
|
for an Extended Kalman Filter. This provides much more stable and usable state estimate.</p></li>
|
|
<li><p><strong>Camera projection and back-projection</strong> to estimate the position of an object detected by the camera.
|
|
Currently used to estimate a tag position in the drone coordinate system based on its detection
|
|
by the bottom camera.</p></li>
|
|
<li><p><strong>PID Controler</strong> to autonomously control the drone position.</p></li>
|
|
<li><p><strong>Mission planner</strong> to prepare a flight/task plan and then execute it.</p></li>
|
|
</ul><h3>
|
|
<a name="planned-features" class="anchor" href="#planned-features"><span class="octicon octicon-link"></span></a>Planned features</h3>
|
|
|
|
<ul>
|
|
<li><p><strong>VSLAM</strong> to improve the drone localization estimates.</p></li>
|
|
<li><p><strong>Object tracking</strong> to detect and track objects in the video stream.</p></li>
|
|
</ul>
|
|
|
|
<h2>Documentation</h2>
|
|
|
|
<ul>
|
|
<li>API Documented in the <a href="https://github.com/eschnou/ardrone-autonomy">README</a></li>
|
|
<li><a href="http://www.slideshare.net/eschnou/20130807-advanced-programming-with-nodecopter">Advanced Programming with Nodecopter</a> on Slideshare</li>
|
|
<li><a href="https://eschnou.com/entry/advanced-programming-with-nodecopter-62-25019.html">Blog post</a> with additional example videos</li>
|
|
</ul>
|
|
|
|
<h2>Example</h2>
|
|
|
|
<p>This module exposes a high level API to plan and execute missions, by focusing on where
|
|
the drone should go instead of its low-level movements. Here is a simple example,
|
|
with the drone taking off, travelling alongs a 2 x 2 meters square ane then landing.</p>
|
|
|
|
<div class="highlight highlight-js"><pre><span class="kd">var</span> <span class="nx">autonomy</span> <span class="o">=</span> <span class="nx">require</span><span class="p">(</span><span class="s1">'ardrone-autonomy'</span><span class="p">);</span>
|
|
<span class="kd">var</span> <span class="nx">mission</span> <span class="o">=</span> <span class="nx">autonomy</span><span class="p">.</span><span class="nx">createMission</span><span class="p">();</span>
|
|
|
|
<span class="nx">mission</span><span class="p">.</span><span class="nx">takeoff</span><span class="p">()</span>
|
|
<span class="p">.</span><span class="nx">zero</span><span class="p">()</span> <span class="c1">// Sets the current state as the reference</span>
|
|
<span class="p">.</span><span class="nx">altitude</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1">// Climb to altitude = 1 meter</span>
|
|
<span class="p">.</span><span class="nx">forward</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">right</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">backward</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">left</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="p">.</span><span class="nx">hover</span><span class="p">(</span><span class="mi">1000</span><span class="p">)</span> <span class="c1">// Hover in place for 1 second</span>
|
|
<span class="p">.</span><span class="nx">land</span><span class="p">();</span>
|
|
|
|
<span class="nx">mission</span><span class="p">.</span><span class="nx">run</span><span class="p">(</span><span class="kd">function</span> <span class="p">(</span><span class="nx">err</span><span class="p">,</span> <span class="nx">result</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="p">(</span><span class="nx">err</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">trace</span><span class="p">(</span><span class="s2">"Oops, something bad happened: %s"</span><span class="p">,</span> <span class="nx">err</span><span class="p">.</span><span class="nx">message</span><span class="p">);</span>
|
|
<span class="nx">mission</span><span class="p">.</span><span class="nx">client</span><span class="p">().</span><span class="nx">stop</span><span class="p">();</span>
|
|
<span class="nx">mission</span><span class="p">.</span><span class="nx">client</span><span class="p">().</span><span class="nx">land</span><span class="p">();</span>
|
|
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
|
|
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">"Mission success!"</span><span class="p">);</span>
|
|
<span class="nx">process</span><span class="p">.</span><span class="nx">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">});</span>
|
|
</pre></div>
|
|
|
|
<h2>Applications</h2>
|
|
|
|
Here is a list of know apps built using autonomy. Please let me know if you build something and I'll be happy to add you in the list.
|
|
|
|
<ul>
|
|
<li><p><strong><a href="https://github.com/eschnou/ardrone-panorama/">panorama</a></strong> autonomously fly to a given altitude and take pictures to form a 360 photo panorama.</li>
|
|
</ul>
|
|
|
|
<h2>Support</h2>
|
|
|
|
<p>If you encounter issues, please add them to the <a href="https://github.com/eschnou/ardrone-autonomy/issues">issue tracker</a>. You can find
|
|
me on twitter (<a href="http://twitter.com/eschnou">@eschnou</a>) or on the #nodecopter IRC channel
|
|
on #freenode.
|
|
|
|
<h2>Thanks</h2>
|
|
|
|
<p>This work is based on the <a href="http://vision.in.tum.de/teaching/ss2013/visnav2013">Visual Navigation for Flying Robots</a> course. My eternal gratitude for their team to post lectures and slides on the web. I learned a lot from them.</p>
|
|
|
|
<p>Also a big thank you to <a href="https://github.com/felixge">@felixge</a> who came up with this crazy idea of flying a drone with Javascript and building the fantastic <a href="https://github.com/felixge/node-ar-drone">node-ar-drone</a> library.
|
|
|
|
<h2>Donate</h2>
|
|
|
|
<p>If you like this project, please consider donating. The less time I need to work, the more I can spend on open source projects :-)</p>
|
|
<div style="font-size:16px;margin:0 auto;width:300px" class="blockchain-btn"
|
|
data-address="13q2eVG8KkmsFqGHqDWbjHeq3qicxi4rjh"
|
|
data-shared="false">
|
|
<div class="blockchain stage-begin">
|
|
<img src="https://blockchain.info//Resources/buttons/donate_64.png"/>
|
|
</div>
|
|
<div class="blockchain stage-loading" style="text-align:center">
|
|
<img src="https://blockchain.info//Resources/loading-large.gif"/>
|
|
</div>
|
|
<div class="blockchain stage-ready">
|
|
<p align="center">Please Donate To Bitcoin Address: <b>[[address]]</b></p>
|
|
<p align="center" class="qr-code"></p>
|
|
</div>
|
|
<div class="blockchain stage-paid">
|
|
Donation of <b>[[value]] BTC</b> Received. Thank You.
|
|
</div>
|
|
<div class="blockchain stage-error">
|
|
<font color="red">[[error]]</font>
|
|
</div>
|
|
</div>
|
|
|
|
<h2>License</h2>
|
|
|
|
<p>The MIT License</p>
|
|
|
|
<p>Copyright (c) 2013 by Laurent Eschenauer <a href="mailto:laurent@eschenauer.be">laurent@eschenauer.be</a></p>
|
|
|
|
<p>Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:</p>
|
|
|
|
<p>The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.</p>
|
|
|
|
<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.</p>
|
|
</section>
|
|
</div>
|
|
|
|
<!-- Piwik -->
|
|
<script type="text/javascript">
|
|
var _paq = _paq || [];
|
|
_paq.push(["trackPageView"]);
|
|
_paq.push(["enableLinkTracking"]);
|
|
|
|
(function() {
|
|
var u=(("https:" == document.location.protocol) ? "https" : "http") + "://analytics.eschnou.com/";
|
|
_paq.push(["setTrackerUrl", u+"piwik.php"]);
|
|
_paq.push(["setSiteId", "4"]);
|
|
var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
|
|
g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
|
|
})();
|
|
</script>
|
|
<!-- End Piwik Code -->
|
|
|
|
|
|
</body>
|
|
</html>
|