Saturday, September 8, 2018

Inverse Kinematics

I have an old joystick laying around that I thought would be fun to use to control the arm on the tank. However, it has a limited number of degrees of freedom. My desire was to have each axis of the joystick move the end of the arm in the X or Y direction. This was tricky as the arm is a non-Cartesian design. I'm using inverse kinematics to calculate the angles of each joint based on given X,Y coordinates.

I wanted to make a proof of concept before debugging on the full system. I decided to write a Processing script that would follow the mouse cursor. Above is a simple gif if the program.

Friday, August 17, 2018

Traction!

 
Today I bought some weather stripping, cut and glued a strip to each tread link. Really gives the tank a lot more traction. So I naturally had to make it climb up my desk.

Thursday, August 16, 2018

Video Streaming RC Tank!

Yesterday I finished Part 1-alpha of this project!


What is part 1?

The first part of this project is a server interface running on a raspberry Pi which will render a control dashboard that streams video from the tank and has controls for the user to move the tank around. Part1-alpha is not quite part one, because I only have the base drive system built. Eventually I the control panel will include controls for the arm, claw, and drive tracks. But for now I just think its cool to have a video streaming tankbot.
Screenshot of the dashboard

Video Streaming

I used the motion library to stream video. Motion is designed as more of a security system application and initially the video stream was very poor (laggy). I did some research and found that motion saves jpgs every so often. After disabling that, the video stream improved enough to where you could drive the tankbot purely using the video feed. I also set some configs to lessen the quality of the video to improve the response time.

Dashboard

The dashboard is build with bootstrapped html, with a simple image tag that streams the video. Buttons connected through sockets control the motors of the tank.

Serial Communication

Im using the serialport npm library to comunicate with the arduino

System

The system comprises mainly two parts: a state machine running on the arduino, and a simple nodeJS server running on a raspberry Pi. The arduino listens for an incoming byte and performs the instructed action based on the received byte:
  1. forward
  2. reverse
  3. left
  4. right
  5. stop
The nodeJS server renders a simple html page on a get request, which includes a basic javascript script that emits commands through the use of sockets. The nodeJS server will receive those commands and send an appropriate byte to the arduino.

First Prototype

Hello! This is a bit out of date, but I've finished printing all of the links for the tracks! Each tread is made up of 26 links; the printer I have is a bit slow, so it took a while to get all the links printed. The assembly on top is the base of the arm, which will rotate on this turret.

Before I finish the arm assembly I need to do a bit of redesign on the base. I found out that the turret motor I had initially chosen doesn't have enough torque to move the whole arm assembly. I have a high torque servo that I plan on using, however I need to widen the wheel base in order to fit the servo between the two drive motors.
 
Here is a video of a quick test I did on the turret motor.

Wednesday, August 1, 2018

printf("Hello World");

Image result for developer desk retro

cout << "Hello!";
I am a maker, developer, and engineer. 
I want to share my projects with you - because, well robots, apps, and computers are awesome! One of the reasons why I'm making this blog is for documentation purposes of my various projects, but also just to showcase them. Hopefully my projects will inspire you to create your own!

Some things I like:
Embedded systems, arduino, rasperryPi, programming, computers, board games, web and mobile app development.