<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[X-UAS]]></title><description><![CDATA[A NASA internship towards utilizing a commercially available unmanned aircraft to conduct remote sensing surveys of naturally occurring geo-magnetic fields
]]></description><link>http://nasa.z-proj.com/</link><generator>Ghost 0.7</generator><lastBuildDate>Tue, 04 Nov 2025 16:28:05 GMT</lastBuildDate><atom:link href="http://nasa.z-proj.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[SkyWalker X-8 Configuration]]></title><description><![CDATA[<p>Our SkyWalker X-8 configuration is as follows:</p>

<h2 id="motor">Motor</h2>

<p><a href="http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=18122" target="_blank">Turnigy Aerodrive SK3 - 4240-740kv Brushless Outrunner Motor</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/18122.jpg" alt="Turnigy Aerodrive SK3 - 4240-740kv Brushless Outrunner Motor"></p>

<p>Kv(rpm/v)    740 <br>
Weight (g)    195 <br>
Max Current(A)    50 <br>
Resistance(mh)    13 <br>
Max Voltage(V)    19 <br>
Power(W)    870 <br>
Shaft A (mm)    5 <br>
Length B (mm)    48 <br>
Diameter C (mm)    42 <br>
Can</p>]]></description><link>http://nasa.z-proj.com/skywalker-x-8-configuration/</link><guid isPermaLink="false">96104e06-3971-4128-96ad-f98dbe90ae53</guid><category><![CDATA[skywalker]]></category><category><![CDATA[uav]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Tue, 15 Dec 2015 22:30:01 GMT</pubDate><content:encoded><![CDATA[<p>Our SkyWalker X-8 configuration is as follows:</p>

<h2 id="motor">Motor</h2>

<p><a href="http://www.hobbyking.com/hobbyking/store/uh_viewItem.asp?idProduct=18122" target="_blank">Turnigy Aerodrive SK3 - 4240-740kv Brushless Outrunner Motor</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/18122.jpg" alt="Turnigy Aerodrive SK3 - 4240-740kv Brushless Outrunner Motor"></p>

<p>Kv(rpm/v)    740 <br>
Weight (g)    195 <br>
Max Current(A)    50 <br>
Resistance(mh)    13 <br>
Max Voltage(V)    19 <br>
Power(W)    870 <br>
Shaft A (mm)    5 <br>
Length B (mm)    48 <br>
Diameter C (mm)    42 <br>
Can Length (mm)    23 <br>
Total Length E (mm)    70</p>

<h3 id="escspeedcontroller">ESC Speed Controller</h3>

<p><a href="http://www.hobbyking.com/hobbyking/store/__2166__TURNIGY_Plush_60amp_Speed_Controller.html" target="_blank">TURNIGY Plush 60amp Speed Controller</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/hw_p60a.jpg" alt="TURNIGY Plush 60amp Speed Controller"></p>

<p>Cont Current: 60A <br>
Burst Current: 80A <br>
BEC Mode: Switching <br>
BEC : 5v / 3A <br>
Input: 5.6v-22v <br>
Weight: 60g <br>
Size: 80x31x14mm <br>
Supported motor speed for all TURNIGY ESCs is; <br>
(Maximum): 210000 RPM (2 poles), 70000 RPM (6 poles), 35000 RPM (12 poles).</p>

<h3 id="propeller">Propeller</h3>

<p><a href="http://www.hobbyking.com/hobbyking/store/__22831__Folding_Carbon_Fiber_Propeller_13x7_1pc_.html" target="_blank">Folding Carbon Fiber Propeller 13x7 (1pc)</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/158000003.jpg" alt="Folding Carbon Fiber Propeller 13x7 (1pc)"></p>

<p>Length (Inch [X])    13 <br>
Pitch (Inch [Y])    7 <br>
Weight            20gram</p>

<h3 id="spinner">Spinner</h3>

<p><a href="http://www.hobbyking.com/hobbyking/store/__17625__Folding_Prop_Spinner_43mm_5_0mm_shaft.html" target="_blank">Folding Prop Spinner 43mm / 5.0mm shaft</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/spin-38-5.gif" alt="Folding Prop Spinner 43mm / 5.0mm shaft"></p>

<p>Prop Mount Bolts: 3.0mm <br>
Weight: 47g</p>

<h3 id="yoke">Yoke</h3>

<p><a href="http://www.espritmodel.com/aeronaut-yoke-for-turbo-and-black-spinners.aspx" target="_blank">Aeronaut Yoke for Turbo and Black 2-Blade Spinners</a></p>

<p><img src="http://file.espritmodel.com/accessories/spinner/aeronaut-yoke-2bladen.jpg" alt="Aeronaut Yoke for Turbo and Black 2-Blade Spinners"></p>

<p>Aeronaut Yoke 47/8 <br>
33-45mm Spinner <br>
Shoulder: 8mm</p>

<h3 id="bladestopper">Blade Stopper</h3>

<p>This was supposed to be in our configuration, but we eventually <a href="http://nasa.z-proj.com/blade-stopper/">created it ourselves</a>.</p>

<p><a href="http://www.espritmodel.com/aeronaut-fiberglass-blade-stopper-for-folding-spinners-black-turbo.aspx" target="_blank"> <br>
Aeronaut Fiberglass Blade Stopper for 2-Blade Folding Spinners (Black, Turbo)</a></p>

<p><img src="http://file.espritmodel.com/accessories/spinner/aeronaut-fb-stopper-2bladen.jpg" alt="Aeronaut Fiberglass Blade Stopper for 2-Blade Folding Spinners (Black, Turbo)"></p>

<h3 id="servomotors">Servo Motors</h3>

<p><a href="http://hobbyking.com/hobbyking/store/__35308__AeroStar_8482_AS_463HB_Standard_Servo_3_95kg_0_12sec_45_5g.html" target="_blank">AeroStar AS-463HB Standard Servo 3.95kg / 0.12sec / 45.5g</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/35308.jpg" alt="AeroStar AS-463HB Standard Servo 3.95kg / 0.12sec / 45.5g"></p>

<p>Operating Speed: (4.8V) 0.15sec/60° <br>
Operating Speed: (6V) 0.12sec/60° <br>
Stall Torque: (4.8V) 3.25kg.cm <br>
Stall Torque: (6V) 3.95 kg-cm <br>
Dimensions: 40.5X20.3X38mm <br>
Weight: 45.5g <br>
Connector Wire Length: JR 265mm</p>

<h3 id="batteries">Batteries</h3>

<p><a href="http://www.hobbyking.com/hobbyking/store/__16227__ZIPPY_Flightmax_8000mAh_5S1P_30C.html" target="_blank">ZIPPY Flightmax 8000mAh 5S1P 30C</a></p>

<p><img src="https://hobbyking.com/media/catalog/product/cache/1/image/565x414/9df78eab33525d08d6e5fb8d27136e95/legacy/catalog/z80005s-30.jpg" alt="ZIPPY Flightmax 8000mAh 5S1P 30C"></p>

<p>Capacity: 8000mAh <br>
Voltage: 5S1P / 5 Cell / 18.5v <br>
Discharge: 30C Constant / 40C Burst <br>
Weight: 1054g (including wire, plug &amp; case) <br>
Dimensions: 170x69x44mm <br>
Balance Plug: JST-XH <br>
Discharge plug: 5.5mm Bullet-connector (without housing)</p>]]></content:encoded></item><item><title><![CDATA[Testing the Odroid's heatsink maximum temperature]]></title><description><![CDATA[<p>As I needed to test if the Odroid's heatsink's temperature can melt the ABS plastic, I ran a CPU stress test and measured the maximum temperature that the Odroid CPU processor can reach.</p>

<p>None of the commands need any dependencies or new installations that are not available in stock Ubuntu.</p>]]></description><link>http://nasa.z-proj.com/testing-the-odroids-heatsink-maximum-temperature/</link><guid isPermaLink="false">7d5b6039-b914-4546-b14b-a5d17eaf191b</guid><category><![CDATA[odroid]]></category><category><![CDATA[stress test]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Thu, 10 Dec 2015 21:20:23 GMT</pubDate><content:encoded><![CDATA[<p>As I needed to test if the Odroid's heatsink's temperature can melt the ABS plastic, I ran a CPU stress test and measured the maximum temperature that the Odroid CPU processor can reach.</p>

<p>None of the commands need any dependencies or new installations that are not available in stock Ubuntu.</p>

<h3 id="commands">Commands</h3>

<p>To stress the Odroid, I first set the number of CPUs and then ran a bash calculator command that uses lots of CPU.</p>

<pre><code>NUMCPU=$(grep $'^processor\t*:' /proc/cpuinfo |wc -l)

for ((i=0;i&lt;$NUMCPU;i++));do
echo 'scale=100000;pi=4*a(1);0' | bc -l &amp;
done ;\
read stop; \
killall bc
</code></pre>

<p>The test will stop executing if any key is pressed.</p>

<blockquote>
  <p>I used this exact command because it was the only simple one that used all of 4 cores of the Odroid. Using dd, yes, or outputting to terminal would not use the 4 cores.</p>
</blockquote>

<p>To check the CPU temperature, run in another terminal:</p>

<pre><code>while(true) do 
cat /sys/class/thermal/thermal_zone0/temp ; sleep 1; done;
</code></pre>

<p>The check the processes and the CPU usage:</p>

<pre><code>top
</code></pre>

<h3 id="results">Results</h3>

<p>Maximum temperature the CPU reached was 82 degrees Celsius. That cannot melt the ABS plastic which has a melting point of 100 degrees.</p>]]></content:encoded></item><item><title><![CDATA[Pixhawk Hard Connections]]></title><description><![CDATA[<p>If you were not sure how to connect your Pixhawk, here is a schematic of my connections.</p>]]></description><link>http://nasa.z-proj.com/pixhawk-connections/</link><guid isPermaLink="false">841dae59-88ca-4ddc-a3aa-ecdccc72ad4d</guid><category><![CDATA[pixhawk]]></category><category><![CDATA[rc]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Thu, 03 Dec 2015 23:35:00 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/12/nasa-schem.jpg" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/12/nasa-schem.jpg" alt="Pixhawk Hard Connections"><p>If you were not sure how to connect your Pixhawk, here is a schematic of my connections.</p>]]></content:encoded></item><item><title><![CDATA[Mavproxy Server Implementation]]></title><description><![CDATA[<h2 id="overview">Overview</h2>

<p>MAVProxy can be used to control autopilots by using mavlink commands. As a first step into allowing an Android phone to control the autopilot using the famous applications such as <a href="https://play.google.com/store/apps/details?id=org.droidplanner.android&amp;hl=en">3DR's Tower</a> wirelessly without the need for any new hardware, I allowed mavproxy to be controller through a Tcp/</p>]]></description><link>http://nasa.z-proj.com/mavproxy-server-implementation/</link><guid isPermaLink="false">a784a323-6b80-48c8-9dc2-7094bbc60542</guid><category><![CDATA[mavproxy]]></category><category><![CDATA[tcp/ip]]></category><category><![CDATA[python]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Wed, 02 Dec 2015 05:29:08 GMT</pubDate><content:encoded><![CDATA[<h2 id="overview">Overview</h2>

<p>MAVProxy can be used to control autopilots by using mavlink commands. As a first step into allowing an Android phone to control the autopilot using the famous applications such as <a href="https://play.google.com/store/apps/details?id=org.droidplanner.android&amp;hl=en">3DR's Tower</a> wirelessly without the need for any new hardware, I allowed mavproxy to be controller through a Tcp/Udp client.</p>

<p>If you haven't installed Mavproxy yet, <a href="http://nasa.z-proj.com/http://nasa.z-proj.com/connecting-odroid-to-pixhawk/">here</a> is how to do it.</p>

<p>Through this post, I'll show you how you can modify Mavproxy to run a Tcp/Udp server. If you are not interested in how it is done, and just want the final code, you can find it <a href="https://github.com/zaiddabaeen/mavproxy-server">here on github</a>.</p>

<h2 id="mavproxyserverusage">Mavproxy-server usage</h2>

<p>To run a TCP server:</p>

<pre><code>        mavproxy.py --tcp=0.0.0.0:5234
</code></pre>

<p>To run a UDP server:</p>

<pre><code>        mavproxy.py --udp=0.0.0.0:5234
</code></pre>

<blockquote>
  <p>You can run both TCP and UDP servers simultaneously, but only the UDP server will be able to write mavlink commands. This is not advised.</p>
</blockquote>

<h2 id="stepsintogettingthere">Steps into getting there</h2>

<h3 id="learntcpudpprogramminginpython">Learn Tcp/Udp programming in Python</h3>

<p>Since mavproxy is written in python, then we do have to modify it in python. For starters, to run a UDP server, this snippet of code would open port <code>4123</code> on the machine and print whatever is sent to it.</p>

<pre><code>&gt;&gt;&gt; import sys, socket
&gt;&gt;&gt; s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
&gt;&gt;&gt; s.bind(('0.0.0.0', 4123))
&gt;&gt;&gt; while 1:
...     data,addr = s.recvfrom(1024)
...     print data
</code></pre>

<p>To run a UDP client, that can be done easily through a linux terminal in bash.</p>

<pre><code>nc 127.0.0.1 4123 -u -v  
</code></pre>

<p>And you'd be able to send to the server.</p>

<blockquote>
  <p>If this worked locally for you, but remotely it didn't, check your 
  firewall settings.</p>
</blockquote>

<h3 id="modifymavproxysinput">Modify mavproxy's input</h3>

<p>Looking through mavproxy's code in <code>mavproxy.py</code>, there is a function called <code>input_loop()</code>. This function waits for user input. We would want to redirect the input from keyboard to the Tcp/Udp server set.</p>

<p>The previous code was:</p>

<pre><code>def input_loop():  
    '''wait for user input'''
    while mpstate.status.exit != True:
        try:
            if mpstate.status.exit != True:
                line = raw_input(mpstate.rl.prompt)
        except EOFError:
            mpstate.status.exit = True
            sys.exit(1)
        mpstate.input_queue.put(line)
</code></pre>

<p>If we want a UDP server to listen to input here, <em>recklessly</em> we can modify it as such:</p>

<pre><code>def input_loop():  
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(('0.0.0.0', 4123))
    '''wait for user input'''
    while mpstate.status.exit != True:
        try:
            if mpstate.status.exit != True:
                data,addr = s.recvfrom(1024)
                line = data
                # line = raw_input(mpstate.rl.prompt)
        except EOFError:
            mpstate.status.exit = True
            sys.exit(1)
        mpstate.input_queue.put(line)
</code></pre>

<blockquote>
  <p>Remember to add the <code>socket</code> import.</p>
</blockquote>

<p>And that is it. Whatever now is sent through UDP on this port will be run as a command.</p>

<h3 id="modifymavproxysoutput">Modify mavproxy's output</h3>

<p>To read the log, we would also have to send the log back to the UDP client. If we look around, you'd find that writing is done by <code>mpstate.console.writeln(text)</code>. <code>console</code> is a <code>TextConsole</code> class that is available in <code>modules/lib/textconsole.py</code>. Looking at its output code:</p>

<pre><code>    def write(self, text, fg='black', bg='white'):
        '''write to the console'''
        if isinstance(text, str):
            sys.stdout.write(text)
        else:
            sys.stdout.write(str(text))
        sys.stdout.flush()
</code></pre>

<p>We can add <code>s.sendto(data, address)</code>, to be able to send to the client.</p>

<blockquote>
  <p>You would have to be able to read the socket <code>s</code> there somehow.</p>
</blockquote>

<h3 id="cleaningthingsup">Cleaning things up</h3>

<p>To clean things up:</p>

<ol>
<li><p>Create a class for UdpServer and TcpServer. In <a href="https://github.com/zaiddabaeen/mavproxy-server">my project</a>, you can find them under <code>modules/lib</code>.</p></li>
<li><p>Add parser options in <code>mavproxy.py</code> to read <code>--udp</code> and <code>--tcp</code> options to allow you to run the servers upon will.</p></li>
<li><p>Put everything where it should be.</p></li>
</ol>

<h2 id="nextsteps">Next steps</h2>

<p>Now that I can connect and send commands remotely to the autopilot, it is time to be able to use the Android applications to control the autopilot. Maybe someone can add a functionality for mavproxy to understand mavlink packets directly.</p>]]></content:encoded></item><item><title><![CDATA[Blade Stopper]]></title><description><![CDATA[<p>We tested the motor and propeller and were faced with the problem that the blades don't always stay at a 180 degrees. So for that, I modeled a blade stopper on SolidWorks that will keep the blades at that angle. <br>
Two will be attached; one behind the blades to keep</p>]]></description><link>http://nasa.z-proj.com/blade-stopper/</link><guid isPermaLink="false">9bc97345-c49f-4ae2-a9b0-3740cb5d4ff4</guid><category><![CDATA[blade]]></category><category><![CDATA[stopper]]></category><category><![CDATA[solidworks]]></category><dc:creator><![CDATA[Zaina Abu Shaar]]></dc:creator><pubDate>Tue, 24 Nov 2015 23:59:23 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/blade-stopper.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/blade-stopper.png" alt="Blade Stopper"><p>We tested the motor and propeller and were faced with the problem that the blades don't always stay at a 180 degrees. So for that, I modeled a blade stopper on SolidWorks that will keep the blades at that angle. <br>
Two will be attached; one behind the blades to keep them from going more than 180 degrees and damaging the UAV's body, and one in front of them to keep them from folding into each other.</p>]]></content:encoded></item><item><title><![CDATA[Connecting Odroid to Pixhawk]]></title><description><![CDATA[<h2 id="physicalconnections">Physical Connections</h2>

<p>The Odroid can be connected to the Pixhawk using a FTDI/USB cable. The FTDI/USB cable can be soldered as proposed <a href="http://dev.ardupilot.com/wiki/odroid-via-mavlink/">here</a>:</p>

<div style="margin: auto; width: 300px;">  
<img src="http://dev.ardupilot.com/wp-content/uploads/sites/6/2014/04/odroid_fdti_cable-300x178.jpg" alt="">
</div>

<p>The jumper should go into the TELEM2 port on the pixhawk.</p>

<div style="text-align:center">  
<div style="width: 300px; display:inline-block">  
<img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151124_142838.jpg" width="300/">  
</div>  

<div style="width: 300px; display:inline-block">  
<img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151124_142849.jpg" width="300/">  
</div>  

<p></p></div><p></p>

<blockquote>
  <p>My Odroid seems to be unable to give sufficient power to the Pixhawk. The</p></blockquote>]]></description><link>http://nasa.z-proj.com/connecting-odroid-to-pixhawk/</link><guid isPermaLink="false">b387cd9d-1425-45e8-8081-96e7df54bbe0</guid><category><![CDATA[odroid]]></category><category><![CDATA[pixhawk]]></category><category><![CDATA[mavlink]]></category><category><![CDATA[mavproxy]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Tue, 24 Nov 2015 23:16:20 GMT</pubDate><content:encoded><![CDATA[<h2 id="physicalconnections">Physical Connections</h2>

<p>The Odroid can be connected to the Pixhawk using a FTDI/USB cable. The FTDI/USB cable can be soldered as proposed <a href="http://dev.ardupilot.com/wiki/odroid-via-mavlink/">here</a>:</p>

<div style="margin: auto; width: 300px;">  
<img src="http://dev.ardupilot.com/wp-content/uploads/sites/6/2014/04/odroid_fdti_cable-300x178.jpg" alt="">
</div>

<p>The jumper should go into the TELEM2 port on the pixhawk.</p>

<div style="text-align:center">  
<div style="width: 300px; display:inline-block">  
<img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151124_142838.jpg" width="300/">  
</div>  

<div style="width: 300px; display:inline-block">  
<img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151124_142849.jpg" width="300/">  
</div>  

<p></p></div><p></p>

<blockquote>
  <p>My Odroid seems to be unable to give sufficient power to the Pixhawk. The big LED indicator never turns on and it seems to keep on restarting. Make sure you connect another power source if that is the case with you too.</p>
</blockquote>

<hr>

<h2 id="installingmavproxy">Installing MAVproxy</h2>

<p>Now we will install MAVproxy which will allow us to control the pixhawk using mavlink commands.</p>

<p>In my case, my Odroid does not have internet connection due to the fact that it is connected on an ad-hoc network with my laptop. And so I needed to download all the files offline, and send them to the Odroid. You can send the file through SSH or by simply copying them on a USB stick.</p>

<blockquote>
  <p>Note: For all the following instructions, change the path <code>/root</code> to wherever you'd like to copy your files.</p>
  
  <p>Copying using SSH can be done through scp as follows:
       `scp -r <file-path> root@192.168.1.1:<path></path></file-path></p>
</blockquote>

<p>If you do have internet on your Odroid, download MAVproxy directly. Otherwise, download to your laptop and copy to the Odroid. Also, make it publicly accessible:</p>

<pre><code> cd /root/
 git clone https://github.com/Dronecode/MAVProxy

 ln -s /root/MAVProxy/MAVProxy/mavproxy.py /usr/local/bin/mavproxy
 chmod +x /root/MAVProxy/MAVProxy/mavproxy.py 
</code></pre>

<p>Test if MAVproxy is working:</p>

<pre><code>mavproxy --master/dev/ttyUSB0 --baudrate 57600 --aircraft rover
</code></pre>

<p>If it worked out for you and you started seeing logs, you are lucky. Proceed to the <a href="http://nasa.z-proj.com/connecting-odroid-to-pixhawk/#running_mavproxy">Running MAVproxy</a>. Else, in my case the output was:</p>

<pre><code>Traceback (most recent call last):
  File "/usr/local/bin/mavproxy", line 12, in &lt;module&gt;
import serial, Queue, select
    ImportError: No module named serial
</code></pre>

<p>It seems that I need to install serial module.</p>

<h3 id="installingpythonserial">Installing python-serial</h3>

<p>Two sections here, for internet and non-internet connected Odroids. Make sure that you are using python 2.7 using <code>which python</code>. If you are using python 3, then you would have to add a "3" to all commands and links.</p>

<h4 id="internet">Internet</h4>

<p>Just install it directly from apt-get:</p>

<pre><code>sudo apt-get install python-serial
</code></pre>

<h4 id="nointernet">No internet</h4>

<p>Download python-serial deb package to your internet connected laptop from:</p>

<p><a href="http://packages.ubuntu.com/trusty/all/python-serial/download">http://packages.ubuntu.com/trusty/all/python-serial/download</a></p>

<p>Make sure to download the <em>armhf</em> one.</p>

<p>Copy the deb file to your Odroid, and run <code>dpkg -i &lt;file&gt;</code>. All should go well, unless if you don't really have python installed, see the <a href="http://nasa.z-proj.com/connecting-odroid-to-pixhawk/#installing_pymavlink">pymavlink</a> section for how to install a package with all its dependencies.</p>

<p>Try to run mavproxy again:</p>

<pre><code>mavproxy --master/dev/ttyUSB0 --baudrate 57600 --aircraft rover
</code></pre>

<p>In my case, I needed <code>pymavlink</code> to proceed.</p>

<h3 id="anameinstalling_pymavlinkinstallingpymavlinka"><a name="installing_pymavlink">Installing pymavlink</a></h3>

<p>Download mavlink, but before that you must install the dependencies matplotlib. </p>

<h4 id="internet">Internet</h4>

<p>Install it using apt-get:</p>

<pre><code>sudo apt-get install python-matplotlib
</code></pre>

<h4 id="nointernet">No internet</h4>

<p>If you are unlucky as I am and you have to do an offline installation of <a href="https://packages.debian.org/jessie/armhf/python-matplotlib/download">matplotlib</a>, create a list of the dependencies URLs:</p>

<pre><code> apt-get --print-uris --yes install &lt;my_package_name&gt; | grep ^\' | cut -d\' -f2 &gt; matplotlib.list
</code></pre>

<p>Copy the list back to your internet-connected computer using SSH or a USB stick and download the required packages by using:</p>

<pre><code>wget --input-file matplotlib.list
</code></pre>

<p>Then copy the deb packages back to your Odroid using SSH or a USB stick, and install them using:</p>

<pre><code>dpkg -i *.deb
</code></pre>

<h3 id="installingmavlink">Installing mavlink</h3>

<p>Install mavlink now:</p>

<pre><code>cd mavlink/pymavlink
python setup.py install --user
</code></pre>

<p>See the last line of the output:</p>

<pre><code>Installed /root/.local/lib/python2.7/site-packages/pymavlink-1.1.63-py2.7-linux-armv7l.egg
</code></pre>

<p>and add the path to PYTHONPATH permanantly. In my case, these were the commands I added to <code>.bashrc</code>:</p>

<pre><code>export PYTHONPATH="${PYTHONPATH}:/root/.local/lib/python2.7/site-packages/"
</code></pre>

<p>Now try to run mavproxy again:</p>

<pre><code>mavproxy
</code></pre>

<p>Output:</p>

<pre><code>WARNING: You should uninstall ModemManager as it conflicts with APM and Pixhawk
Auto-detected serial ports are:
/dev/ttySAC3
/dev/ttySAC2
/dev/ttySAC1
/dev/ttySAC0
/dev/ttyACM99
Connect 0.0.0.0:14550 source_system=255
Log Directory: 
Telemetry log: mav.tlog
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Waiting for heartbeat from 0.0.0.0:14550
MAV&gt;     self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "build/bdist.linux-armv7l/egg/MAVProxy/modules/mavproxy_map/srtm.py", line 128, in createFileListHTTP
    conn.request("GET",self.directory)
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 791, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 772, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known
</code></pre>

<p>Perfect. Now <code>mavproxy</code> works. Uninstall <code>modemmanager</code> as instructed by using:</p>

<pre><code>sudo apt-get remove modemmanager
</code></pre>

<hr>

<h2 id="anamerunning_mavproxyrunningmavproxya"><a name="running_mavproxy">Running mavproxy</a></h2>

<p>Check the USB device which your PixHawk is connected to, probably it is <code>ttyUSB0</code>. Run mavproxy then:</p>

<pre><code>root@odroid:~/mavlink/pymavlink# ls /dev/ttyUSB*
/dev/ttyUSB0
root@odroid:~/mavlink/pymavlink# mavproxy --master=/dev/ttyUSB0 --baudrate 57600 --aircraft rover

Connect /dev/ttyUSB0 source_system=255
no script rover/mavinit.scr
Log Directory: rover/logs/2000-01-01/flight3
Telemetry log: rover/logs/2000-01-01/flight3/flight.tlog
Process Process-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
Waiting for heartbeat from /dev/ttyUSB0
    self.run()
MAV&gt;   File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "build/bdist.linux-armv7l/egg/MAVProxy/modules/mavproxy_map/srtm.py", line 128, in createFileListHTTP
    conn.request("GET",self.directory)
  File "/usr/lib/python2.7/httplib.py", line 973, in request
    self._send_request(method, url, body, headers)
  File "/usr/lib/python2.7/httplib.py", line 1007, in _send_request
    self.endheaders(body)
  File "/usr/lib/python2.7/httplib.py", line 969, in endheaders
    self._send_output(message_body)
  File "/usr/lib/python2.7/httplib.py", line 829, in _send_output
    self.send(msg)
  File "/usr/lib/python2.7/httplib.py", line 791, in send
    self.connect()
  File "/usr/lib/python2.7/httplib.py", line 772, in connect
    self.timeout, self.source_address)
  File "/usr/lib/python2.7/socket.py", line 553, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
gaierror: [Errno -2] Name or service not known
online system 1
AUTO&gt; Mode AUTO
fence breach
waypoint 2
GPS lock at 12 meters
APM: ArduRover v2.50 (3da78052)
APM: PX4: b39d9ae4 NuttX: d447403a
APM: PX4v2 002B0035 32334711 31363032

AUTO&gt; Received 403 parameters
Saved 403 parameters to rover/logs/2000-01-01/flight3/mav.parm
</code></pre>

<p>Now you can use MAVLINK commands to control your vehicle. <br>
For example you can run:</p>

<pre><code>manual
hold
steer
</code></pre>

<p>It would set the autopilot to these modes.</p>

<p>For help, just type <code>help</code>. You'll get all commands available.</p>

<pre><code>ahrstrim        : do AHRS trim
alias           : command aliases
alt             : show altitude information
arm             : arm motors
attitude        : attitude
auxopt          : select option for aux switches on CH7 and CH8 (ArduCopter only)
bat             : show battery information
calpress        : calibrate pressure sensors
camctrlmsg      : camctrlmsg
cammsg          : cammsg
changealt       : change target altitude
compassmot      : do compass/motor interference calibration
disarm          : disarm motors
fence           : geo-fence management
ground          : do a ground start
guided          : fly to a clicked location on map
gyrocal         : do gyro calibration
land            : auto land
level           : set level on a multicopter
link            : link control
log             : log file handling
magcal          : magcal
mode            : mode change
module          : module commands
motortest       : motortest commands
output          : output control
parachute       : parachute
param           : parameter handling
position        : position
posvel          : posvel
rally           : rally point control
rc              : RC input control
rcbind          : bind RC receiver
reboot          : reboot autopilot
relay           : relay commands
repeat          : repeat a command at regular intervals
reset           : reopen the connection to the MAVLink master
script          : run a script of MAVProxy commands
servo           : servo commands
set             : mavproxy settings
setspeed        : do_change_speed
setup           : go into setup mode
setyaw          : condition_yaw
shell           : run shell command
status          : show status
switch          : flight mode switch control
takeoff         : takeoff
terrain         : terrain control
time            : show autopilot time
tuneopt         : Select option for Tune Pot on Channel 6 (quadcopter only)
up              : adjust pitch trim by up to 5 degrees
velocity        : velocity
version         : show version
watch           : watch a MAVLink pattern
wp              : waypoint management
</code></pre>

<p>To exit, <code>Ctrl+C</code>.</p>]]></content:encoded></item><item><title><![CDATA[Payload Locking Mechanism]]></title><description><![CDATA[<p>For the payload, we needed a locking mechanism, which is what we use to secure the payload in the UAV. The mechanism will be attached to the UAV using bolts, to give us the chance of disassembly if needed. The mechanism consists of two boards, each one has two slots</p>]]></description><link>http://nasa.z-proj.com/payload-locking-mechanism/</link><guid isPermaLink="false">c9253bd8-47a3-41c8-be29-226c099b2c41</guid><category><![CDATA[payload locking]]></category><category><![CDATA[solidworks]]></category><dc:creator><![CDATA[Zaina Abu Shaar]]></dc:creator><pubDate>Tue, 24 Nov 2015 18:40:24 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/Locking-Mechanism-Screenshot.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/Locking-Mechanism-Screenshot.png" alt="Payload Locking Mechanism"><p>For the payload, we needed a locking mechanism, which is what we use to secure the payload in the UAV. The mechanism will be attached to the UAV using bolts, to give us the chance of disassembly if needed. The mechanism consists of two boards, each one has two slots for the payload to slide through. Each one of the two boards has a slot for strapping the payload in place after installing it in the UAV. <br>
One of the main advantages of having two boards instead of one part is that it can be used for more than one size; depending on the size of the payload box, the boards' positions can be changed and bolted again.</p>]]></content:encoded></item><item><title><![CDATA[Pixhawk/Rover on Autopilot]]></title><description><![CDATA[<p>Today the rover successfully followed the mission as set by APM Mission Planner.</p>

<blockquote>
  <p>The rover missions is not a closed loop. It will follow the checkpoints and end at the last checkpoint rather than Home.</p>
</blockquote>

<video style="width: 100%" controls>  
    <source src="http://nasa.z-proj.com/content/images/2015/11/rover_20151123.mp4" type="video/mp4"> 
</video>  

<p>Video showing waypoints 4 and 5.</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112943.jpg" alt=""></p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112949.jpg" alt=""></p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112956.jpg" alt=""></p>]]></description><link>http://nasa.z-proj.com/pixhawk-rover-on-autopilot/</link><guid isPermaLink="false">6b0a4a6d-cdd3-4105-aa7d-3c9d65812bd1</guid><category><![CDATA[apm planner]]></category><category><![CDATA[rover]]></category><category><![CDATA[pixhawk]]></category><category><![CDATA[autopilot]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 23 Nov 2015 23:55:35 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/coordinates-3.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/coordinates-3.png" alt="Pixhawk/Rover on Autopilot"><p>Today the rover successfully followed the mission as set by APM Mission Planner.</p>

<blockquote>
  <p>The rover missions is not a closed loop. It will follow the checkpoints and end at the last checkpoint rather than Home.</p>
</blockquote>

<video style="width: 100%" controls>  
    <source src="http://nasa.z-proj.com/content/images/2015/11/rover_20151123.mp4" type="video/mp4"> 
</video>  

<p>Video showing waypoints 4 and 5.</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112943.jpg" alt="Pixhawk/Rover on Autopilot"></p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112949.jpg" alt="Pixhawk/Rover on Autopilot"></p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151123_112956.jpg" alt="Pixhawk/Rover on Autopilot"></p>]]></content:encoded></item><item><title><![CDATA[Using APM Planner / Pixhawk / FS-R8B / Rover]]></title><description><![CDATA[<p>This one took quite a long time for me to figure out.</p>

<p>I'd suggest that you have a look at <a href="http://nasa.z-proj.com/using-apm-planner-pixhawk-fs-r8b-rover/3drobotics.com/wp-content/uploads/2014/03/pixhawk-manual-rev7.pdf">Pixhawk guide</a>, and see if it works out with you.</p>

<p>Make sure after you are done making all the connections that you run APM Planner (see <a href="http://nasa.z-proj.com/installing-apm-mission-planner-on-ubuntu/">Installation on Ubuntu</a>) and</p>]]></description><link>http://nasa.z-proj.com/using-apm-planner-pixhawk-fs-r8b-rover/</link><guid isPermaLink="false">61ba4ba1-b3cb-4fe3-8e65-34dbf27186d6</guid><category><![CDATA[pixhawk]]></category><category><![CDATA[apm planner]]></category><category><![CDATA[fs-r8b]]></category><category><![CDATA[rover]]></category><category><![CDATA[fs-th9x]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 23 Nov 2015 05:05:37 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/vlcsnap-2015-11-22-21h06m46s681.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/vlcsnap-2015-11-22-21h06m46s681.png" alt="Using APM Planner / Pixhawk / FS-R8B / Rover"><p>This one took quite a long time for me to figure out.</p>

<p>I'd suggest that you have a look at <a href="http://nasa.z-proj.com/using-apm-planner-pixhawk-fs-r8b-rover/3drobotics.com/wp-content/uploads/2014/03/pixhawk-manual-rev7.pdf">Pixhawk guide</a>, and see if it works out with you.</p>

<p>Make sure after you are done making all the connections that you run APM Planner (see <a href="http://nasa.z-proj.com/installing-apm-mission-planner-on-ubuntu/">Installation on Ubuntu</a>) and do the configuration as stated in the user guide.</p>

<p>If you were stuck as I were, here are a few tips:</p>

<h4 id="issue1fsr8bppmencoder">Issue #1: FS-R8B PPM Encoder</h4>

<p>If you tried to run APM Planner and noticed that in the RC calibration section there is no signal, it probably means that your RC is not connected. Make sure your transmitter is set to PPM encoding modulation, and if still it did not work, you probably need a <a href="http://www.bhphotovideo.com/bnh/controller/home?O=&amp;sku=1098146&amp;gclid=CjwKEAiA7MWyBRDpi5TFqqmm6hMSJAD6GLeA5qOnu9d5OU040Yjll4S67gnFAyhdSORwo7IweEpdDRoClFvw_wcB&amp;is=REG&amp;Q=&amp;A=details">PPM encoder</a>. The PPM encoder inputs would be all of the channels of the receiver, and the output will be the RC channel of the Pixhawk. </p>

<h4 id="issue2flightmodes">Issue #2: Flight modes</h4>

<p>If you are running the Ubuntu version, APM Planner does not show the current flight mode. Switch to Windows or run it in a VM. <br>
My FS-TH9X transmitter does not have a flight mode switch, so instead, I can use the Gear switch. To setup that:</p>

<ol>
<li>Go to <code>Menu</code>.  </li>
<li>Go to <code>Function Settings</code>.  </li>
<li>Go to <code>AUX-CH</code> to edit the auxiliary channels.  </li>
<li>It would list CH5 to CH9. For your purpose, on Windows APM Planner, go to Flight Mode page and see which one has the green box. Note the PWM. Go to RC calibration page, and note which channel has the PWM noted before.  </li>
<li>Now change the channel with that PWM to <code>Gear</code>.</li>
</ol>

<p>If you switch the Gear now on Flight mode page, you would see that it switches from the lowest PWM to the highest. Set the lowest PWM box to Auto. Now you have got two modes, auto and manual using your Gear Switch.</p>

<h4 id="issue3calibrationfailed">Issue #3: Calibration failed.</h4>

<p>Do not take the calibration for granted. The calibration must be done well. For the compass calibration part, you must hold the compass in all three axis and rotate it around each one of them 360 degrees.</p>

<h4 id="issue4alldonethrottleisabove0butitisnotmoving">Issue #4: All done, throttle is above 0% but it is not moving.</h4>

<p>Too bad they didn't say that in the user guide. After you are all done with the calibration, the mission plan, and running it. You must hold the SAFETY switch for 2 seconds until the light becomes constant red. Now the motors can be supplied with energy. Make sure you flick your Gear switch up, down, and up again to get into manual mode.</p>]]></content:encoded></item><item><title><![CDATA[Installing APM Mission Planner on Ubuntu]]></title><description><![CDATA[<p>Since APM planner is created using QT framework, it can run on Ubuntu.</p>

<h4 id="installation">Installation</h4>

<p>To install do the following:</p>

<ol>
<li><p>Install the required packages including QT5.</p>

<pre><code>sudo apt-get update
sudo apt-get install qt5-qmake qt5-default \
  qtscript5-dev libqt5webkit5-dev libqt5serialport5-dev \
  libqt5svg5-dev qtdeclarative5-qtquick2-plugin
sudo apt-get install git libsdl1.2-dev  libsndfile-dev \
  flite1-dev libssl-dev libudev-dev libsdl2-dev
</code></pre></li>
<li><p>Clone</p></li></ol>]]></description><link>http://nasa.z-proj.com/installing-apm-mission-planner-on-ubuntu/</link><guid isPermaLink="false">fc815aaa-35f1-4cb9-aaac-b43c30a1c05b</guid><category><![CDATA[apm planner]]></category><category><![CDATA[mission planner]]></category><category><![CDATA[ubuntu]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Mon, 23 Nov 2015 04:40:02 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/Screenshot-from-2015-11-22-20-31-10.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/Screenshot-from-2015-11-22-20-31-10.png" alt="Installing APM Mission Planner on Ubuntu"><p>Since APM planner is created using QT framework, it can run on Ubuntu.</p>

<h4 id="installation">Installation</h4>

<p>To install do the following:</p>

<ol>
<li><p>Install the required packages including QT5.</p>

<pre><code>sudo apt-get update
sudo apt-get install qt5-qmake qt5-default \
  qtscript5-dev libqt5webkit5-dev libqt5serialport5-dev \
  libqt5svg5-dev qtdeclarative5-qtquick2-plugin
sudo apt-get install git libsdl1.2-dev  libsndfile-dev \
  flite1-dev libssl-dev libudev-dev libsdl2-dev
</code></pre></li>
<li><p>Clone the git repo: (We'll clean it up shortly, don't worry)</p>

<pre><code>git clone https://github.com/diydrones/apm_planner
</code></pre></li>
<li><p>Make it and build it using QT.</p>

<pre><code>cd apm_planner
qmake qgroundcontrol.pro
make
</code></pre>

<blockquote>
  <p>If a dependency is needed while making, and you install it, you must perform qmake again then make. I had to install more QT dependencies and to edit a few QT files for QTWidgets.</p>
</blockquote></li>
<li><p>Run it.</p>

<pre><code>./release/apmplanner2
</code></pre></li>
<li><p>If the application did run (the GUI opened), this is great news. If it didn't, make sure <code>make</code> worked properly and there are no errors.</p></li>
<li><p>Exit the application. Add your user to dialout group and remove the modem manager.</p>

<pre><code>sudo adduser $USER dialout
sudo apt-get remove modemmanager
</code></pre></li>
<li><p>Copy the whole folder to <code>opt</code> to clean things up.</p>

<pre><code>sudo mv ../apm_planner /opt/
</code></pre></li>
<li><p>Create an applications menu shortcut:</p>

<pre><code>gedit ~/.local/share/applications/apm_planner.desktop
</code></pre>

<p>And copy the following contents in it:</p>

<pre><code>[Desktop Entry]
Comment=
Terminal=false
Name=APM Planner
Exec=/opt/apm_planner/release/launch
Type=Application
Icon=/opt/apm_planner/release/files/APMIcons/ap_rc.png
</code></pre></li>
<li><p>Log out and in back again for the user group permissions to take effect.</p></li>
<li><p>Run APM Planner from the Applications Menu.</p></li>
</ol>

<h5 id="whatworksandwhatdoesnot">What works and what does not</h5>

<p>This version is better than Windows version generally, but worse in only two things.</p>

<p>Basically, everything works on the Linux version, you can enable Advanced settings to have all Windows default features. I was able to calibrate, set it up, create way points, arm and run a mission on the Linux version (as well as the Windows version).</p>

<p>The connection is much better than Windows' APM. On Windows I would have to try to connect multiple times and to disconnect and reconnect the Pixhawk multiple times for a connection to be established. On Ubuntu, one click of Connect does its magic.</p>

<p>However, on HiDPi screens, the Linux version does not scale (as you can see in the photo) and the text overlaps at times. Also, the calibration is not as fancy as the Windows one. And the worst one, the map is kinda funny on Linux. It does not zoom automatically to the GPS location, you would have to do that on your own which takes too much time due to the sensitivity of the zoom and drag.</p>

<p>Generally, I calibrate and set it all up on Linux. I would then create the mission on Windows and then switch back to Linux for monitoring.</p>]]></content:encoded></item><item><title><![CDATA[SSH to your Odroid U3+]]></title><description><![CDATA[<p>If you have set your Odroid to <a href="http://nasa.z-proj.com/auto-connecting-ubuntu-to-ad-hoc-connection/">auto-connect to an ad-hoc connection</a>, then you'd be able to SSH to your Odroid (host) through another computer (client).</p>

<h5 id="connect">Connect</h5>

<p>From the client:</p>

<ol>
<li><p>In order to connect to the ad-hoc connection, first create a shell script file:</p>

<pre><code>gedit connect.sh
</code></pre>

<p>And put the</p></li></ol>]]></description><link>http://nasa.z-proj.com/ssh-to-your-odroid-u3/</link><guid isPermaLink="false">eb45467c-b585-4aca-946a-65caecb9fb07</guid><category><![CDATA[ssh]]></category><category><![CDATA[odroid]]></category><category><![CDATA[u3+]]></category><category><![CDATA[ubuntu]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sun, 22 Nov 2015 06:04:01 GMT</pubDate><content:encoded><![CDATA[<p>If you have set your Odroid to <a href="http://nasa.z-proj.com/auto-connecting-ubuntu-to-ad-hoc-connection/">auto-connect to an ad-hoc connection</a>, then you'd be able to SSH to your Odroid (host) through another computer (client).</p>

<h5 id="connect">Connect</h5>

<p>From the client:</p>

<ol>
<li><p>In order to connect to the ad-hoc connection, first create a shell script file:</p>

<pre><code>gedit connect.sh
</code></pre>

<p>And put the following contents in it:</p>

<pre><code>#!/bin/sh
service network-manager stop
ifconfig wlp2s0 down
iwconfig wlp2s0 mode ad-hoc
iwconfig wlp2s0 essid "odroid"
iwconfig wlp2s0 key 1234567890
ifconfig wlp2s0 192.168.1.2
ifconfig wlp2s0 up


echo "Connected to ODROID\n"


ssh root@192.168.1.1
</code></pre>

<p>Where <code>wlp2s0</code> is my wireless interface. So you must change <code>wlp2s0</code> and all the variables as you set them up in <a href="http://nasa.z-proj.com/auto-connecting-ubuntu-to-ad-hoc-connection/">auto-connect to an ad-hoc connection</a>.</p></li>
<li><p>Change the execution bit on the file to make it executable:</p>

<pre><code>chmod +x connect.sh
</code></pre>

<p>And run it:</p>

<pre><code>./connect.sh
</code></pre>

<blockquote>
  <p>It might not SSH on the first try, try to run it again if it failed.</p>
</blockquote></li>
</ol>

<h5 id="disconnect">Disconnect</h5>

<ol>
<li><p>To disconnect the client from the ad-hoc connection, create a shell script file:</p>

<pre><code>gedit disconnect.sh
</code></pre>

<p>And put the following contents in it:</p>

<pre><code>#!/bin/sh
iwconfig wlp2s0 mode managed
service network-manager start


echo "Disconnected"
</code></pre></li>
<li><p>Change the execution bit on the file to make it executable:</p>

<pre><code>chmod +x disconnect.sh
</code></pre>

<p>And run it:</p>

<pre><code>./disconnect.sh
</code></pre>

<blockquote>
  <p>I stop the Network Manager because it might attempt to find a more reliable network which would cause disconnection of the ad-hoc network.</p>
</blockquote></li>
</ol>]]></content:encoded></item><item><title><![CDATA[Installing ROS on your Odroid U3+]]></title><description><![CDATA[<p>Installing ROS on my Odroid was problematic. Following the steps to install ROS as documented on <a href="http://wiki.ros.org/jade/Installation/Ubuntu">http://wiki.ros.org/jade/Installation/Ubuntu</a> will not work, though my eMMC card only had Ubuntu on it, there won't be enough space to install all the dependencies of ROS and ROS itself.</p>]]></description><link>http://nasa.z-proj.com/installing-ros-on-your-odroid-u3/</link><guid isPermaLink="false">9ab3a136-0572-4591-9d79-71337657976e</guid><category><![CDATA[odroid]]></category><category><![CDATA[u3+]]></category><category><![CDATA[ros]]></category><category><![CDATA[robot operating system]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sat, 21 Nov 2015 21:15:48 GMT</pubDate><media:content url="http://www.ros.org/wp-content/uploads/2013/10/rosorg-logo1.png" medium="image"/><content:encoded><![CDATA[<img src="http://www.ros.org/wp-content/uploads/2013/10/rosorg-logo1.png" alt="Installing ROS on your Odroid U3+"><p>Installing ROS on my Odroid was problematic. Following the steps to install ROS as documented on <a href="http://wiki.ros.org/jade/Installation/Ubuntu">http://wiki.ros.org/jade/Installation/Ubuntu</a> will not work, though my eMMC card only had Ubuntu on it, there won't be enough space to install all the dependencies of ROS and ROS itself.</p>

<p>So to be able to solve this issue, I noticed that the default partitions as flashed by the Odroid Ubuntu image contains two empty ones out of four which can give you about 1 GB more space. To benefit from those partitions:</p>

<ol>
<li><p>Run <code>gparted</code> or install <code>gparted</code> by running</p>

<pre><code>sudo apt-get install gparted
</code></pre></li>
<li><p>Delete the empty big partition, and unformat it.</p></li>
<li><p>Right-click on the main partition and <em>Grow</em> it. Grow it from the end by all the size available.</p></li>
</ol>

<p>Now you can install ROS packages and still have lots of free memory.</p>

<blockquote>
  <p>Note: I did try to make the installation on the SDCard using <code>sudo apt-get install -o Dir=/path/to/partition</code> but still I was stuck with the messages of having no space as Ubuntu will still want to write to the main partition some files in addition to writing on the partition specified. If you want to try that, make sure to copy all files needed for <code>apt-get</code> to that SDCard, and to mount the SDCard on a static filesystem inode.</p>
</blockquote>]]></content:encoded></item><item><title><![CDATA[Accessing GPIO pins on the Odroid U3+ Linux in Bash/Python]]></title><description><![CDATA[<h2 id="bashtutorial">Bash Tutorial</h2>

<p>To learn how to access the GPIO pins on the Odroid U3+ on a Linux system, I added a red LED to the GPIO pins, and the objective is to light that on. Here are the steps to do that:</p>

<ol>
<li><p>Connect a low voltage LED, red preferably. As</p></li></ol>]]></description><link>http://nasa.z-proj.com/accessing-gpio-pins-on-the-odroid-u3/</link><guid isPermaLink="false">d7694ab1-db0b-4a41-8788-2863437eb258</guid><category><![CDATA[gpio]]></category><category><![CDATA[odroid]]></category><category><![CDATA[u3+]]></category><category><![CDATA[bash]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sat, 21 Nov 2015 06:12:44 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/IMG_20151119_104518-1.jpg" medium="image"/><content:encoded><![CDATA[<h2 id="bashtutorial">Bash Tutorial</h2>

<img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151119_104518-1.jpg" alt="Accessing GPIO pins on the Odroid U3+ Linux in Bash/Python"><p>To learn how to access the GPIO pins on the Odroid U3+ on a Linux system, I added a red LED to the GPIO pins, and the objective is to light that on. Here are the steps to do that:</p>

<ol>
<li><p>Connect a low voltage LED, red preferably. As shown in the photo:</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151119_104518.jpg" alt="Accessing GPIO pins on the Odroid U3+ Linux in Bash/Python" title=""></p></li>
<li><p>Log in as root using <code>su -</code>.</p></li>
<li><p>Set the pins indicated in the photo above as output:</p>

<pre><code>cd /sys/class/gpio
echo 204 &gt; export
cd gpio204
echo out &gt; direction
</code></pre></li>
<li><p>Write a bash loop to light on and off the LED:</p>

<pre><code>while true; do
echo 0 &gt; value
sleep 1 
echo 1 &gt; value
sleep 1
done
</code></pre></li>
</ol>

<hr>

<h2 id="gpioschematic">GPIO Schematic</h2>

<p>Simple schematic of the GPIOs as viewed from the angle of the photo above:</p>

<table border="1">  
  <tr>
    <td>&nbsp;1.8V&nbsp;</td>
    <td>&nbsp;UART RX&nbsp;</td>
    <td>&nbsp;UART TX&nbsp;</td>
    <td>&nbsp;5V&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;GPIO199&nbsp;</td>
    <td>&nbsp;GPIO200&nbsp;</td>
    <td>&nbsp;GPIO204&nbsp;</td>
    <td>&nbsp;GND&nbsp;</td>
  </tr>
</table>

<p>It would be great if someone creates a simple python or java library to access these, right?</p>

<p><strong>Edit:</strong>
I have created the simple python library, it is over at GitHub here: <br>
<a href="https://github.com/zaiddabaeen/gpioU3P">https://github.com/zaiddabaeen/gpioU3P</a></p>

<h2 id="pythontutorial">Python Tutorial</h2>

<p>A simple python library to control the three GPIO pins on the Odroid U3+.</p>

<p>Clone the library using:  </p>

<pre><code>git clone https://github.com/zaiddabaeeen/gpiou3p  
</code></pre>

<h3 id="usage">Usage</h3>

<p>Simply import the library</p>

<pre><code>import gpiou3p as gpio
</code></pre>

<h4 id="writingtothepin">Writing to the pin</h4>

<ol>
<li><p>Setup the pin directions</p>

<pre><code>gpio.setup(gpio.PIN.GPIO199, gpio.DIRECTION.OUT)
</code></pre></li>
<li><p>Write to the pin</p>

<pre><code>gpio.write(1, gpio.PIN.GPIO199)
</code></pre></li>
</ol>

<h4 id="readingthepin">Reading the pin</h4>

<ol>
<li><p>Setup the pin directions</p>

<pre><code>gpio.setup(gpio.PIN.GPIO199, gpio.DIRECTION.IN)
</code></pre></li>
<li><p>Read the pin</p>

<pre><code>gpio.read(gpio.PIN.GPIO199)
</code></pre></li>
</ol>

<p>Check <code>example.py</code> file for an example case that blinks an LED.</p>

<blockquote>
  <p>You need sudo privileges to be able to edit the GPIO pins on the Odroid U3+</p>
</blockquote>]]></content:encoded></item><item><title><![CDATA[Launcher Testing]]></title><description><![CDATA[<p>Today we performed our first plane launching. Here is how our set up looked like:</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151120_102336.jpg" alt=""></p>

<p>Basically all you need is a slanted platform, a bungee cord, two hooks and a bunch of nails to put down the platform and cord into the ground.</p>

<p>The longer and the thicker the bungee</p>]]></description><link>http://nasa.z-proj.com/launcher-testing/</link><guid isPermaLink="false">f9b0f2cb-72d3-4668-977d-824ee7bda098</guid><category><![CDATA[launcher]]></category><category><![CDATA[uav]]></category><category><![CDATA[bungee]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Sat, 21 Nov 2015 06:11:20 GMT</pubDate><media:content url="http://nasa.z-proj.com/content/images/2015/11/vlcsnap-2015-11-20-22h08m29s382-1.png" medium="image"/><content:encoded><![CDATA[<img src="http://nasa.z-proj.com/content/images/2015/11/vlcsnap-2015-11-20-22h08m29s382-1.png" alt="Launcher Testing"><p>Today we performed our first plane launching. Here is how our set up looked like:</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/IMG_20151120_102336.jpg" alt="Launcher Testing"></p>

<p>Basically all you need is a slanted platform, a bungee cord, two hooks and a bunch of nails to put down the platform and cord into the ground.</p>

<p>The longer and the thicker the bungee cord the more energy there is in the tension, which would let the plane fly farther.</p>

<p>The propellers were not connected as we just wanted to test the launching by itself. Our first flight test failed as the bungee cord did not have enough energy. For our second flight test, we placed it 2 meters farther and voila.</p>

<p><img src="http://nasa.z-proj.com/content/images/2015/11/vlcsnap-2015-11-20-22h08m29s382.png" alt="Launcher Testing"></p>]]></content:encoded></item><item><title><![CDATA[Auto-Connecting Ubuntu to Ad-Hoc Connection]]></title><description><![CDATA[<p>The Odroid U3 has Ubuntu 14.04 LTS Desktop version installed on its eMMC card.</p>

<p>In order to have an ad-hoc connection automatically connected on boot of the OS do the following steps:</p>

<ol>
<li><p>Edit <code>/etc/network/interfaces</code>, add these lines to the bottom and make sure there is no other</p></li></ol>]]></description><link>http://nasa.z-proj.com/auto-connecting-ubuntu-to-ad-hoc-connection/</link><guid isPermaLink="false">247a655d-e8d0-4836-8e74-c2767c0bc91f</guid><category><![CDATA[ad-hoc]]></category><category><![CDATA[ubuntu]]></category><category><![CDATA[wireless]]></category><dc:creator><![CDATA[Zaid Daba'een]]></dc:creator><pubDate>Thu, 19 Nov 2015 18:41:08 GMT</pubDate><content:encoded><![CDATA[<p>The Odroid U3 has Ubuntu 14.04 LTS Desktop version installed on its eMMC card.</p>

<p>In order to have an ad-hoc connection automatically connected on boot of the OS do the following steps:</p>

<ol>
<li><p>Edit <code>/etc/network/interfaces</code>, add these lines to the bottom and make sure there is no other configuration for your WiFi interface.</p>

<pre><code>auto wlan3
iface wlan3 inet static
  address 192.168.1.1
  netmask 255.255.255.0
  wireless-essid odroid
  wireless-mode ad-hoc
  wireless-key 1234567890
</code></pre></li>
<li><p>Edit <code>/etc/NetworkManager/NetworkManager.conf</code>, this should be a template for how to restrict the Network Manager to manage your WiFi interface.</p>

<pre><code>[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq


[ifupdown]
managed=false


[keyfile]
unmanaged-devices=mac:00:13:d4:c0:62:db
</code></pre>

<p>Where <code>00:13:d4:c0:62:db</code> is my WiFi interface MAC address.</p></li>
</ol>]]></content:encoded></item></channel></rss>