01
Feb 12

Battery Roundup

As I am now back in SoCal I’ve been doing a lot of thinking about how I’m going to eventually upgrade my motorcycle. What it needs most desperately is a lithium battery pack, charger, and BMS. First step is to get up to speed on whats available; this is what I came up with in my first bout of research. Also , because i have a fetish for visualization, i whipped up a quick sketch to create a series of “DDR Difficulty” graphs based on the 5 most relevant of these metrics: Specific Energy, Energy Density, Cost per Watt Hour, Continuous and Peak Discharge rates.
 



 
You can download the source here. To use it you will need Processing. Download the spreadhseet (linked above) as a CSV, make sure it is named battData.csv and is located in the data folder. There is a “Compare in vis” column in which you select 6 batteries to compare. If you want [to be awesome and] contribute to the list of batteries request edit priviledges on the google doc and i’ll approve you.
 
I could still improve the visual, as there are two things are potentially misleading.
1) every manafacturer seems to want to rate their batterie’s Ah capacity at different discharge rate. ie one 60Ah battery may fall to 40Ah when discharged at 1c, while another may only fall to 55. As 1c is closer to reality in an EV application. I’m considering editing the table to use approximated 1c capacities, as opposed to the advertised number. Such guestimations i think would still be more accurate than strictly following the advertised numbers.
2) As the batteries are directly contrasted with one another a value may seem low, while in reality it is quite adequate. For example Headway cells seem to have a rather low constant current and pulse discharge rate, however 5c/10c is plenty for most applications. At 5c the entire pack is drained in 12 minutes! this only seems low because there are also much higher discharge rate discharge batteries available.

Conclusion: Turnigy Lipos pretty much clean up. I’ve also heard good things about Hyperion, though I have yet to find a supplier; so they are not in the spreadsheet. Very impressed with whats available now, compared to when i first did the conversion in ’09. I just need to figure out how to keep those RC batteries well balanced and make sure they don’t explode. you know, the details xD

25
Jan 12

EV Talk

Had a good time last night at the Tokyo Hackerspace giving a short  talk on Electric Vehicle  tech and how to convert a motorcycle. Slides can be downloaded here,

 

 more about my conversion in the original post

–Z

10
Aug 11

ROS & Robovero

 

Working in the UCSB Robotics Lab  I’ve had the fortune of getting to play with one of those adorable little chewable linux computers , during the ~week before my move to Japan. While unfortunately I wont get to see it though to its installation as the nervous system on a hoping robot,  I’ve had the adventure of getting it all up and running with the ROS (Robot Operating System)  toolchain. I pulled a bit of hair out during the process, so hopefully this post will prevent others from having to do so.

 

 

 

As of now, this blog describes the process of getting Gumstix to boot Ubuntu Natty from an SD card , autoconnect to wifi, and subscribe to a  ROS topic.
I’m using a Gumstix Overo Fire COM, 8GB SD card, and the new Robovero daughter board.

You don’t need that exact hardware, but at minimum:

  • -Gumstix Overo Air/Fire/FE
  • -Micro SD card (8 GB in these examples)
  • -Overo daughter board (could be pretty much any one)
  • -Computer running Ubuntu
  • -A wireless (or wired if you have the right Gumstix daughter board) network that both the Overo and Host computer can connect to

 

Creating the Bootable Ubutnu SD Card

First grab a copy of rootstock – a nifty tool we will use to create our armel ubuntu image:

# apt-get install rootstock

cd to someplace where you dont mind making a mess:

# mkdir gumbuntu
# cd gumbuntu

Now to generate the image:

~/gumbuntu# rootstock --fqdn overo --login robot --password temppasswd --imagesize 8G --seed wget,vim,linux-firmware,wireless-tools,wpasupplicant,usbutils,build-essential,tmux,openssh-server,lynx,python-yaml,cmake,subversion,wget,python-setuptools,pkg-config,python-dev,ntp,libboost-dev,libboost-all-dev,libapr1,libapr1-dev,libaprutil1,libaprutil1-dev,liblog4cxx10,liblog4cxx10-dev --dist natty --serial ttyS2

You may want to edit this somewhat. For more info on rootstock see https://wiki.ubuntu.com/ARM/RootfsFromScratch

This is bound to take a while. So in the meantime crack open a new terminal session and get your sd card formatted and bootable by following the directions here. STOP after copying MLO u-boot.bin and uImage to the boot partition, because we will be using our own rootfs image. You can download MLO u-boot.bin and uImage from here.

Once rootstock has completed unzip everything to the SD card’s root partition (lets call it sdroot)

~/gumbuntu# cd /media/sdroot
/media/sdroot# tar xvaf ~/gumbuntu/armel-rootfs-[creation date].tgz

This will also take a while. Make yourself useful by getting your Overo ready for the next step. The Ubuntu image we are building unfortunately does not have built in support for the Overo’s wifi chip, so we are going to swipe the modules and firmware from the nand image (which we know works). You could probably also find this stuff on the interweb , but this way is a pretty simple one stop shop for everything. If your kernel versions do not match you may be better off extracting the stuff from one of the Gumstix images to avoid compadibility issues.

 

 

Copying Modules and WiFi Firmware

Plug the daughter board into your desktop as you would normally to get to the serial console, give the boards power and let the Overo boot into the NAND Angstrom distro. We will be connecting to a wifi network to transfer files, becasue afaik there is no reliable way to do this over the serial connection. From the console (in a session thats not extracting files):

$ screen /dev/ttyUSB1 115200
[you will see the overo booting into Angstrom]
login: root
# ifconfig wlan0 up
# iwconfig wlan0 essid [your SSID]
# dhclient wlan0
# /etc/init.d/sshd restart

If you use encription you are going to have to set up wpa_supplicant.conf , but I’ll trust you know how to do this. The sshd restart probably isnt strictly necessary, but can’t hurt. Also don’t forget your Gumstix’s IP address; lets pretend its 192.168.1.14

Once the files have finished extracting from the SD card you will want to do the following (from a fresh terminal ) :

# cd /media/sdroot/lib
/media/sdroot/lib# scp -r root@192.168.1.14:/lib/modules/* modules/
/media/sdroot/lib# scp root@192.168.1.14:/lib/firmware/sd8686* firmware/
/media/sdroot/lib# cd ..
/media/sdroot# scp -r root@192.168.1.14:/etc/network/* etc/network/
/media/sdroot/lib# cd
# umount -a

Your bootable Ubuntu MicroSD card is now all ready! plug it into the Overo and give it a go

 

 

Installing ROS

Log into your Gumstix Ubuntu distro with the username/pass you used in the rootstock command, connect to your router and install ros by running:

# ifconfig wlan0 up
# iwconfig wlan0 essid [your SSID]
# dhclient wlan0
# apt-get update #not really needed yet, but verifies that you are connected
# easy_install -U rosinstall
# rosinstall ~/ros "http://packages.ros.org/cgi-bin/gen_rosinstall.py?rosdistro=diamondback&variant=ros-base&overlay=no"

 

go get that cup of coffee.

 

now I’ll assume you can get your router to statically assign IPs , if not you will have to change things every time your router does.  Edit /etc/hosts to include the name of your desktop computer (which will be running roscore) lets pretend your desktop has IP address 192.168.1.4, and you want to name it desky

#echo "192.168.1.4 desky" >> /etc/hosts

#echo "source ~/ros/setup.bash" >> ~/.bashrc

#export ROS_MASTER_URI=http://Desky:11311

. ~/.bashrc

Now ROS is all set up! lets just configure the Gumstix so that it automatically connects to WiFi on boot.

 

 

Network Config

In /etc/rc.local put:

#ifconfig wlan0 up
#iwconfig wlan0 essid [your SSID]
#dhclient wlan0 -4

You may not need the -4 , but without it my connection would fail every few minutes and I would have to request a new lease.
Also if you are using encryption you will need to set up /etc/wpa_supplicant.conf and change the above lines to something more like:

#ifconfig wlan0 up
# wpa_supplicant -Dwext -i wlan0 -c/etc/wpa_supplicant.conf -B
#dhclient wlan0

Now your overo is all set! Unplug the mini-USB and reset the Overo. After about a minute you should see the outermost blue LED blink violently then remain lit. This means you are connected.
To make things easier on ourselves and ROS, lets make another similar entry in /etc/hosts. This time assume the gumstix is 192.168.1.8 and we want to name it gummy

#echo "192.168.1.8 gummy" >> /etc/hosts

no tricks there.  Now you can log into your overo wirelessly simply by running

ssh [user]@gummy

You can now run your ROS programs , and the two computers should be able to find each other seamlessly.

 

09
Aug 11

Radiation Map : work in progress

 
 A recent news article got me thinking about Geiger readings in Japan, after a bit of Googling I came across some cool things like an upcoming Geiger shield from the Tokyo Hackerspace, and an aggregate data feed from Pachube with nearly 500 live datapoints. Excited to have all this data I decided to whip up something simple (in Processing) to plot it all on a map. I’ve been looking into to applying a predictive modeling construct (perhaps something like an ensemble Kalman filter with an atmospheric dispersion model for Cesium 137), to be able to plot the theoretical radiation levels in all of Japan. I tried modeling it simply with exponential decay, but the results were pretty abysmal.. hopefully I’ll hear back from my environmental studies contact and have something legitimately cool to show you shortly.
 



03
Aug 11

Ubuntu’s boot time black magic

  

In the not too distant past I was a hardcore Gentoo geek. My computer was MY computer, and its speed and the extent to which it was custom tailored were personal points of pride. Over time more and more of my friends made the switch to Ubuntu, and urged me to follow suit. I resisted.

  

One day one of these friends challenged me to a boot race and my custom Gentoo kernel was pwnd by a stock Ubuntu build running on [slightly] inferior hardware. So I stopped resisting and agreed to give n00buntu a try.

  

Not having to untangle circular dependencies or spend hours surfing the forums to get my _____ device working, I’ve have grown increasingly fat, lazy, deaf, dumb, and blind to the inner workings of my system. I’ve become more and more content with the idea that Ubuntu is so fantastical because of black magic pixie dust sprinkled into the source code.

  

I was reminded again of this boot time wizardry again today while working with a Gumstix Overo board, when a rootstock generated headless Ubuntu build loaded noticeably faster than the Gumstix’s preloaded Angstrom image. Then I came across this forum post titled All about ureadhead :

  

  

from http://ubuntuforums.org/showthread.php?t=1434502

thanks Keybuk

15
Apr 11
12
Mar 11

silly

 

These are the things that keep me from getting the really good grades in school

 

Robot Fever from Z R on Vimeo.

 

Just got commands to push over zigbee, so I should be doing much cooler things shortly…

15
Feb 11

Surgical Proceedings

Been busy with classes this quarter- as usual i gave in to the allure of really cool sounding classes as well as the carrot and stick diploma thing…
but srsly- check out this schedule:

Sex – no its not offered through Exercise and Sports Studies ; actually a relatively easy sociology class that will count towards GE reqs. Im currently writing this instead of studying for the midterm that’s 32 minutes away.
Data Structures and Algorithms – a class that makes you think ‘damn that was clever’
Compilers - a class that makes you think ‘damn that was REALLY clever’
Ethics for Engineers- how to lie to your self in the mirror
Digital Control Design – a crazy amount of work for an upper division elective , but really worth it. The teacher [zomg] seems to actually care about her students learning and being interested in controls! I feel a lot of the loose ends from last quarter rapidly coming together.
xxxSmartphones – bi weekly seminars on the current technologies – learn the API on your own time.xxx =( dropped this one…

[wow wordrpress you suck at del, strike, and s tags]
So there’s my excuse for going a month+ between posts. Worse still, it means the fun non-curricular stuff now has to be saved for weekends…
Anyway here is the current run-down on the progress of these weekend amusements:

The FBVisual project has been kind of set aside for the moment, I made a few more screens (pictured below) which I don’t really consider to be 100% complete – but they are kind of neat as proof of concept, and at some point I would like to get them more polished.


What up: a cloud map in a word bubble. Larger words are words that appear more frequently, smaller words are less frequent. The left bubble was derived from a scan of all my friends current ‘status’ on facebook, while the one on the right it taken from the ‘about me’ section. Of course, I also do some filtering to get rid of words that are very common and not so interesting (prepositions and such) to make the good stuff pop out. Shows some interesting trends, especially around holidays or big events. Things like ‘snow’ ‘christmas’ ‘family’ and ‘new year’ emerged pretty strongly when i ran it a few months ago – wish i thought to run it on valentines day , I would have expected to see some lovey-dovey stuff come out.


She started out as an RB2000 kit I picked up during my travels East and will now in the process of being outfitted with some additional additional smarts and weaponry for that mech-warfare challenge.
When I heard about the challenge, it really caught my imagination and I thought it was just wayy to cool to pass up – the rules (in short) are as follows:
-No looking at the battle arena, except through a wireless camera mounted on the bot
-Robot must walk on legs
-Destroy all other robots!
(ok, in actuality they are a little more in depth, but you get the idea)



and this coming year , if all goes according to plan, they will be adding a ‘hardcore’ class which promotes the use of CO2 pistols, Flamethrowers, and Micro Rockets .


High tech + red neck = my kind of sport.

I bet you can guess which class I’ll be trying to enter =D
Major modifications to the RB2000 thus far:
New Skull – surgically inserted my nifty custom machined mounting bracket, wireless wide angle camera, zigbee mount, and red LED in the eye for good measure



Laser mounted and attached to arm - hopefully this will be sufficient feedback to let a remote machine know what the arm is pointed at through the computer vision loop. I have it tested and working with a fair amount of reliability, but it could definitely be improved.
New battery connectors!- ok maybe not so exciting – but will allow me to connect up my new 3Ah lithium polymer batteries alone, or 2 in parallel. Only thing that’s kinda a shame (for the efficiency junkie in me) is that the batteries are 7.2v and the board just uses a 5v linear regulator- which is like a 30% loss! There will still be plenty of juice, but if im feeling like a badass I may try to include a switching regulator stage at some point.

Zigbee board- purdy aint it?



The lovely thing was that when i finally got all the parts I needed to test it, I managed to kill the main servo driver board by (I think) shorting the 3.3v src to gnd with the dmm..
I wont repeat all the expletives uttered here, but suffice to say I was pretty unhappy.. Its looking like a replacement will run somewhere between $200 and $390 which and there would be a 2-3 week lead time to get the part from Japan. painful.

before I totally give up on repairing the thing, Im going to try just swapping out the 3.3v smc regulator with the hope that that’s all that got fried, but who knows…
wish me luck!

29
Nov 10

FB Visual; work in progress

Here’s a preview of what I have been working on lately: 

facebook friendverse visual from Z R on Vimeo.

 
A 3D data visualization, done in processing that takes info off the facebook API and uses it to bring some things to light about my list of friends, and what is going on in my facebook existence. In short what you see above is each one of my friends being placed in an orb with a mass proportional to the number of mutual friends we have, and connected to each mutual friend by a purple line representing a simulated pseudo spring/dampener system. Each friend is also connected to a fixed point (representing me) via a much weaker blue spring. Once everything is connected and the orbs are released from their might-as-well-be random positions, some kinda interesting behavior emerges.
 
  After the initial chaos settles, clusters organically form and begin to move independently. Its impossible to tell from the video, but each one of these clusters can actually be traced to the different circles of friends I’ve made in the past . The largest cluster is obviously UCSB, and some of the smaller ones I’ve linked to the high schools I went to, friends I made studying in Japan, people I’ve reconnected with from middle school, and even highschool summer programs. Kinda neat.
 
 
There is also another screen (no video yet) that, in a similar manner does a live display of everything occurring in the current user’s (ok only me so far) news feed. So if two friends write one another, they both appear, the spring slingshots from the sender and they oscillate vigorously for a few minutes until the dampening slows ‘em down. Visually, I still think it needs something though…  
 
I also plan to do a few, more statistical/informational, screens in 2d that give info about my friends as a group; things are looking busy until winter break but I hope for the time to implement this soon. Ultimately what I want from this project is something I can dedicate a computer (or a Chinese ipad) to and stick on my wall to be pretty and optimally tell me a bit about my social interwebs. Once I get it done I’ll try to make it easy to run between multiple users and post up the source.
     

26
Nov 10

Passive Dynamic Locomotion!

Now that I’m back in the business of keeping an up-to-date blog , here is a post describing in more detail the research I worked on during my stay in Japan. Of course the best, and unabridged version can be read here , or the slides from my talk here.
 
But in short, the work I did with the Osuka-Ishikawa Robotics Laboratory was on passive dynamic locomotion, and more specifically with what is being called the Phase Transition Phenomenon. As I described briefly in a previous post, the idea behind passive dynamic locomotion is that machines can be created which ‘walk’ passively; ie without the standard array of sensors/actuators that are typically required for this sort of task. Through clever mechanical design the control is implied in the physical structure and thus it is said that the system utilizes morphological computation to control motion. Of course these robots must be placed on an incline such that their decent down the slope allows them to regain the energy lost through the inelastic foot collisions. Furthermore, devices of this sort have started to be developed which are able to walk as well as run (running implies a phase of motion in which both feet are off of the ground) depending on the incline angle. Here is a video from another lab which has collaborated on some of this research:
 



 

While in Osaka my work involved setting up a simulation environment (using the Open Dynamics Engine, a free open source C++ rigid body physics engine) in which similar 3-dimensional passive dynamic walking mechanisms were tested and evolved to optimize walking/running ability. Below is an image showing an example body, and the parameters that were evolved.
 

 
Again, more detailed explanation of the procedure and results can be found in the paper linked to above, but the gist of it is that a Genetic Algorithm was employed utilizing a handcrafted tailored fitness function, 70% crossover, 25% mutation, 10% mutation amount, a population size of 256 and Stochastic Universal Selection to maintain a high level of genetic diversity. On my desktop PC 150 generations of evolution took ~12 hours, which certainly put a damper on the number of variants I could test given the limited amount time I was Osaka working on this… At any rate I still found that the GA was effective in creating machines that were increasingly able to walk/run below are a few graphs showing the course of the evolution.  

 
Below is some video showing the initial randomness of population0 compared to population150′s ability to take several steps before falling over. Although stable walking/running motion was never achieved, I still think the results are pretty interesting. In the paper/slides I talk about how things like a better fitness function, more generations of evolution, a faster program (or supercomputer), careful introduction of additional a priori knowledge , a different incline angle or body configuration could have improved this. I am not currently working on developing this any further, but I found the study to be quite interesting and would definitely consider taking it [or something similar] up again in the future.  
 

Morphology Evolution of a Passive Dynamic Walking Machine from Z R on Vimeo.


RST RST

r/w_ blog : 02-23-2012
powered by WordPress