Project F.I.S.I.K.A.

Fisika: A Fully-Integrated Speedy Inverse-Kinematics Arm designed from scratch to teach myself the basics of inverse kinematics!

Similar projects worth following
In a nutshell, FISIKA is an arm I've developed from scratch to teach myself the ins and outs of inverse kinematics. The name is derived from the Indonesian word, “fisikas”, which translates into English as “physics”. Considering my experience with physics engines in the past, and the nature of inverse kinematics systems, it was a logical name, partially inspired by my Indonesian friend who gave me a push in this direction. The acronym stands for "Fully-Integrated Speedy Inverse-Kinematics Arm". I've been dealing with the LEGO MindStorms NXT robotics system for years now, and have been playing with LEGOs pretty much since I was a toddler, so this is a very natural and easy prototyping system for me. Unfortunately, every other LEGO arm I've seen out there takes no advantage of inverse kinematics or any form of motion planning for that matter, so I've tackled this project to fix that, and to learn more about motion planning.

Project FISIKA

The Name:

FISIKA, a Fully-Integrated Speedy Inverse-Kinematics Arm developed from scratch to teach myself the ins and outs of, you guessed it, inverse kinematics. The name is derived from the Indonesian word, "fisikas", which translates into English as "physics". Considering my experience with physics engines in the past, and the nature of inverse kinematics systems, it was a logical name, partially inspired by my Indonesian friend who gave me a push in this direction.

The Hardware:

For now I'll be using entirely LEGO parts, primarily the LEGO MindStorms NXT robotics kit. I may add in a WiiMote's IR tracking camera with the IR-pass filter removed, but for now I'm not including that into my designs for simplicity's sake. The NXT kit is composed primarily of a "brick" that houses the dual processors, memory, 4 buttons, a monochrome 100x64 LCD, the power supply (6 AAs), and all the necessary ports to attach the motors and sensors. Unfortunately I'm using Ni-MH rechargeables, so instead of a full 9V I can only draw up to 7.2V. The processors are a 32-bit Atmel AT91SAM7S256 (256 KB flash memory, 64 KB RAM) and an 8-bit Atmel ATmega48 @ 4 MHz (4 KB flash memory, 512 Bytes RAM).

There are 4 dedicated "Sensor Ports" on one end of the brick, and 3 dedicated ports for the motors. Each port is essentially the same, combining analog input/output, I2C, and RS-485 into a 6-pin connection. The motors are continuous-rotation servos, with a top speed at full power of ~170 RPM at 9V, and ~135 RPM at 7.2V. The internal rotary encoders are accessible with +/-1° of accuracy, providing realtime feedback on speed and direction, as well as current position. While there are a wide variety of sensors available to use with this modular kit, I'm focusing on just two: a "Light Sensor" and "Touch Sensor". The light sensor is, as would be expected, an ambient LED-based photosensor, and also includes a red LED, which can be used as both an indicator light or just to provide extra light to the sensor, primarily for reading reflected light levels. The touch sensor is effectively a pressure-sensitive button, with an ~8mm travel distance.

The Software:

I use third-party software to program the main processors (bundled together with the batteries in a single unit known as the 'intelligent brick' or just 'brick'). Primarily I work in an IDE known as BricxCC, which allows the use of a C-based language (known as "NXC"/"Not eXactly C") in place of the standard graphical, block-based programing language that comes with the LEGO MindStorms set. Using this linear, text-based programming language is more comfortable to work with and allows more complex operations and deeper access to hardware; the most notable improvement is a vast increase in performance due to stripped-down code and heavy optimization.

The Idea:

I've always been an outside-the-box thinker, particularly when it comes to limited resources on electronics platforms. For example, by making use of the ghosting effect on slow, cheap monochrome pixel displays, I was able to achieve 6-shade greyscale on a typically black-and-white screen; I've utilized the light source in the LED-based photosensor as an output/indicator for different programs, and even gone so far as to PWM the LED via realtime code, similar to my previously-mentioned work on the display. I've always enjoyed pushing boundaries and seeing what things can be done that nobody else would do, so when I got the idea to point the light sensor at the ground and measure the amount of light being reflected back, I realized I'd created a primitive short-range distance sensor. Adding this to a segway-style robot was a logical next-step, building a balancing system based solely on a photosensor. Many others have done this as well, it turns out, so I moved on, building more advanced balancing systems, including an autonomous self-balancing tightrope-traversing unicycle. I even wrote several physics engines from scratch that ran locally, writing a small...

Read more »

  • 1 × LEGO MindStorms NXT robotics kit Tech specs below
  • 1 × 32-bit Atmel AT91SAM7S256 256 KB flash memory, 64 KB RAM
  • 1 × 8-bit Atmel ATmega48 @ 4 MHz 4 KB flash memory, 512 Bytes RAM
  • 3 × Continuous-rotation servos Top speed ~170 RPM at 9V, ~135 RPM at 7.2V; internal rotary encoders with +/-1° accuracy
  • 1 × LED-based photosensor Reads ambient and/or reflected light levels

View all 8 components

  • As quickly as it started... it ended.

    Stryker29505/21/2015 at 05:49 0 comments

    Turns out, plastic isn't such a great material for sudden speed changes throwing heavy weights around and high demand for torque.

    I put as much thought into balance and structural reinforcement as I could, while at the same time trying to keep weight down, and one of the main supporting L-brackets ended up snapping.

    Because I was using 4 of them, I was able to keep going just fine, although I turned down the power and supported some of the joints by hand as I experimented with the range of motion.

    3 degrees of freedom is nice, for starters, but ideally I'd like an arm with ~5 or more, and that's just not possible with the few, heavy servos I have. I'll revisit this in the future, when I can pick up some proper servos and 3D print a few joint pieces and build this thing with steel rods, or if I get really into it, perhaps some carbon fiber.

    Until then, I'm back to building a zippy little self-balancer. I love these things so much....

  • Batteries on their way.... And a busy birthday weekend!

    Stryker29505/05/2015 at 07:07 0 comments

    Back when I acquired the NXT, it ran on 6AA batteries, so I bought a charger and an 8-pack of ~2500 mAh batteries.

    The charger had 4 slots, so this allowed me to have 2 always in the charger and 6 in the NXT. When it came time to recharge the batteries, I would just empty the charger and NXT, and put 4 dead ones in the charger. I already had 2 fully-charged at that point, so once the first batch of batteries was finished charging, I had all I needed, with 2 dead ones left over.

    It wasn't the fastest swap-out system, since I still had to fully-charge batteries, but it was faster than having to do two runs. However, I've got a shipment coming in the mail! a 12 pack of batteries with a 4-port charger. Sure, I still can't charge 6 at a time, but holy hell! I can have an entire second set of batteries charged up and ready for swapping by the time the first 6 die, since it takes a whole lot longer to drain them than it does to charge them!

    As usual, though, there's always a tarnish to the silver lining of the cloud. It turns out, this package won't be arriving until the 8th or 9th—which is right before Mother's day, and then my birthday is immediately after that! So not only do I have a busy weekend trying to handle stuff for my mum, but I'm also releasing an album on my birthday as my gift to the world. (You can find that over on my BandCamp, SoundCloud,, Vimeo, and YouTube on or after 5.11.15).

    So in less than a week, I have to:

    • Send out a package for my mum

    • Get my coding setup going since the NXT will have power finally

    • Finish things up so my album can go live on my birthday, 5.11.15

  • Components Get! (Sorta...)

    Stryker29504/27/2015 at 23:14 0 comments

    It's been a long time coming, but I finally got my NXT unit shipped out across the country so I could start tinkering with it... but the components have been separated into two shipments, and I have no idea when the second will arrive.

    The primary parts—the brain, the servos, the wires, the sensors—those are all here. The pieces necessary to build the actual structure, on the other hand, are not entirely here.

    At the very least I'll be able to dust off my copy of Parallels and start coding again! That's honestly the hardest part of all this, but for now it's all I can work on, so I guess that works out. I might have to hack together a power supply, since I'm not a fan of batteries, and my reliable rechargeables are disappearing as friends 'borrow' them for this or that.

  • Temporary state of flux

    Stryker29503/24/2015 at 23:06 0 comments

    So I've got the hardware designed, and actually had to go back and make a few changes as I was poking around in Blender and realized some of my parts were, for lack of a better term, in each other. I think "intersecting" is the term kids these days use.

    After re-engineering some of the brace designs to make them more sturdy, and also exist in a mere 3 Euclidean planes, I've (hopefully) finished the hardware and now I'm just waiting on it to actually get shipped out here. That's something I have no control over; if I had the money I'd just fly across the country, pick up a few boxes, and fly back, but that's not really an option for me right now.

    Once things get shipped over to the western side of the country I'll be able to actually start constructing with them, and hopefully that part will go very quickly. Cable routing will be a pinch, even though I don't have it in any of the renders, but that's more due to the fact that my modeling software is very old and doesn't have good soft-body modelling features, and I'm nowhere near good enough to set it up in Blender.

    Tl;dr — had to make some revisions to let the arm exist properly in only 3 dimensions, and waiting for parts to arrive so I can finally begin working on it.

  • Project Log Numero Dos: Blender get!

    Stryker29511/13/2014 at 01:35 0 comments

    After a bit of cleaning up my Windows partition, I had enough space to actually use it for things other than coding, so I tweaked a few settings for performance's sake and installed blender. After jumping through a few hoops to get LEGO models imported correctly, I was then faced with the arduous task of fixing the problems with the model.

    Apparently, the people who put many hours of work into designing hundreds of thousands of LEGO pieces got tired of doing all the same parts over and over again, and started copy-pasting normals and such from one part to the next, but unfortunately forgot to keep an eye on which side the faces were pointing. As a result, many of the parts in my models have odd holes in them, or with a setting changed to fix the holes, the lighting and shading effects become buggy.

    As a result, I've been spending lots of time just zooming in on each piece and selecting faces that are backwards and inverting them. Tedious manual work, and while there is an automatic tool to do it for me, it doesn't really work because there are so many polygons that need fixing....

    As of now it's almost done. Next steps will be to correctly align the gearing system, parent the necessary groups of parts, and then rig them together.

  • Project Log Numero Uno: Posting to!

    Stryker29511/08/2014 at 01:12 0 comments

    I've put lots and lots of work into this project so far. Technically, aside from coding it, it's completely done, and I've already started work on coding, so there's that. But by far the most important step for me was getting all my thoughts, sketches, mental notes, etc arranged in a way that I could post them here, and they'd be readable!

    As such, I'm making my first Project Log about simply posting here. Currently, as mentioned, I don't have physical access to my LEGOs. They're packed up in a box back at my previous home, when I was living with my parents, and they won't ship them out to me, so until I can cough up the money to make a cross-country round-trip visit, things will stay that way. My next few project logs will be renders and animations, as I'm working with a close friend to fully rig the model in Blender to test my motion planning code. (:

View all 6 project logs

  • 1
    Step 1

    Build instructions will be available once I actually build Fisika in something other than a 3D modelling program. (:

View all instructions

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates