14 February 2013
06 February 2013
KawaiiKart: Mechanical Assembly DONE!
Alright. This is the third-to-last post that ends the KawaiiKart saga! I am extremely naive, at least considering my current trajectory. Actually the aforementioned claim seems fine, since all I have left is getting the EV section to run, then the gas engine to run, and finally coordinating the two!! I will detail the assembly of most of the kart, from most of the steering assembly to mounting the engine.
At first I waterjetted on quality 4 (second best), but the waterjet's software said that it would take an hour as well as 50lb of abrasive. I decided to let it run for a while, but I realized that my routing did not include small tabs on the parts (to prevent the parts from falling into the waterjet tub), which the second part did. At this point, I stopped the waterjet, added tabs to my parts, and reran at quality 3. The run time and abrasive consumption were much more reasonable, clocking in at 14 minutes total and 7 lb of sand.
The new knuckles turned out to be perfect. At this point, I was supposed to have a rolling frame, but by virtue of sloppiness, I forgot to order 3/8"-24 nuts, some steering column lock collars, as well as more L joints for the tie-rod steering.
Up next: electronics and a working EV!
MLK weekend
Remember from last time that I messed up the steering knuckles? I got a chance to re-waterjet my parts (on campus! no week-long delays!) with a nice Omax waterjet. Unfortunately, there were no 0.25" thick aluminum sheets that were large enough, so I was going to make twice the number of parts on a 0.125" thick sheet.
It's a $400,000 printer that takes sheets of aluminum!
At first I waterjetted on quality 4 (second best), but the waterjet's software said that it would take an hour as well as 50lb of abrasive. I decided to let it run for a while, but I realized that my routing did not include small tabs on the parts (to prevent the parts from falling into the waterjet tub), which the second part did. At this point, I stopped the waterjet, added tabs to my parts, and reran at quality 3. The run time and abrasive consumption were much more reasonable, clocking in at 14 minutes total and 7 lb of sand.
The new knuckles turned out to be perfect. At this point, I was supposed to have a rolling frame, but by virtue of sloppiness, I forgot to order 3/8"-24 nuts, some steering column lock collars, as well as more L joints for the tie-rod steering.
Better waterjetted steering knuckle: the nut fits!! (of course I winged it)
Vise-ing bearings into steering mounts.
The legendary T-nut.
Assembled frame!
My temporary parking space at MITERS.
Charlesg welded my unidirectional flywheel tight.
Testing the fit of the wheel axles.
Taking a break to track ChibiKart in the snow. This is the result.
Mounting the steering knuckles.
An engine and wheels appeared!
Servicing engine mount with a makeshift carjack.
Week before Techfair
This is the week when the EVERYTHING happens. Literally. It's the last week of my externship, Battlecode quals + finalists' dinner + final tournament, and KawaiiKart cram week. Basically all the time after work was dedicated to either writing code for Battlecode or working on the go-kart. During this week, I went from chassis and parts to a mostly working kart. Picture dump below:
Scraping self against a piece of aluminum or Nancy's hexapod.
Using vise as holder to insert one notch into motor mount.
Vising entire motor mount into steering knuckle.
Chibi motors!
Mounting motors onto motor mount.
The bore of the pinion gear is slightly too large, so we'll pad it with Coke can.
Too lazy to file deeper notch in motor shaft.
Adjusting pinion gear on motor shaft.
Motor on wheel!
I fail at ordering parts again.
It's a masterlink!
Cutting fluid does wonders.
The chain is on! Now to tighten it a bit more.
Steering column with tie rods!
The MITERS parking garage.
Side profile.
My hands turn black after a day's worth of hard work.
BigLathe!
Motor controller (it's a Kelly controller).
Revised steering column end mount.
That steering wheel was not intended for this vehicle.
Soldering the Hall sensors onto those boards was really annoying!!!
Last but not least
The correct way to listen to K-pop is to turn the bass all the way up, and then knock the treble down a few notches to compensate.
Up next: electronics and a working EV!
Labels:
kawaiikart,
MITERS
12 January 2013
KawaiiKart: December/Early IAP Update
I spent most of yesterday night working on KawaiiKart. In fact, I promised myself not to leave MITERS until the rear wheel was on the chassis. This is more complicated than it sounds because I screwed up assembling the rear of the kart twice!
My first problem was that the distance between the aluminum extrusions was too wide. Turns out you must take into every little dimension when CADding parts. Since I normally work with things that have infinite tolerance (code/math)...go figure -_- The solution wasn't too tricky; I made two plates that went on top of the extrusions that connected two more extrusions on the respective insides.
The second issue dealt with how my rear wheel was installed. Since I had the wheel essentially slide into the space between the aluminum extrusions, I couldn't tighten the bolts if I first installed the extrusions onto the chassis.
That's all for now! Hopefully I can have a rolling frame (with motors!!) by the end of MLK.
My first problem was that the distance between the aluminum extrusions was too wide. Turns out you must take into every little dimension when CADding parts. Since I normally work with things that have infinite tolerance (code/math)...go figure -_- The solution wasn't too tricky; I made two plates that went on top of the extrusions that connected two more extrusions on the respective insides.
This solution introduces more torsional flex, but to what extent is unknown so far. It seems to pass a rudimentary twist and sit test, though.
The second issue dealt with how my rear wheel was installed. Since I had the wheel essentially slide into the space between the aluminum extrusions, I couldn't tighten the bolts if I first installed the extrusions onto the chassis.
Here's to hoping I tightened the bolts enough such that the wheel won't fall off during operation!
I also had a slew of smaller issues, like incorrectly measuring dimensions and not accounting for dimensions and the like.
Because the axle diameter isn't 5/8"; it's really 10mm!
Because T-nuts have finite size
Because axles have finite length and need to be secured...somehow.
That's all for now! Hopefully I can have a rolling frame (with motors!!) by the end of MLK.
Labels:
kawaiikart
01 January 2013
Happy 2013! / 2012 in Review
Happy New Year! I don't think I've made many nontechnical posts recently so here's a treat for everyone.
First up: New Years Resolutions (not in any particular order).
Working out Recreational powerlifting three (or more) times a week worked quite well, even during hectic first term junior year. I don't know how I did it (maybe by throwing a class under a bus), but it worked quite well. I'm convinced it's one of the very few things that kept me sane this term. I really only did curls, sometimes bench presses and squats, but never deadlifts because I dislike doing them. I'm well aware that MIT has a powerlifting team, but I don't think I'll be joining them anytime soon due to lack of time.
First up: New Years Resolutions (not in any particular order).
- No more computer purchases unless they will be arbitraged.
- Focus -- learn to say no.
and lastly, finish your scooter!
Next, year in review. 2012 was one of the better years. I'm bummed that I didn't pull off any noteworthy hacks, but this year is looking good with KawaiiKart. I however did manage to sneak in a cool project, my GPU ray tracer. Sadly it doesn't yet use all four GPUs or photon map or <insert cool effect or optimization here>.
The coolest thing I did was actually in the way beginning of the year: I briefly drove a Porsche 911 Carrera GTS! It was quite an experience, from the euphoric engine roar to getting behind the wheel and driving it. I look forward to signing the lease in 2018...or 2019 if necessary.
Bayley and I managed to hit a practical wall in our arms race by going to quad socket platforms near the end of the year. (pictures will be coming soon -- these things are epic!) We're still waiting for various sales on Newegg and parts on Ebay, so they'll be done sometime before junior year ends.
In any event, happy new year!
Labels:
life
19 December 2012
KawaiiKart Chassis Assembled!
Or part of. If I fail my finals, this would be the reason.
It only took about three hours to cut the 80/20 into their requisite lengths (while screwing up the lengths for the main chassis because I don't know how to use a ruler -__-) and screw them together. Hopefully I get more done after finals.
Labels:
kawaiikart
10 December 2012
The Nicest Balls You Will Ever See
Labels:
gpgpu,
ray tracing
09 December 2012
Back to Triple Displays
I nabbed two Dell Ultrasharp 2007s on ebay for $230 shipped. Unfortunately, the guy forgot to ship power and DVI cables; guess I'll be haggling the price down after finals week to compensate for the loss -_-. I also have to massage xmonad a bit to get display focusing and desktop switching just right.
Also I'm quite confident that I change setups as quickly as Bayley acquires new computers as a typical girl dumps her boyfriend. Not sure who I'm insulting =P.
Aaaaand before I forget, I'm posting my xorg.conf because I absolutely do not want to dig through the internet just to re-set up this configuration again.
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 304.54 (buildmeister@swio-display-x86-rhel47-11) Sat Sep 29 01:10:44 PDT 2012
Section "ServerLayout"
# Removed Option "Xinerama" "0"
Identifier "Layout0"
Screen 0 "Screen0" 1200 0
Screen 1 "Screen1" 3760 0
Screen 2 "Screen2" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "1"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor0"
VendorName "Unknown"
ModelName "DELL3007WFPHC"
HorizSync 49.3 - 98.5
VertRefresh 59.9 - 59.9
Option "DPMS"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor1"
VendorName "Unknown"
ModelName "DELL 2007FP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 76.0
Option "DPMS"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor2"
VendorName "Unknown"
ModelName "DELL 2007FP"
HorizSync 30.0 - 83.0
VertRefresh 56.0 - 76.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 460"
BusID "PCI:19:0:0"
EndSection
Section "Device"
Identifier "Device1"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 460"
BusID "PCI:18:0:0"
Screen 0
EndSection
Section "Device"
Identifier "Device2"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GTX 460"
BusID "PCI:18:0:0"
Screen 1
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "nvidia-auto-select +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
# Removed Option "metamodes" "DFP-0: nvidia-auto-select +0+0 { Rotation=left }"
Identifier "Screen1"
Device "Device1"
Monitor "Monitor1"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "DFP-0: nvidia-auto-select +0+0 { Rotation=left }"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Screen"
# Removed Option "metamodes" "DFP-1: nvidia-auto-select +0+0 { Rotation=left }"
Identifier "Screen2"
Device "Device2"
Monitor "Monitor2"
DefaultDepth 24
Option "Stereo" "0"
Option "metamodes" "DFP-1: nvidia-auto-select +0+0 { Rotation=left }"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Section "Extensions"
Option "Composite" "Disable"
EndSection
03 December 2012
12 Days of Christmas
Sung to the melody of Twelve Days of Christmas
On the first day of Christmas
My true love sent to me
a OneTesla coil
On the second day of Christmas
My true love sent to me
Two PSUs
and a OneTesla coil
On the third day of Chirstmas
My true love sent to me
Three mannequins
Two PSUs
and a OneTesla coil
On the fourth day of Christmas
My true love sent to me
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the fifth day of Christmas
My true love sent to me
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the sixth day of Christmas
My true love sent to me
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the seventh day of Christmas
My true love sent to me
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the eighth day of Christmas
My true love sent to me
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the ninth day of Christmas
My true love sent to me
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the tenth day of Christmas
My true love sent to me
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the eleventh day of Christmas
My true love sent to me
Eleven bugs to fix
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the twelfth day of Christmas
My true love sent to me
Twelve sticks of RAM
Eleven bugs to fix
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the first day of Christmas
My true love sent to me
a OneTesla coil
On the second day of Christmas
My true love sent to me
Two PSUs
and a OneTesla coil
On the third day of Chirstmas
My true love sent to me
Three mannequins
Two PSUs
and a OneTesla coil
On the fourth day of Christmas
My true love sent to me
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
My true love sent to me
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the sixth day of Christmas
My true love sent to me
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the seventh day of Christmas
My true love sent to me
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the eighth day of Christmas
My true love sent to me
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the ninth day of Christmas
My true love sent to me
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
My true love sent to me
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the eleventh day of Christmas
My true love sent to me
Eleven bugs to fix
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
On the twelfth day of Christmas
My true love sent to me
Twelve sticks of RAM
Eleven bugs to fix
Ten SSDs
Nine monitors
Eight processors
Seven ballcopters
Six hamburgers
Five KawaiiKarts
Four GPUs
Three mannequins
Two PSUs
and a OneTesla coil
Labels:
gpgpu,
kawaiikart,
MITERS,
technology
CUDA Drivers Causing Kernel Panics
For the past few days, my MacBook Air (13", Late 2010), has gotten significantly more kernel panics than before. The kernel panics would always happen when I removed the display cable and then woke the computer from sleep, at which point it would tell me that it kernel panicked was going to automatically reboot. Upon restart, I skimmed through the kernel panic (portions reproduced at the end) and concluded that it was caused by some Nvidia kernel extensions. Upon closer inspection, I noticed NVDAResman and nv50hal were at fault, which are two kexts that come with the OS X CUDA driver.
Interval Since Last Panic Report: 159692 sec
Panics Since Last Report: 2
Anonymous UUID: B4401137-5BE3-7AF0-D223-C1C4D49B06E5
Mon Dec 3 09:55:59 2012
panic(cpu 1 caller 0xffffff80060b7bd5): Kernel trap at 0xffffff7f86aa1a58, type 0=divide error, registers:
CR0: 0x000000008001003b, CR2: 0x00000000992f9f8e, CR3: 0x0000000008c94000, CR4: 0x0000000000000660
RAX: 0x00014424d765e000, RBX: 0x0000000000000000, RCX: 0x0000000008d9ee20, RDX: 0x0000000000000000
RSP: 0xffffff807e4ab020, RBP: 0xffffff807e4ab0b0, RSI: 0x0000000000000000, RDI: 0xffffff8012e1d004
R8: 0xffffff807e4aafb4, R9: 0x0000000008d9ee20, R10: 0x000000001017df80, R11: 0x000000000574c638
R12: 0xffffff806ac91da0, R13: 0xffffff8012de7004, R14: 0x0000000000000006, R15: 0xffffff8012e1d004
RFL: 0x0000000000010246, RIP: 0xffffff7f86aa1a58, CS: 0x0000000000000008, SS: 0x0000000000000000
Fault CR2: 0x00000000992f9f8e, Error code: 0x0000000000000000, Fault CPU: 0x1
Backtrace (CPU 1), Frame : Return Address
0xffffff807e4aacc0 : 0xffffff800601d626
0xffffff807e4aad30 : 0xffffff80060b7bd5
0xffffff807e4aaf00 : 0xffffff80060ce4ed
0xffffff807e4aaf20 : 0xffffff7f86aa1a58
0xffffff807e4ab0b0 : 0xffffff7f86a9aefb
0xffffff807e4ab160 : 0xffffff7f86a7befc
0xffffff807e4ab1a0 : 0xffffff7f86a7dcf1
0xffffff807e4ab350 : 0xffffff7f86a80294
0xffffff807e4ab3a0 : 0xffffff7f86b68ba1
0xffffff807e4ab4e0 : 0xffffff7f86b6ef2e
0xffffff807e4ab530 : 0xffffff7f86879659
0xffffff807e4ab560 : 0xffffff7f867638da
0xffffff807e4ab610 : 0xffffff7f8675efac
0xffffff807e4ab800 : 0xffffff7f867603a2
0xffffff807e4ab8d0 : 0xffffff7f8695415a
0xffffff807e4ab900 : 0xffffff7f869505ce
0xffffff807e4ab920 : 0xffffff7f8694f158
0xffffff807e4ab9a0 : 0xffffff7f8694babb
0xffffff807e4ab9c0 : 0xffffff7f86955e40
0xffffff807e4aba70 : 0xffffff7f8694a61c
0xffffff807e4abbf0 : 0xffffff7f866f63c7
0xffffff807e4abc60 : 0xffffff7f866e057b
0xffffff807e4abcd0 : 0xffffff7f866e31b8
0xffffff807e4abd40 : 0xffffff7f866e3343
0xffffff807e4abdb0 : 0xffffff7f866e2db4
0xffffff807e4abe10 : 0xffffff7f866a9c04
0xffffff807e4abe50 : 0xffffff7f866a8eef
0xffffff807e4abe80 : 0xffffff7f866a82cb
0xffffff807e4abef0 : 0xffffff80064472a8
0xffffff807e4abf30 : 0xffffff8006445daa
0xffffff807e4abf80 : 0xffffff8006445ed9
0xffffff807e4abfb0 : 0xffffff80060b26b7
Kernel Extensions in backtrace:
com.apple.iokit.IOGraphicsFamily(2.3.5)[803496D0-ADAD-3ADB-B071-8A0A197DA53D]@0xffffff7f8669b000->0xffffff7f866d2fff
dependency: com.apple.iokit.IOPCIFamily(2.7.2)[B1B77B26-7984-302F-BA8E-544DD3D75E73]@0xffffff7f86650000
com.apple.iokit.IONDRVSupport(2.3.5)[86DDB71C-A73A-3EBE-AC44-0BC9A38B9A44]@0xffffff7f866de000->0xffffff7f866effff
dependency: com.apple.iokit.IOGraphicsFamily(2.3.5)[803496D0-ADAD-3ADB-B071-8A0A197DA53D]@0xffffff7f8669b000
dependency: com.apple.iokit.IOPCIFamily(2.7.2)[B1B77B26-7984-302F-BA8E-544DD3D75E73]@0xffffff7f86650000
com.apple.NVDAResman(8.0)[A4C53A36-22B6-3075-82B9-9DE612A9C015]@0xffffff7f866f2000->0xffffff7f869f4fff
dependency: com.apple.iokit.IOPCIFamily(2.7.2)[B1B77B26-7984-302F-BA8E-544DD3D75E73]@0xffffff7f86650000
dependency: com.apple.iokit.IONDRVSupport(2.3.5)[86DDB71C-A73A-3EBE-AC44-0BC9A38B9A44]@0xffffff7f866de000
dependency: com.apple.iokit.IOGraphicsFamily(2.3.5)[803496D0-ADAD-3ADB-B071-8A0A197DA53D]@0xffffff7f8669b000
com.apple.nvidia.nv50hal(8.0)[9F3D09B5-3158-3D9E-BDA3-E71576AAD3B7]@0xffffff7f86a02000->0xffffff7f86d24fff
dependency: com.apple.NVDAResman(8.0.0)[A4C53A36-22B6-3075-82B9-9DE612A9C015]@0xffffff7f866f2000
dependency: com.apple.iokit.IOPCIFamily(2.7.2)[B1B77B26-7984-302F-BA8E-544DD3D75E73]@0xffffff7f86650000
BSD process name corresponding to current thread: kernel_task
Mac OS version:
12C60
Kernel version:
Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64
Kernel UUID: 69A5853F-375A-3EF4-9247-478FD0247333
Kernel slide: 0x0000000005e00000
Kernel text base: 0xffffff8006000000
System model name: MacBookAir3,2 (Mac-942C5DF58193131B)
Labels:
mac os x
10 November 2012
Achievement Unlocked: GPU Insanity
You are looking at two gorgeous eVGA GTX 460 2Wins, which are eVGA's attempt at the dual GPU thing. I nearly had a shortage of 8-pin connectors (there's only two on this power supply), but was solved by using a dual 6-pin to 8-pin adapter (and then I almost ran out of 6-pin connectors -- go figure). My test cuda code verifies that I indeed have four GPUs:
shewu@hamburger ~/Dropbox/Projects/cuda % ./getgpu This computer has 4 GPUs CUDA device #0 Name: GeForce GTX 460 Total memory: 1024MiB Clock rate: 1401MHz CUDA device #1 Name: GeForce GTX 460 Total memory: 1024MiB Clock rate: 1401MHz CUDA device #2 Name: GeForce GTX 460 Total memory: 1024MiB Clock rate: 1401MHz CUDA device #3 Name: GeForce GTX 460 Total memory: 1024MiB Clock rate: 1401MHz
If you're interested in the code, here it is:
#include <iostream>
#include <cuda.h>
using namespace std;
void printDeviceProp(cudaDeviceProp& devProp_)
{
cout << "Name: " << devProp_.name << "\n";
cout << "Total memory: " << (devProp_.totalGlobalMem/(1024*1024)+1) << "MiB\n";
cout << "Clock rate: " << devProp_.clockRate/1000 << "MHz\n";
return;
}
int main()
{
int devCount;
cudaGetDeviceCount(&devCount);
cout << "This computer has " << devCount << " GPUs\n";
for (int i = 0; i < devCount; ++i)
{
cout << "CUDA device #" << i << "\n";
cudaDeviceProp devProp;
cudaGetDeviceProperties(&devProp, i);
printDeviceProp(devProp);
}
return 0;
}
Sad to say that I still can't tell Bayley to eat my dust just yet.
Subscribe to:
Posts (Atom)











































