<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2789125881550613374</id><updated>2025-10-24T19:10:51.502+11:00</updated><category term="cmu-blue"/><category term="sumo"/><category term="motor control"/><category term="python"/><category term="video"/><category term="beat dialer"/><category term="arduino"/><category term="sythe"/><category term="site admin"/><category term="ifttt"/><category term="chassis"/><category term="cmucam"/><category term="computer vision"/><category term="software"/><category term="editorial"/><category term="sensors"/><category term="circuit diagrams"/><category term="dns twister"/><category term="picopter"/><category term="raspberry pi"/><category term="UI"/><category term="ez0"/><category term="genghisio"/><category term="google app engine"/><category term="lcd"/><category term="mozzy"/><category term="picaxe"/><category term="BEAM"/><category term="display"/><category term="dns"/><category term="gnomecam"/><category term="google calculator"/><category term="micro-walker"/><category term="opencv"/><category term="qr code"/><category term="vibrovore"/><category term="admin"/><category term="android"/><category term="apc220"/><category term="bluetooth"/><category term="cloudflare"/><category term="dnstwist"/><category term="dnstwister.report"/><category term="eclipse"/><category term="empythoned"/><category term="flask"/><category term="fpv"/><category term="gps"/><category term="headless"/><category term="heroku"/><category term="how-to"/><category term="javascript"/><category term="open source"/><category term="paas"/><category term="php"/><category term="php rss aggregator"/><category term="pongerator"/><category term="procrasti-bot"/><category term="qrtools"/><category term="radio"/><category term="remember the milk"/><category term="reviews"/><category term="robots"/><category term="rss"/><category term="seven segment"/><category term="sms"/><category term="solar engine"/><category term="speedometer"/><category term="sphero"/><category term="spi"/><category term="ssl"/><category term="statistics"/><category term="telnet"/><category term="twitter"/><category term="udp"/><category term="websockets"/><category term="webview"/><category term="xy table"/><category term="xyz table"/><category term="zbar"/><title type='text'>thisismyrobot</title><subtitle type='html'>Robots, drones and python code</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.thisismyrobot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>157</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1030622556650478507</id><published>2018-03-10T16:01:00.002+11:00</published><updated>2018-03-10T16:01:26.422+11:00</updated><title type='text'>My first 3D printable model!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLrrlWp8uNjgdXnsC4pdaAFUKRruhHFaxY82BRz8K4rVIVJYEJopcDAPOX2bzubX-cWs7bZ1NSPqQ79TEFOi8zodaruefMVVsBZ6XqsGvDufFaJVkUCmI3sS-2tM9yZDbMJG0fz6J3yQ/s1600/design_standalone_1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;584&quot; data-original-width=&quot;1000&quot; height=&quot;373&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLrrlWp8uNjgdXnsC4pdaAFUKRruhHFaxY82BRz8K4rVIVJYEJopcDAPOX2bzubX-cWs7bZ1NSPqQ79TEFOi8zodaruefMVVsBZ6XqsGvDufFaJVkUCmI3sS-2tM9yZDbMJG0fz6J3yQ/s640/design_standalone_1.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
I recently purchased an &lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;a href=&quot;https://www.banggood.com/GE-FPV-RX5808-Pro-5_8G-40CH-Diversity-FPV-Receiver-OLED-Display-For-Fatshark-Goggles-p-1047768.html?cur_warehouse=CN&quot; target=&quot;_blank&quot;&gt;RX5808 Pro Diversity FPV&lt;/a&gt; receiver and wanted to mount it on my &lt;/span&gt;&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;FPV box-style goggles&lt;/span&gt; in a manner that didn&#39;t just involve a metric ton of double-sided tape.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;I&#39;ve been interested in 3D printing for a long time, but the cost for a &quot;turnkey&quot; 3D printer has remained just out of reach. On top of this I hadn&#39;t done any 3D modelling since my Year 12 CAD class over fifteen years ago.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;Thankfully, that first problem can be resolved by places like &lt;a href=&quot;https://www.shapeways.com/&quot; target=&quot;_blank&quot;&gt;Shapeways&lt;/a&gt; and the second by a &lt;a href=&quot;http://www.openscad.org/&quot; target=&quot;_blank&quot;&gt;truly awesome program called OpenSCAD&lt;/a&gt; - a programming-driven 3D modeller.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;A day&#39;s furious measuring and coding, followed by two weeks delivery time from the US of A and look what arrived:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu1Z_eNMI2aFlMAREVmA_q1zzjzLF25_4zX9E10lf1LIJDOn6XTyWDsD4A5TeGpWznO4oghwYJ5NE_xdJ2Ds2jazHIs2udAdOsU94OyKC4vUdioT4CZVI26WEgoMT7pydOy-raFeiSJA/s1600/printed_standalone.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;819&quot; data-original-width=&quot;1024&quot; height=&quot;510&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu1Z_eNMI2aFlMAREVmA_q1zzjzLF25_4zX9E10lf1LIJDOn6XTyWDsD4A5TeGpWznO4oghwYJ5NE_xdJ2Ds2jazHIs2udAdOsU94OyKC4vUdioT4CZVI26WEgoMT7pydOy-raFeiSJA/s640/printed_standalone.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;Even better, it works:&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr5bzRvwZIaTTFSLTgMDzEYNFFJt_QIHcYqmmZiA18DKEXL7lQ0b0QUoHPpB9_Mb1uLousghp6VOOoQMYAsBaq85Gsu4JKWEqld1zXRFi-a7mpe6bh7GxWXoTwlpi-oaMUWgmJPnTInA/s1600/printed_installed.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;819&quot; data-original-width=&quot;1024&quot; height=&quot;510&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr5bzRvwZIaTTFSLTgMDzEYNFFJt_QIHcYqmmZiA18DKEXL7lQ0b0QUoHPpB9_Mb1uLousghp6VOOoQMYAsBaq85Gsu4JKWEqld1zXRFi-a7mpe6bh7GxWXoTwlpi-oaMUWgmJPnTInA/s640/printed_installed.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;I&#39;ve tweaked the control slot a touch since these photos, so if you just want the STL file, &lt;a href=&quot;https://github.com/thisismyrobot/drones/tree/master/Rx5808%20Pro/Custom%203D%20mount&quot; target=&quot;_blank&quot;&gt;it&#39;s in my drones repository&lt;/a&gt;, or you can support me by purchasing it from &lt;a href=&quot;https://www.shapeways.com/shops/robert-s-drone-parts&quot; target=&quot;_blank&quot;&gt;my Shapeways shop&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;col-11 text-gray-dark mr-2&quot; itemprop=&quot;about&quot;&gt;&lt;br /&gt;&lt;/span&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1030622556650478507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1030622556650478507'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2018/03/my-first-3d-printable-model.html' title='My first 3D printable model!'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLrrlWp8uNjgdXnsC4pdaAFUKRruhHFaxY82BRz8K4rVIVJYEJopcDAPOX2bzubX-cWs7bZ1NSPqQ79TEFOi8zodaruefMVVsBZ6XqsGvDufFaJVkUCmI3sS-2tM9yZDbMJG0fz6J3yQ/s72-c/design_standalone_1.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1467095522910888581</id><published>2017-12-30T11:54:00.000+11:00</published><updated>2017-12-30T11:54:18.817+11:00</updated><title type='text'>Installing OpenCV 3.3.1 with Python 3.5 bindings on a Raspberry Pi Zero running Raspbian Stretch</title><content type='html'>I&#39;ve been experimenting with some basic computer vision concepts on a Raspberry Pi as part of a small mobile robot project. Fundamental to this was getting OpenCV compiled and set up in Python, a process that took 5 or 6 tries over the majority of my Christmas/New Year break. Hopefully this guide will save you some proportion of that time when you have a go at it...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Assumptions&lt;/b&gt;&lt;br /&gt;
I&#39;m working off the assumption that you are using Python 3.5 and are working within an activated virtual environment for your project. I am also going to use &quot;~/myproject&quot; as a stand in for your specific project path. This means you will have already done something like:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/25cb4e17cc6d676e74ab6823a96c4653.js&quot;&gt;&lt;/script&gt;
You need to stay in that activated virtual environment for the duration of this guide.&lt;br /&gt;
&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Caveats&lt;/b&gt;&lt;br /&gt;
This install will be missing ffmpeg due to &lt;a href=&quot;https://github.com/opencv/opencv/issues/10080#issuecomment-347065542&quot; target=&quot;_blank&quot;&gt;a bug in the current version&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Virtual memory&lt;/b&gt;&lt;br /&gt;
I needed to add more virtual memory to get this to work, using the following steps:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/1bcabfe8aca9ef079d70927a76d6b73f.js&quot;&gt;&lt;/script&gt;
&lt;b&gt;Installation&lt;b&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;
Now, the fun part. These are the steps you need to run, in order. The &#39;make&#39; step will take 6-ish hours so is a good candidate for leaving overnight.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/61d520f0e05e95a86ff2455eb2799935.js&quot;&gt;&lt;/script&gt;

&lt;br /&gt;
&lt;b&gt;Virtual memory - again&lt;/b&gt;&lt;br /&gt;
It is important that you undo the virtual memory change above or you will risk corrupting you SD card. Just revert the value to 100 and start and stop the service.&lt;br /&gt;
&lt;br /&gt;
From here you should be able to import &#39;cv2&#39; from within the virtual environment&#39;s Python, and get on with actual development :)&lt;br /&gt;
&lt;br /&gt;
This guide couldn&#39;t have been made without the efforts of:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;
  &lt;a href=&quot;https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/&quot; rel=&quot;nofollow&quot;&gt;https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
  &lt;a href=&quot;https://github.com/ys7yoo/PiOpenCV&quot;&gt;https://github.com/ys7yoo/PiOpenCV&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
  &lt;a href=&quot;https://github.com/opencv/opencv/issues/10080#issuecomment-343976885&quot;&gt;https://github.com/opencv/opencv/issues/10080#issuecomment-343976885&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1467095522910888581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1467095522910888581'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2017/12/installing-opencv-331-with-python-35.html' title='Installing OpenCV 3.3.1 with Python 3.5 bindings on a Raspberry Pi Zero running Raspbian Stretch'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-3220576385084944659</id><published>2017-07-09T12:50:00.003+10:00</published><updated>2017-07-11T11:13:38.395+10:00</updated><title type='text'>NERFrame build write-up</title><content type='html'>My &lt;a href=&quot;http://www.thisismyrobot.com/2017/07/drones-drones-drones.html&quot; target=&quot;_blank&quot;&gt;NERFrame&lt;/a&gt;&amp;nbsp;FPV drone has generated enough interest that I&#39;ve decided to do a build write-up - so without further ado&amp;nbsp;&lt;a href=&quot;http://www.thisismyrobot.com/p/nerframe.html&quot; target=&quot;_blank&quot;&gt;here it is&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ4Zydl43C_V1-wA23RgzVJ1b2xm_D7phNHmiQlzYrxxZKWs2YVcPhlFuqZOUuVW-xPMWdwEvc0VXfCAb86noiD1k7Nw6o2Q3KKE9_kFsrZ5F424bIbjBpOCI-4wAA0nC9THVq0dvACg/s1600/glamour1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1201&quot; data-original-width=&quot;1600&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ4Zydl43C_V1-wA23RgzVJ1b2xm_D7phNHmiQlzYrxxZKWs2YVcPhlFuqZOUuVW-xPMWdwEvc0VXfCAb86noiD1k7Nw6o2Q3KKE9_kFsrZ5F424bIbjBpOCI-4wAA0nC9THVq0dvACg/s640/glamour1.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/3220576385084944659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/3220576385084944659'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2017/07/nerframe-build-write-up.html' title='NERFrame build write-up'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ4Zydl43C_V1-wA23RgzVJ1b2xm_D7phNHmiQlzYrxxZKWs2YVcPhlFuqZOUuVW-xPMWdwEvc0VXfCAb86noiD1k7Nw6o2Q3KKE9_kFsrZ5F424bIbjBpOCI-4wAA0nC9THVq0dvACg/s72-c/glamour1.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1453221654267918306</id><published>2017-07-02T16:06:00.000+10:00</published><updated>2017-07-02T16:06:04.571+10:00</updated><title type='text'>Drones drones drones</title><content type='html'>I&#39;ve got a new hobby! A couple of months ago I purchased my first FPV drone, the entry level &lt;a href=&quot;http://www.eachine.com/Eachine-Tiny-QX95-95mm-Micro-FPV-LED-Racing-Quadcopter-Based-On-F3-EVO-Brushed-Flight-Controller-p-415.html&quot; target=&quot;_blank&quot;&gt;Eachine QX95&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyp5X6LoTbTkg7Sj_896bW_-ppEv3JPtfFGXoessK2p0fQu_SfnM3iX0BFnKWRykI_UT_t7oRVDJt0_1Z9xy6um_MpxjuQJLpCmVsW18UBQ-qd7aiJCgLBb4KCErAt_8qn8gJK33qH8Q/s1600/pic.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;535&quot; data-original-width=&quot;640&quot; height=&quot;534&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyp5X6LoTbTkg7Sj_896bW_-ppEv3JPtfFGXoessK2p0fQu_SfnM3iX0BFnKWRykI_UT_t7oRVDJt0_1Z9xy6um_MpxjuQJLpCmVsW18UBQ-qd7aiJCgLBb4KCErAt_8qn8gJK33qH8Q/s640/pic.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
This glorious little machine came with a &lt;a href=&quot;https://github.com/betaflight/betaflight&quot; target=&quot;_blank&quot;&gt;Betaflight&lt;/a&gt;-compatible flight controller, and I&#39;ve since learnt how to build the ARM-targeted firmware (a first for me) after &lt;a href=&quot;https://github.com/betaflight/betaflight/compare/v3.1.7...thisismyrobot:ppm_freeze_3.1.7_patch#diff-5a9bf24388376542cd4115a5141145e7&quot; target=&quot;_blank&quot;&gt;adding a software failsafe&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I&#39;d played with an FPV camera on a basic toy drone before but this is my first foray into a FPV-specific drone. So far I&#39;ve been learning fairly quickly&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/1ZDustXBlQg?rel=0&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;
And then I pranged it.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;https://www.youtube.com/embed/YLv_cT1tP-s?rel=0&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;

&lt;br /&gt;
&lt;br /&gt;
Which became the perfect opportunity to build my first drone &quot;frame&quot;, out of old NERF rounds and hot glue :)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi79uyF6qLrSWrB8_22Pf2up8sMwNMUGSRp5W6p32tTm_DRMSIDMC8bKI5fAE5oJye3EQFxb1IqcaWhE9hleirkQY92nf6nPeqWBYvlWih7ooOPYzRhcKZfjWgLTpBN3wbkWEqvUnMJZA/s1600/19623332_302906366835833_2687668853118337024_n.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1080&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi79uyF6qLrSWrB8_22Pf2up8sMwNMUGSRp5W6p32tTm_DRMSIDMC8bKI5fAE5oJye3EQFxb1IqcaWhE9hleirkQY92nf6nPeqWBYvlWih7ooOPYzRhcKZfjWgLTpBN3wbkWEqvUnMJZA/s640/19623332_302906366835833_2687668853118337024_n.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The aptly-named Pink Rocket flies suspiciously well, though it&#39;s a touch docile compared to the original due to all the wind resistance from the cross-sectional area. It&#39;ll certainly do until the replacement frame arrives.&lt;br /&gt;
&lt;br /&gt;
Like most of my hobbies, there&#39;s a &lt;a href=&quot;https://github.com/thisismyrobot/drones&quot; target=&quot;_blank&quot;&gt;GitHub repo&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1453221654267918306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1453221654267918306'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2017/07/drones-drones-drones.html' title='Drones drones drones'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyp5X6LoTbTkg7Sj_896bW_-ppEv3JPtfFGXoessK2p0fQu_SfnM3iX0BFnKWRykI_UT_t7oRVDJt0_1Z9xy6um_MpxjuQJLpCmVsW18UBQ-qd7aiJCgLBb4KCErAt_8qn8gJK33qH8Q/s72-c/pic.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-5384637429415278252</id><published>2017-01-28T10:51:00.001+11:00</published><updated>2017-01-28T11:24:56.898+11:00</updated><title type='text'>Temporarily switching Wi-Fi networks from the command line on a Raspberry Pi</title><content type='html'>I recently had a scenario with my Raspberry Pi (Zero, running Raspbian) where I needed to temporarily switch away from the primary Wi-Fi connection to another access point (to drive a camera) then reconnect to my original network. Turns out &lt;a href=&quot;https://linux.die.net/man/8/wpa_cli&quot;&gt;wpa_cli&lt;/a&gt;&amp;nbsp;can do the trick:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/a9c6185bf344c017f36d9d79b7c0f185.js&quot;&gt;&lt;/script&gt;

The best thing about this approach is that it is non-persistent, so if it all goes horrible wrong you get your original networking configuration back upon reboot.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5384637429415278252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5384637429415278252'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2017/01/temporarily-switching-wi-fi-networks.html' title='Temporarily switching Wi-Fi networks from the command line on a Raspberry Pi'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1452790506019496418</id><published>2016-06-18T11:06:00.002+10:00</published><updated>2016-06-18T11:06:58.412+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="bluetooth"/><category scheme="http://www.blogger.com/atom/ns#" term="empythoned"/><category scheme="http://www.blogger.com/atom/ns#" term="flask"/><category scheme="http://www.blogger.com/atom/ns#" term="genghisio"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="open source"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="qr code"/><category scheme="http://www.blogger.com/atom/ns#" term="robots"/><category scheme="http://www.blogger.com/atom/ns#" term="websockets"/><category scheme="http://www.blogger.com/atom/ns#" term="webview"/><title type='text'>Open sourcing all the things</title><content type='html'>A while ago I was &lt;a href=&quot;http://www.thisismyrobot.com/2014/07/announcing-genghisio.html&quot;&gt;blogging&lt;/a&gt; &lt;a href=&quot;http://www.thisismyrobot.com/2015/05/on-genghisio.html&quot;&gt;about&lt;/a&gt;&amp;nbsp;GenghisIO - a project with the goal of removing all the mess involved in programming a small range of real-world robots - the IDE, drivers, cables etc etc.&lt;br /&gt;
&lt;br /&gt;
The project eventually stalled due to increasing complexity and decreasing resources (time...) but quite a few neat problems were solved along the way - so I have &lt;a href=&quot;https://github.com/thisismyrobot/genghis.io&quot;&gt;open sourced it&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
If you&#39;re interested in using Google App Engine applications, Python Flask with WebSockets, &lt;a href=&quot;https://github.com/replit/empythoned&quot;&gt;empythoned&lt;/a&gt;, Python QR code generation, Android WebViews and JavaScript -&amp;gt; Bluetooth communication then go and have a look.&lt;br /&gt;
&lt;br /&gt;
I&#39;d love to hear from you below if you find something useful in there :)&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1452790506019496418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1452790506019496418'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2016/06/open-sourcing-all-things.html' title='Open sourcing all the things'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-7946270618455607227</id><published>2016-04-30T15:10:00.000+10:00</published><updated>2016-04-30T15:10:07.034+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="apc220"/><category scheme="http://www.blogger.com/atom/ns#" term="headless"/><category scheme="http://www.blogger.com/atom/ns#" term="radio"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberry pi"/><title type='text'>Wireless headless Raspberry Pi Zero with APC220 radios</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW1Sa9NZB_GHKUzNCyVCcPYMGqWtX-T9lXxPseli3R3vKmMyuMznLo-F6B6nelrRMDSvhAfCEr8k-QOZ-Fu72PlPJSK_-KrtuktFRPQ8eKEgX6dDbVi-PyUbHzSEJ4X6gp2y63DqeRCQ/s1600/2016-04-30+13.05.09.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW1Sa9NZB_GHKUzNCyVCcPYMGqWtX-T9lXxPseli3R3vKmMyuMznLo-F6B6nelrRMDSvhAfCEr8k-QOZ-Fu72PlPJSK_-KrtuktFRPQ8eKEgX6dDbVi-PyUbHzSEJ4X6gp2y63DqeRCQ/s640/2016-04-30+13.05.09.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
As a bit of a weekend project and as a way to (finally) use the really cool &lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=57&quot;&gt;APC220 Radio Communication modules&lt;/a&gt;&amp;nbsp;that I bought ages ago I&#39;ve put together a wireless and &quot;headless&quot; setup for my Raspberry Pi Zero. This allows me to have a remote-controllable Pi Zero placed anywhere within 1 km (line of sight) without wires! I&#39;m hoping to use this as a robot backpack initially, probably for the Jumping Sumo.&lt;br /&gt;
&lt;br /&gt;
I won&#39;t go into technical detail as the build was simply connecting the power and TX/RX from the Pi UART to the APC220 module (I&#39;ve used protoboard to make a &quot;hat&quot;) and telling the Pi to use ttyAMA0 for the console in /boot/cmdline.txt.&lt;br /&gt;
&lt;br /&gt;
If you have any specific how-to questions, let me know in the comments. In the meantime enjoy the photos :)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: left; margin-right: 1em; text-align: left;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIYNzm8vf8bC6x3uQFq57Aub13eNjtmDgaIpSzMBvICh9vewm6bVPxYLArefQMtgtSvmMQNlyBw40qx5JBwPQpBYEn1vhpdfHkdlJH9o4lB-4hClLyIMltz0t7J9kEbFXv82RTFVOoaw/s1600/2016-04-30+14.13.51.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIYNzm8vf8bC6x3uQFq57Aub13eNjtmDgaIpSzMBvICh9vewm6bVPxYLArefQMtgtSvmMQNlyBw40qx5JBwPQpBYEn1vhpdfHkdlJH9o4lB-4hClLyIMltz0t7J9kEbFXv82RTFVOoaw/s320/2016-04-30+14.13.51.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The top of the hat&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;float: right; margin-left: 1em; text-align: right;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfe6szEjOQGiNmRDyanMY73d1dxJ1QIbymCmbzDZrh_G-5VadRqIy0asnYBZa_Nosp8Pv7FPrzNOFzU4UwZ6tDVw7SW4nMK2mrjA00IkTvaemAhon0H4vMmSzLT6Z6IAG3V51lCxZhDg/s1600/2016-04-30+14.14.10.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfe6szEjOQGiNmRDyanMY73d1dxJ1QIbymCmbzDZrh_G-5VadRqIy0asnYBZa_Nosp8Pv7FPrzNOFzU4UwZ6tDVw7SW4nMK2mrjA00IkTvaemAhon0H4vMmSzLT6Z6IAG3V51lCxZhDg/s320/2016-04-30+14.14.10.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The bottom of the hat and Pi header&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div style=&quot;clear: both;&quot;&gt;
&lt;/div&gt;
At the local end I am using an USB-TTL adapter and Putty to connect to the Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaGix0EfMdONLVGSvdpj01FKbagpLphtjhs9iFYavscgR-G8DzUuILcHzg7alVllQz_an2YfS1j7PIEpB8IYbIO1eMP1ehF8mTuUvHGQ1N2VchB1oxwQEEF1ueSxGKIIzFBlZ1de7MtA/s1600/2016-04-30+13.04.48.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaGix0EfMdONLVGSvdpj01FKbagpLphtjhs9iFYavscgR-G8DzUuILcHzg7alVllQz_an2YfS1j7PIEpB8IYbIO1eMP1ehF8mTuUvHGQ1N2VchB1oxwQEEF1ueSxGKIIzFBlZ1de7MtA/s640/2016-04-30+13.04.48.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg93RlP3AkHo84IN-28xUViQOFSk-9KLnCY_OUGrEwyxU-HarpEmeiXmClzs0xwtCMykO2VPOxinSqk_UUblrQv92C-nUAcSQ8Ygrwtr0v78drd6V1SLeS6Lnf2qiiuqvvGMmLngZIhyphenhypheng/s1600/2016-04-30+14.16.19.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg93RlP3AkHo84IN-28xUViQOFSk-9KLnCY_OUGrEwyxU-HarpEmeiXmClzs0xwtCMykO2VPOxinSqk_UUblrQv92C-nUAcSQ8Ygrwtr0v78drd6V1SLeS6Lnf2qiiuqvvGMmLngZIhyphenhypheng/s640/2016-04-30+14.16.19.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/7946270618455607227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/7946270618455607227'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2016/04/wireless-headless-raspberry-pi-zero.html' title='Wireless headless Raspberry Pi Zero with APC220 radios'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW1Sa9NZB_GHKUzNCyVCcPYMGqWtX-T9lXxPseli3R3vKmMyuMznLo-F6B6nelrRMDSvhAfCEr8k-QOZ-Fu72PlPJSK_-KrtuktFRPQ8eKEgX6dDbVi-PyUbHzSEJ4X6gp2y63DqeRCQ/s72-c/2016-04-30+13.05.09.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-4994168604242508903</id><published>2016-02-06T10:39:00.002+11:00</published><updated>2016-02-06T10:40:32.465+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloudflare"/><category scheme="http://www.blogger.com/atom/ns#" term="dns"/><category scheme="http://www.blogger.com/atom/ns#" term="dns twister"/><category scheme="http://www.blogger.com/atom/ns#" term="dnstwister.report"/><category scheme="http://www.blogger.com/atom/ns#" term="ssl"/><title type='text'>It&#39;s all in the (domain) name</title><content type='html'>After taking a crash course in &lt;a href=&quot;https://en.wikipedia.org/wiki/CNAME_record&quot; target=&quot;&quot;&gt;CNAME entries&lt;/a&gt;&amp;nbsp;and CloudFlare&#39;s free SSL I&#39;ve moved dnstwister to a shiny new domain:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;a href=&quot;https://dnstwister.report/&quot;&gt;dnstwister.report&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
Using CloudFlare has restored 99% of the performance-helping caching that the old Google App Engine site had - the only negative &lt;a href=&quot;http://www.thisismyrobot.com/2016/02/dnstwister-is-now-on-heroku.html&quot;&gt;from the migration&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The DNS entries are still propagating at the time of posting so if you have any issues you can still use the &lt;a href=&quot;https://dnstwister.herokuapp.com/&quot;&gt;old domain&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4994168604242508903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4994168604242508903'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2016/02/its-all-in-domain-name.html' title='It&#39;s all in the (domain) name'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-5850413893990385568</id><published>2016-02-03T18:47:00.000+11:00</published><updated>2016-02-03T18:47:40.399+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dns"/><category scheme="http://www.blogger.com/atom/ns#" term="dns twister"/><category scheme="http://www.blogger.com/atom/ns#" term="heroku"/><category scheme="http://www.blogger.com/atom/ns#" term="paas"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="software"/><title type='text'>DNSTwister is now on Heroku</title><content type='html'>Well, the title says it all. I&#39;ve moved &lt;a href=&quot;https://dnstwister.herokuapp.com/&quot;&gt;dnstwister&lt;/a&gt; to &lt;a href=&quot;https://www.heroku.com/&quot;&gt;Heroku&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It &lt;a href=&quot;https://github.com/thisismyrobot/dnstwister/compare/1.1...5d520b89c80ff8515eab4cf8a09b03bd9039a072&quot;&gt;didn&#39;t take a lot of work&lt;/a&gt; and the benefits are huge - the killer for me was the ability to control exactly how much the application scaled up cost-wise. The costing for hobbyist use on Google App Engine was, in my opinion, completely unmanageable. You couldn&#39;t limit the performance of your app under load, the only option was to just pay more and more until you covered the quota exhaustion. With Heroku if I get a surge in interest it&#39;ll just get a bit slower, and I can choose to scale up at that point as necessary.&lt;br /&gt;
&lt;br /&gt;
I also like deploying through pushing a branch to GitHub and the whole admin dashboard interface is really slick.&lt;br /&gt;
&lt;br /&gt;
Bookmarked report links will automatically redirect from the old domain so you shouldn&#39;t feel a thing and the performance is right on par with Google App Engine.&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5850413893990385568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5850413893990385568'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2016/02/dnstwister-is-now-on-heroku.html' title='DNSTwister is now on Heroku'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-8981237804764983737</id><published>2015-12-26T19:03:00.000+11:00</published><updated>2015-12-26T19:03:29.914+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="lcd"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberry pi"/><category scheme="http://www.blogger.com/atom/ns#" term="seven segment"/><category scheme="http://www.blogger.com/atom/ns#" term="spi"/><title type='text'>Driving a DFRobot 3-Wire LED module from a Raspberry Pi</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicPmOAydtgTY_zgZG_vvNEdF55CcmLdfDd_3styRrWgYe7_ShkJCIo9Ya-gFbSujIM-MX0dFwlPtBxFGUhOgCx9rSIUvzPqaaTOA5U-PMzBKbNzlby0FErMvmiflD9oYkUURMCZL7mNQ/s1600/2015-12-26+18.38.02.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicPmOAydtgTY_zgZG_vvNEdF55CcmLdfDd_3styRrWgYe7_ShkJCIo9Ya-gFbSujIM-MX0dFwlPtBxFGUhOgCx9rSIUvzPqaaTOA5U-PMzBKbNzlby0FErMvmiflD9oYkUURMCZL7mNQ/s640/2015-12-26+18.38.02.jpg&quot; width=&quot;480&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Here&#39;s some very simple test code that you can use to drive &lt;a href=&quot;http://www.dfrobot.com/index.php?route=product/product&amp;amp;filter_name=DFR0090&amp;amp;product_id=374#.Vn5IDfl96Co&quot;&gt;one of these LED modules&lt;/a&gt; from a Raspberry Pi:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;//gist.github.com/thisismyrobot/c592cc9d85c21e04626c.js&quot;&gt;&lt;/script&gt;
&lt;br /&gt;
(The misspelling was intentional, I figured &quot;Raspbery&quot; looked better than &quot;Raspberr&quot; :D)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8981237804764983737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8981237804764983737'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/12/driving-dfrobot-3-wire-led-module-from.html' title='Driving a DFRobot 3-Wire LED module from a Raspberry Pi'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicPmOAydtgTY_zgZG_vvNEdF55CcmLdfDd_3styRrWgYe7_ShkJCIo9Ya-gFbSujIM-MX0dFwlPtBxFGUhOgCx9rSIUvzPqaaTOA5U-PMzBKbNzlby0FErMvmiflD9oYkUURMCZL7mNQ/s72-c/2015-12-26+18.38.02.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-3909275969833100531</id><published>2015-12-26T10:29:00.001+11:00</published><updated>2015-12-26T10:29:35.588+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><title type='text'>Pic: Just need to fill in the missing bits #boxingday #shopping #littlebirdelectronics</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1R0nz6y&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/3909275969833100531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/3909275969833100531'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/12/pic-just-need-to-fill-in-missing-bits.html' title='Pic: Just need to fill in the missing bits #boxingday #shopping #littlebirdelectronics'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-5384619272950456049</id><published>2015-12-18T21:08:00.001+11:00</published><updated>2015-12-18T21:08:05.538+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><title type='text'>Pic: #walle</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1NWNifb&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5384619272950456049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/5384619272950456049'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/12/pic-walle.html' title='Pic: #walle'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1101662579367856998</id><published>2015-12-16T19:57:00.000+11:00</published><updated>2015-12-16T19:57:04.849+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dns twister"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="UI"/><title type='text'>DNS Twister updated</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirGx2AnY0pYRHBceymLnWk9NIIysPfRfv7tacmKDycbyf6iuaLbrh9Y0x4mhNBM8zRp05-oD_5OdpmGrEUUPJ0WSB4j_tz1wwxEW3NTg5Itv1kq_90DVf_g5cUPmJhTWcIERR64i8KZg/s1600/ui_1.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;236&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirGx2AnY0pYRHBceymLnWk9NIIysPfRfv7tacmKDycbyf6iuaLbrh9Y0x4mhNBM8zRp05-oD_5OdpmGrEUUPJ0WSB4j_tz1wwxEW3NTg5Itv1kq_90DVf_g5cUPmJhTWcIERR64i8KZg/s400/ui_1.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;https://dnstwister.appspot.com/&quot;&gt;DNS Twister&lt;/a&gt; has been updated to fix a number of small bugs, add a few features (it&#39;s significantly faster) and - for the sake of your eyes - there&#39;s been the addition of a &lt;a href=&quot;http://getskeleton.com/&quot;&gt;bit of css&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://dnstwister.appspot.com/&quot;&gt;Go have a play!&lt;/a&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1101662579367856998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1101662579367856998'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/12/dns-twister-updated.html' title='DNS Twister updated'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirGx2AnY0pYRHBceymLnWk9NIIysPfRfv7tacmKDycbyf6iuaLbrh9Y0x4mhNBM8zRp05-oD_5OdpmGrEUUPJ0WSB4j_tz1wwxEW3NTg5Itv1kq_90DVf_g5cUPmJhTWcIERR64i8KZg/s72-c/ui_1.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1680499056850019067</id><published>2015-11-08T18:05:00.000+11:00</published><updated>2015-11-08T18:05:14.013+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="dns twister"/><category scheme="http://www.blogger.com/atom/ns#" term="dnstwist"/><category scheme="http://www.blogger.com/atom/ns#" term="google app engine"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Side project time: DNS Twister</title><content type='html'>Recently I came across a really awesome Python tool called &lt;a href=&quot;https://github.com/elceef/dnstwist&quot;&gt;dnstwist&lt;/a&gt;. In the author&#39;s words, dnstwist is a &quot;Domain name permutation engine for detecting typo squatting, phishing and corporate espionage&quot;.&lt;br /&gt;
&lt;br /&gt;
At its core dnstwist creates permutations of domain names and checks to see if they are registered. It also does a ton of other cool things like GeoIP mapping to resolved IP addresses.&lt;br /&gt;
&lt;br /&gt;
As I am sure there are people who would like to use dnstwist but don&#39;t have Python installed, I have (after a weekend&#39;s re-familiarisation with Google App Engine) created&amp;nbsp;&lt;a href=&quot;https://dnstwister.appspot.com/&quot;&gt;DNS Twister&lt;/a&gt;!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNKPgNGcud2SbAEvAm38davih1j8u2_2_gEO3kNAoYch9YrgGHTEzk9nTL2apsjH2iqUlmwIWtyDOlAkbg1y-tGDIjHzC60aP3bpt3lh_j3ws1PlZ240_qXZnfisfw-N7VwbKBm8Yzg/s1600/dnstwist.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNKPgNGcud2SbAEvAm38davih1j8u2_2_gEO3kNAoYch9YrgGHTEzk9nTL2apsjH2iqUlmwIWtyDOlAkbg1y-tGDIjHzC60aP3bpt3lh_j3ws1PlZ240_qXZnfisfw-N7VwbKBm8Yzg/s400/dnstwist.PNG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
It may look rough as **** but it works, presenting the core dnstwist functionality via a web application.&lt;br /&gt;
&lt;br /&gt;
The source code &lt;a href=&quot;https://github.com/thisismyrobot/dnstwister&quot;&gt;is on GitHub&lt;/a&gt; of course.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1680499056850019067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1680499056850019067'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/11/side-project-time-dns-twister.html' title='Side project time: DNS Twister'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwNKPgNGcud2SbAEvAm38davih1j8u2_2_gEO3kNAoYch9YrgGHTEzk9nTL2apsjH2iqUlmwIWtyDOlAkbg1y-tGDIjHzC60aP3bpt3lh_j3ws1PlZ240_qXZnfisfw-N7VwbKBm8Yzg/s72-c/dnstwist.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-1183255924777367810</id><published>2015-10-25T10:10:00.000+11:00</published><updated>2015-10-25T10:11:31.403+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberry pi"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><title type='text'>Docking/charging system overview</title><content type='html'>As a follow-up to &lt;a href=&quot;http://www.thisismyrobot.com/2015/10/sumo-charge-update.html&quot;&gt;yesterday&#39;s post&lt;/a&gt;, here&#39;s another of my &lt;strike&gt;excellent&lt;/strike&gt;&amp;nbsp;terrible Visio diagrams, showing how the different bits of &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge&quot;&gt;software&lt;/a&gt; will work together on the RPi:&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmoFgAi0hB2-xP6wDi3HKqVAJErJpAnW5rg2_Kmwm0vjF3M5ipSsLSlglymyda8nKYbzRAQJs192iPrwdGOlTY6sGWZQ1Bl_06TDUlwPZpnd8aC2XD14Xc5Tn2vzdApKj0PtR4DnKVQ/s1600/system.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;215&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmoFgAi0hB2-xP6wDi3HKqVAJErJpAnW5rg2_Kmwm0vjF3M5ipSsLSlglymyda8nKYbzRAQJs192iPrwdGOlTY6sGWZQ1Bl_06TDUlwPZpnd8aC2XD14Xc5Tn2vzdApKj0PtR4DnKVQ/s400/system.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Click to see in all it&#39;s glory&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
The &lt;a href=&quot;https://github.com/thisismyrobot/sumo-proxy&quot;&gt;SumoProxy&lt;/a&gt; component is effectively complete and the &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge/blob/master/sumocharge/www.py&quot;&gt;Web Interface&lt;/a&gt; component allows viewing the FPV camera but doesn&#39;t offer any control. &lt;a href=&quot;https://github.com/thisismyrobot/sumo-py&quot;&gt;SumoPy&lt;/a&gt; and the &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge/blob/master/sumocharge/dock.py&quot;&gt;docking code&lt;/a&gt; &quot;work&quot;, but not yet in the manner shown.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1183255924777367810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/1183255924777367810'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/dockingcharging-system-overview.html' title='Docking/charging system overview'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzmoFgAi0hB2-xP6wDi3HKqVAJErJpAnW5rg2_Kmwm0vjF3M5ipSsLSlglymyda8nKYbzRAQJs192iPrwdGOlTY6sGWZQ1Bl_06TDUlwPZpnd8aC2XD14Xc5Tn2vzdApKj0PtR4DnKVQ/s72-c/system.png" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-2948962628794076242</id><published>2015-10-24T21:18:00.001+11:00</published><updated>2015-10-24T21:18:58.856+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="raspberry pi"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Sumo-charge update</title><content type='html'>Thanks to a super-long-weekend my &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge&quot;&gt;Parrot Jumping Sumo wireless charging project&lt;/a&gt;&amp;nbsp;has been making good progress.&lt;br /&gt;
&lt;br /&gt;
The current design has the Raspberry Pi &quot;proxy&quot; the Jumping Sumo, teeing off the data passing between the controller (iPad/phone/etc) and the Sumo.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWfR6xlbfdW8-VW72dpEtOz_KQlUCN_IylZguz-vhRlZiWtz02sGAoARMmab5Eq5ZTGX8IWCbkPn_ehkiEKAHw8-7OohBUvGsR2mlyLhmwnrM2luM2UXs-9c4LGmb37qHFZ7r6ij9CSQ/s1600/web+frame.PNG&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;186&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWfR6xlbfdW8-VW72dpEtOz_KQlUCN_IylZguz-vhRlZiWtz02sGAoARMmab5Eq5ZTGX8IWCbkPn_ehkiEKAHw8-7OohBUvGsR2mlyLhmwnrM2luM2UXs-9c4LGmb37qHFZ7r6ij9CSQ/s200/web+frame.PNG&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
There is a basic&amp;nbsp;web interface where the user can view the FPV video, and (soon) enable the automated docking sequence. The web interface runs off a &lt;a href=&quot;http://flask.pocoo.org/&quot;&gt;flask&lt;/a&gt;&amp;nbsp;web server which can parse the video data and will inject controls back into the stream.&lt;br /&gt;
&lt;br /&gt;
I expect I&#39;ll switch to web-only control once I&#39;ve proved the web interface can perform on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;SumoPy and SumoProxy&lt;/b&gt;&lt;br /&gt;
Two components of this project are available separately via these repositories if you want a play: &lt;a href=&quot;https://github.com/thisismyrobot/sumo-py&quot;&gt;SumoPy&lt;/a&gt;, &lt;a href=&quot;https://github.com/thisismyrobot/sumo-proxy&quot;&gt;SumoProxy&lt;/a&gt;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2948962628794076242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2948962628794076242'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/sumo-charge-update.html' title='Sumo-charge update'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWfR6xlbfdW8-VW72dpEtOz_KQlUCN_IylZguz-vhRlZiWtz02sGAoARMmab5Eq5ZTGX8IWCbkPn_ehkiEKAHw8-7OohBUvGsR2mlyLhmwnrM2luM2UXs-9c4LGmb37qHFZ7r6ij9CSQ/s72-c/web+frame.PNG" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-2333816466492765637</id><published>2015-10-18T16:32:00.000+11:00</published><updated>2015-10-18T16:33:09.290+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Faster barcode tracking</title><content type='html'>Leveraging the work done to speed up both video capture and motor control, here&#39;s a significantly faster tracking example:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;instagram-media&quot; data-instgrm-version=&quot;5&quot; style=&quot;background: #FFF; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width: 658px; padding: 0; width: -webkit-calc(100% - 2px); width: 99.375%; width: calc(100% - 2px);&quot;&gt;
&lt;div style=&quot;padding: 8px;&quot;&gt;
&lt;div style=&quot;background: #F8F8F8; line-height: 0; margin-top: 40px; padding: 50.0% 0; text-align: center; width: 100%;&quot;&gt;
&lt;div style=&quot;background: url(data:image/png; display: block; height: 44px; margin: 0 auto -44px; position: relative; top: -22px; width: 44px;&quot;&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;&quot;&gt;
&lt;a href=&quot;https://instagram.com/p/89xoV8CqAr/&quot; style=&quot;color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none;&quot; target=&quot;_blank&quot;&gt;A video posted by Robert Wallhead (@thisreallyismyrobot)&lt;/a&gt; on &lt;time datetime=&quot;2015-10-18T04:18:01+00:00&quot; style=&quot;font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;&quot;&gt;Oct 17, 2015 at 9:18pm PDT&lt;/time&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;script async=&quot;&quot; defer=&quot;&quot; src=&quot;//platform.instagram.com/en_US/embeds.js&quot;&gt;&lt;/script&gt;

On board it looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi10MqS8e3P4noMcsgRztoZVdxBLS6eNYRA-7KGU-pYRb6IV6LtDxuQuaRd7OJAPc-agSS1F6-Mkt8CeSBxe0QJR-ld9mPYxa0jUzjN7ZGZyJxEeo23FKd5tJqrt00Ip2kCT0ZzqBVwIA/s1600/Jumping_Sumo_2015-10-18T143129%252B0000_560CD6.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi10MqS8e3P4noMcsgRztoZVdxBLS6eNYRA-7KGU-pYRb6IV6LtDxuQuaRd7OJAPc-agSS1F6-Mkt8CeSBxe0QJR-ld9mPYxa0jUzjN7ZGZyJxEeo23FKd5tJqrt00Ip2kCT0ZzqBVwIA/s400/Jumping_Sumo_2015-10-18T143129%252B0000_560CD6.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2333816466492765637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2333816466492765637'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/faster-barcode-tracking.html' title='Faster barcode tracking'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi10MqS8e3P4noMcsgRztoZVdxBLS6eNYRA-7KGU-pYRb6IV6LtDxuQuaRd7OJAPc-agSS1F6-Mkt8CeSBxe0QJR-ld9mPYxa0jUzjN7ZGZyJxEeo23FKd5tJqrt00Ip2kCT0ZzqBVwIA/s72-c/Jumping_Sumo_2015-10-18T143129%252B0000_560CD6.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-6676518708995250094</id><published>2015-10-18T13:44:00.001+11:00</published><updated>2015-10-18T16:33:19.999+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sphero"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><title type='text'>Success!</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1fWeIdIrzJHA1W1ngF76qSH7kHbECY1vq0KWOXtngQKQ82STbirFjgSLiVpoCAsIacxaoPmdeUTc5uJuDQw0VAHhZULZtE0NauV7GGCWaiCzCyOx1fDbnMrm_ZcSOhwt32NbNXH_VQ/s1600/output.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1fWeIdIrzJHA1W1ngF76qSH7kHbECY1vq0KWOXtngQKQ82STbirFjgSLiVpoCAsIacxaoPmdeUTc5uJuDQw0VAHhZULZtE0NauV7GGCWaiCzCyOx1fDbnMrm_ZcSOhwt32NbNXH_VQ/s400/output.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
The first photo taken by &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge/blob/master/src/sumocharge/sumopy/__init__.py&quot;&gt;properly scraping the video stream&lt;/a&gt;.&lt;/div&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/6676518708995250094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/6676518708995250094'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/success.html' title='Success!'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH1fWeIdIrzJHA1W1ngF76qSH7kHbECY1vq0KWOXtngQKQ82STbirFjgSLiVpoCAsIacxaoPmdeUTc5uJuDQw0VAHhZULZtE0NauV7GGCWaiCzCyOx1fDbnMrm_ZcSOhwt32NbNXH_VQ/s72-c/output.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-8525511606395533104</id><published>2015-10-18T10:09:00.000+11:00</published><updated>2015-10-18T10:09:56.969+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><category scheme="http://www.blogger.com/atom/ns#" term="udp"/><category scheme="http://www.blogger.com/atom/ns#" term="video"/><title type='text'>Capturing Parrot Jumping Sumo video packets in Python&#39;s UDPServer</title><content type='html'>One of the key goals of my &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge&quot;&gt;sumo-charge&lt;/a&gt; project has been to have the Sumo auto-dock by driving towards a &quot;landmark&quot; (a barcode in my case).&lt;br /&gt;
&lt;br /&gt;
To do this I obviously need access to the video stream from the Sumo. The video UDP packets are the same format as the rest of the response data, but for some reason I was not receiving them using Python&#39;s &lt;a href=&quot;https://docs.python.org/2/library/socketserver.html#socketserver-udpserver-example&quot;&gt;UDPServer&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
After much flailing around on Google I fired up Wireshark and discovered those packets were being sent still, so it was definitely a problem with my UDP server. Digging deeper (&lt;a href=&quot;http://stackoverflow.com/questions/18066410/python-change-max-limit-recv-buffer-in-udpserver/18090303#18090303&quot;&gt;thanks, stack overflow&lt;/a&gt;) I discovered that the maximum packet size in UDPServer was hard-coded to less than the size of the video packets.&lt;br /&gt;
&lt;br /&gt;
The size of the video packets sent by the Sumo is established in the reply during the initialisation handshake to TCP port 44444, in the &#39;arstream_fragment_size&#39; field (65000 in this instance):&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/a0321cf4f571fe56e388.js&quot;&gt;&lt;/script&gt;
To receive the video packets you need to update your UDPServer instance&#39;s &#39;max_packet_size&#39; with the same value:
&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/thisismyrobot/ba8c532425a6c5049516.js&quot;&gt;&lt;/script&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8525511606395533104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8525511606395533104'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/capturing-parrot-jumping-sumo-video.html' title='Capturing Parrot Jumping Sumo video packets in Python&#39;s UDPServer'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-4219684561221821076</id><published>2015-10-16T19:08:00.001+11:00</published><updated>2015-10-16T19:08:05.996+11:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><title type='text'>Pic: It&#39;s a while since I last used Visio...</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1k99NSP&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4219684561221821076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4219684561221821076'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/10/pic-its-while-since-i-last-used-visio.html' title='Pic: It&#39;s a while since I last used Visio...'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-4767082309770726840</id><published>2015-09-26T13:37:00.001+10:00</published><updated>2015-09-26T13:37:15.666+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><title type='text'>Pic: Interested parties #cats</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1OXOvmV&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4767082309770726840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4767082309770726840'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/09/pic-interested-parties-cats.html' title='Pic: Interested parties #cats'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-567163397376458327</id><published>2015-09-23T20:04:00.001+10:00</published><updated>2015-09-23T20:04:22.857+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><title type='text'>Pic: Low tech motor calibration #sumo</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1NLIrgi&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/567163397376458327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/567163397376458327'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/09/pic-low-tech-motor-calibration-sumo.html' title='Pic: Low tech motor calibration #sumo'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-8675129727727063166</id><published>2015-09-21T17:21:00.000+10:00</published><updated>2015-09-21T17:21:18.085+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="fpv"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="qr code"/><category scheme="http://www.blogger.com/atom/ns#" term="qrtools"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><category scheme="http://www.blogger.com/atom/ns#" term="zbar"/><title type='text'>QR tracking using the Parrot Jumping Sumo camera</title><content type='html'>&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAZGqZZ6EU5wkt0fDM1_PXEWcSw73wv6GCvjEwUZx3lQnKZs9U0XZxLfxk-9pktRMEmL_lqlGxEJiGyXZYd7w2EJvH2_ufqZJsC-KOKFaL78UXrr3Cbgmn4CtgRlA23_KgMGR-W2UbtA/s1600/0cm+with+7x7cm+qr.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAZGqZZ6EU5wkt0fDM1_PXEWcSw73wv6GCvjEwUZx3lQnKZs9U0XZxLfxk-9pktRMEmL_lqlGxEJiGyXZYd7w2EJvH2_ufqZJsC-KOKFaL78UXrr3Cbgmn4CtgRlA23_KgMGR-W2UbtA/s400/0cm+with+7x7cm+qr.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Nested QR code with the Sumo&#39;s wheels against the monitor.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;text-align: left;&quot;&gt;To implement &quot;auto-docking&quot; I am intending to use a 7x7cm square nested QR code target and the Sumo&#39;s FPV camera. The QR nesting allows detection and recognition at distances up to 50cm whilst remaining accurate right up the moment of touching the docking station. The pictures shown here are actual snapshots from my Jumping Sumo&#39;s FPV camera (640x480 resolution).&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitruOVUj80pySlByQ0Bq7swCp3KKuoB6TudnbRF2rIyZtfoVvyhwoZrSR-ZS-0BpZ5UGOYDS_C-9h_XqhRQnuk97UapkjYO5NgoRQkpe7OaDDMzNKVgJyh04C0IQEmRney7t1P6sWFyA/s1600/30cm+with+7x7cm+qr.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitruOVUj80pySlByQ0Bq7swCp3KKuoB6TudnbRF2rIyZtfoVvyhwoZrSR-ZS-0BpZ5UGOYDS_C-9h_XqhRQnuk97UapkjYO5NgoRQkpe7OaDDMzNKVgJyh04C0IQEmRney7t1P6sWFyA/s400/30cm+with+7x7cm+qr.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Same QR code image at an approx range of 30cm from the monitor.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
I&#39;ve prototyped &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge/blob/743fbd0165e3fa5a0b72206026c62af170b425c0/img/qr/zbar_decode.py&quot;&gt;some detection code&lt;/a&gt; using an install of the python-qrtools package on the Raspberry Pi:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;//gist-it.appspot.com/https://github.com/thisismyrobot/sumo-charge/blob/743fbd0165e3fa5a0b72206026c62af170b425c0/img/qr/zbar_decode.py&quot;&gt;&lt;/script&gt;

This code successfully recognises the two QR codes in these test images, though it takes about half a second to do so.
&lt;br /&gt;
&lt;br /&gt;
Next up, a docking control loop!
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8675129727727063166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/8675129727727063166'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/09/qr-tracking-using-parrot-jumping-sumo.html' title='QR tracking using the Parrot Jumping Sumo camera'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAZGqZZ6EU5wkt0fDM1_PXEWcSw73wv6GCvjEwUZx3lQnKZs9U0XZxLfxk-9pktRMEmL_lqlGxEJiGyXZYd7w2EJvH2_ufqZJsC-KOKFaL78UXrr3Cbgmn4CtgRlA23_KgMGR-W2UbtA/s72-c/0cm+with+7x7cm+qr.jpg" height="72" width="72"/></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-4859126426754545030</id><published>2015-09-20T09:24:00.001+10:00</published><updated>2015-09-20T09:25:28.657+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ifttt"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><title type='text'>Pic: Drone life #alwayscharging #sumo</title><content type='html'>&lt;iframe src=&quot;http://ift.tt/1KAMATk&quot; width=&quot;612&quot; height=&quot;710&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; allowtransparency=&quot;true&quot;&gt;&lt;/iframe&gt;
</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4859126426754545030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/4859126426754545030'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/09/pic-drone-life-alwayscharging-sumo.html' title='Pic: Drone life #alwayscharging #sumo'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-2789125881550613374.post-2251106745114163795</id><published>2015-09-19T11:01:00.000+10:00</published><updated>2015-09-21T15:23:14.105+10:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sumo"/><category scheme="http://www.blogger.com/atom/ns#" term="telnet"/><title type='text'>Capturing photos from a Parrot Jumping Sumo using Python</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWBbmc3_BN8t0RN9VwM4mLIIEub8IelKOPCrDNKYY4BE-6QYgcwJb5vHi7jKaPyyKLjdqYFHOpJjaTp3RGkfva-66BnvZkpN0Cl2y3DN_4EfMgE85TxYpA2ynpzz08r5Yw3D9HscbFNQ/s1600/sumo2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWBbmc3_BN8t0RN9VwM4mLIIEub8IelKOPCrDNKYY4BE-6QYgcwJb5vHi7jKaPyyKLjdqYFHOpJjaTp3RGkfva-66BnvZkpN0Cl2y3DN_4EfMgE85TxYpA2ynpzz08r5Yw3D9HscbFNQ/s1600/sumo2.jpg&quot; /&gt;&lt;/a&gt;
Success!&lt;br /&gt;
&lt;br /&gt;
After a &lt;a href=&quot;http://www.thisismyrobot.com/2015/09/taking-snapshots-over-telnet-on-parrot.html&quot;&gt;slightly faulty first effort&lt;/a&gt; I have successfully taken a photo from my Jumping Sumo using Python&#39;s &lt;a href=&quot;https://docs.python.org/2/library/telnetlib.html&quot; target=&quot;&quot;&gt;telnetlib&lt;/a&gt;&amp;nbsp;module.&lt;br /&gt;
&lt;br /&gt;
In the &lt;a href=&quot;https://github.com/thisismyrobot/sumo-charge/blob/53e127d86634895f9ed3faf38849c9ac328f5f9b/src/get_frame.py&quot;&gt;following code&lt;/a&gt; the built-in &lt;i&gt;yavta &lt;/i&gt;tool is used to push (and buffer) a snapshot from the camera to /dev/stdout and then &lt;i&gt;base64&lt;/i&gt;&amp;nbsp;is used to push an encoded version of /dev/stdout back to the Python client where it is decoded and saved to disk. As before I have to &lt;i&gt;kill&lt;/i&gt;&amp;nbsp;the &lt;i&gt;dragon-prog&lt;/i&gt;&amp;nbsp;process to gain access to the camera.&lt;br /&gt;
&lt;br /&gt;
There are a number of alternative image capture routes using &lt;i&gt;yavta&lt;/i&gt;, e.g. saving the file to the Sumo&#39;s flash or a ram disk and using FTP to recover it. This one seems to be the quickest (and simplest) for now and will suffice for the purposes of identifying and homing in on the charging station.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: right;&quot;&gt;
&lt;/div&gt;
&lt;script src=&quot;//gist-it.appspot.com/https://github.com/thisismyrobot/sumo-charge/blob/53e127d86634895f9ed3faf38849c9ac328f5f9b/src/get_frame.py&quot;&gt;&lt;/script&gt;&lt;br /&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2251106745114163795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2789125881550613374/posts/default/2251106745114163795'/><link rel='alternate' type='text/html' href='http://www.thisismyrobot.com/2015/09/capturing-photos-from-parrot-jumping.html' title='Capturing photos from a Parrot Jumping Sumo using Python'/><author><name>Robert Wallhead</name><uri>http://www.blogger.com/profile/04562187401847192247</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWBbmc3_BN8t0RN9VwM4mLIIEub8IelKOPCrDNKYY4BE-6QYgcwJb5vHi7jKaPyyKLjdqYFHOpJjaTp3RGkfva-66BnvZkpN0Cl2y3DN_4EfMgE85TxYpA2ynpzz08r5Yw3D9HscbFNQ/s72-c/sumo2.jpg" height="72" width="72"/></entry></feed>