Saturday, November 09, 2013

Dorkbot SoCal 55 on Sunday


Dorkbot SoCal 55

***** Sunday, November 10, 2013
***** 1:00 pm to 3:00pm
***** LA Biohackers Lab
***** 6th Floor, ETO Building
***** 1340 E 6th Street, Los Angeles, CA, 90013


Come meet the LA Biohackers and find out more about some of the biotech projects going on in their lab! 

Speakers to include...

Keoni Gandall
Keoni will be talking about how he is bootstrapping a synthetic bacteria using the common laboratory bacteria Bacillus subtilus. Currently there is no easy method for creating a new organism even if you have the ability to synthesize a new genome from scratch. A method Keoni is working on allows for a new genome to first be integrated into a host genome, then split off during cell division to create two daughter cells - 1 with the host genome and 1 with the new genome. This method will have great use in synthetic biology. 

Sophia Hewitt

Sophia will be talking about her research on using epigallocatechin-3-gallate (EGCG), a compound found in green tea as an anti-tumor treatment. In some types of cancer the cancer cells repair their telomeres so the cells effectively don't age, allowing the tumor to grow perpetually. Sophia is testing whether EGCG can inhibit this telomere repair mechanism and allow for treated cells to age. She is usingthe model organism called Tetrahymena thermophila which is an excellent test bed for studies on telomere length. 

Cory Tobin

Cory will be talking about his work on creating plants that make their own fertilizer. He is studying an extremophile bacteria that makes it's own ammonia (fertilizer) using water and nitrogen gas from the atmosphere. By understanding the mechanism this bacteria uses, he hopes to create plants and algae capable of synthesizing their own ammonia, negating the need to apply fertilizer to the soil. 
 

Monday, June 17, 2013

Lynxmotion AL5D Arm Inverse Kinetics reference material

The best theoretical analysis of inverse kinetics for the Lynxmotion AL5D robotic arm can be found here.

Furthermore, someone has already coded up the AL5D arm inverse kinetics code for Arduino.  I've ported this to Python and a quick test shows it appears to be sane (with some hack tweaks to make up for different initial angles of my servos), but I need to do more extensive testing.  I suspect the initial angles of my servos are different than most typical AL5D applications as I've set everything up to maximize reach for moving chess pieces, so I'll have to calibrate those angles into the code.

Tuesday, June 11, 2013

Arm Movement and Need for Inverse Kinetics

I extended my Arm controller Python program to be able to map and save the locations of chess board positions.

So here is a video of the "Mechanical Turk" arm moving a chess piece across the board using forward kinetics:


And here is the result of trying to move to another square:


Oops, I crashed into the board!  So I think I may have a go at calculating the inverse kinetics to avoid the arm from crashing into the board or (more likely) neighboring chess pieces.  The arm has to move the end effectors pretty much straight up a few inches to clear all the pieces, then it needs to move above all the pieces until it is directly above the destination square, then it needs to move directly vertically down.

I could probably heuristically do this with forward kinematics (for example, move up and down first by just using the elbow or such), but if I can get the inverse kinematics working OK it would give me a lot more control over the system.

Friday, June 07, 2013

Dorkbot SoCal @ Crash Space Sunday, June 9


Dorkbot SoCal 53

***** Sunday, June 9, 2013
***** 1:00pm to 3:00pm
***** Crash Space
***** 10526 Venice Blvd.
***** Culver City, CA 90232
***** (Directions)
***** No cover charge / donations to venue welcome

Come to Crash Space and learn about the hackersapce and some of their exciting projects:

Flipbookit
Mechanical animation kit.

 

Crash Library
Arudino-powered outdoor mini-library that tweets when people take out a book.



Crash Inspired
Mobile interactive night club experience - 2K RGB LEDs - on a truck - controlled with Twitter!

Wednesday, June 05, 2013

New end effector

I added a new end effector to "The Turk" arm.  The Lynxmotion Little Grip has screw holes for 4-40 bolts, so I added two pieces of copper pipe hanger that just happened to be the right thickness.


Thursday, April 25, 2013

AL5D Arm Manual Control on Pi

The same Tkinter/Python manual robotic arm control program I used on my Mac also worked fine on my Raspberry Pi with the AL5D robotic arm controlled by the Pololu Maestro Micro servo controller.  I just had to change the device filename to "/dev/ttyACM0".

On the Mac side, I logged in with "ssh -X ..." and now any X Windows you open up on the Pi will come through to your Mac.  I should note that to open up a general X session on the Pi,  I use "lxsession", which seems to work better for me than "startx".  Of course I have XQuartz installed on my Mac already.

Mechanical Turk Arm First Movement

The mechanical arm of the AWS Mechanical Turk powered chess playing Mechanical Turk is now built!

Here is the arm under manual control:



I chose the Lynxmotion AL5D robotic arm to provide a reasonable reach at an affordable price.  Moving plastic chess pieces does not require much torque, so I was able to avoid using the very capable but very expensive Dynamixel servos and instead used standard cheap RC servos.  Like many folks, I purchased only the AL5D hardware kit from Lynxmotion, and purchased the RC servos from the cheapest price on Amazon.

Building the AL5D took about four hours altogether.  My only serous complaint is that while the hardware is segregated to some extent in heat-sealed plastic bags, it still is often difficult for a novice to figure out which pieces of hardware is which (for example, 2-56 x .250" steel machine screw vs. #2 x .250" steel tapping screw vs. 3mm x 8mm steel screw).  It would be useful if every heat-sealed bag section had a piece of paper identifying the hardware in that section and perhaps which part of the instructions the hardware is associated with.

Also my HS-805BB servo (that I purchased from somewhere else besides Lynxmotion) came with a horn that was not quite compatible with the servo bracket.  It turns out that Lynxmotion does appear to pack a compatible horn in the kit, but somehow I missed that, so I drilled new holes in the existing horn.  Everything worked out anyway.

All of the controllers from Lynxmotion were overpriced or difficult to interface with a Raspberry Pi, so I chose the Pololu Micro Maestro 6-channel RC controller.  I have had great experiences with Pololu servo controllers in the past.  The Micro Maestro connects to a host via USB, and costs ~$20.  It also can provide some analog or digital input as well as serial output, so it is very function-packed for the price.

Two issues with the Pololu Micro Maestro - first, to use it with a Mac or Linux, you need to run the Maestro Control Center on a PC, and under the "Serial Settings" tab you should set the Serial mode to "USB Dual Port".  Then under "Channel Settings" you should open up the "Min" and "Max" settings for the arm servos to 500µs and 2500µs to assure you can move the Hitec servos a full 180 degrees.

If you are looking for info regarding inverse kinematics of the AL5D, see this blog entry.  Also great source code for full control of the Pololu Micro Maestro can be found here.

Finally, I wrote my first Tkinter program in Python to provide a manual GUI for the arm servo controls on a Mac:



Source code below:

# for more Pololu Micro Maestro interface code # see http://afflator.ontopoeticmachines.org/post/9 def setpos(cha,uS): """maestro uses is 0.25us increments """ pos=int(uS) pos=pos*4 low=pos&0x7f high=pos>>7 #print low,high # cmd, chan, low, high s.write(chr(0x84)+chr(cha)+chr(low)+chr(high)) def setpos0(uS): setpos(0,uS) def setpos1(uS): setpos(1,uS) def setpos2(uS): setpos(2,uS) def setpos3(uS): setpos(3,uS) def setpos4(uS): setpos(4,uS) from Tkinter import * import serial s=serial.Serial() # this /dev/tty.usbmodem device is for my particular system # do ls /dev/tty.usbmodem* to figure out yours # in Dual USB mode, lower number is the command port s.port="/dev/tty.usbmodem00049671" s.baudrate=115200 s.timeout=1 s.open() master = Tk() w0 = Scale(master,command=setpos0,from_=500,to=2500,length=500) w0.grid(row=0,column=0) w0.set(1500) w1 = Scale(master,command=setpos1,from_=500,to=2500,length=500) w1.grid(row=0,column=1) w1.set(1500) w2 = Scale(master,command=setpos2,from_=500,to=2500,length=500) w2.grid(row=0,column=2) w2.set(1500) w3 = Scale(master,command=setpos3,from_=500,to=2500,length=500) w3.grid(row=0,column=3) w3.set(2000) w4 = Scale(master,command=setpos4,from_=500,to=2500,length=500) w4.grid(row=0,column=4) w4.set(1500) #note that the initial servo values may differ slightly between arms setpos(0,1500) setpos(1,1500) setpos(2,1500) setpos(3,2000) setpos(4,1500) master.mainloop()