close-circle
Close
0%
0%

Robot Butler

Little Sergei, the retired BattleBot learning to serve as a robot assistant

Similar projects worth following
close
The battlebot business can be grueling work, with the constant action and danger. With the competition over for "Little Sergei", a leisurely retirement can be expected. However, collecting dust is a poor way to live, so the retired battlebot now seeks a new life as a robot butler.

This hack project aims to convert an old robot into a servant of sorts. The robot was made for a battlebot competition at Artistan's Asylum, and hasn't been used in over two years. A Kinect and computer will be attached to give it enhanced capabilities. It will be programmed to identify/follow people and drive into a storage area. Time permitting, other features will be added, such as a lifting tray to carry drinks.

The robot will be controlled by an AI program set on top of a TCP server. This will allow remote communication with the butler over the internet.

This will be an ongoing conversion, so the project will see consistent updates and log posts.

The goal of this project is to hack an old robot to accomplish more mundane tasks than destroying other robots.

The original robot, called "Little Sergei" was built for an automated BattleBot competition at Artisan's Asylum. The robots were controlled by rudimentary AI, and had to find/attack robots by themselves.

The goal is to have a robot that can follow a person around, and interpret gestures made by that person. It will have a tray to help hold items, and speakers to play sounds. A Kinect and computer will be added to enable this capability. The computer will also act as a TCP server, so others can remotely interact with the robot through a webpage.

The hack process will follow the current plan:

  • Take stock of on-board components, and whether they're usable
  • Test components to make sure they work
  • List and acquire missing/required parts
  • Test Kinect
  • Assemble additions to mount Kinect and modified components
  • Code program to drive robot
  • Develop object detection to see people and interpret gestures
  • Drive robot based on gestures
  • Attach a lift tray that the robot will raise in response to certain actions
  • Add voice commands to control the robot through audio
  • Add a website component for remote webpage interaction
  • Have speakers play appropriate/inappropriate audio based on situation

  • 1 × Windows 8 laptop with USB 3 For the Kinect and robot logic
  • 1 × Version 2 Kinect Kinect itself, 3.0 USB cable, power adapter
  • 1 × Wooden Kinect mount With camera screw to holder Kinect
  • 2 × 2 Cell LiPo Batteries 7.4 volts, 2200 mAh
  • 1 × Seeedstudio Motor Shield v1.0 For the four DC motors

View all 8 components

  • Motor Controller Replacement

    Shawn Chen10/12/2014 at 06:15 0 comments

    While Little Sergei was training for his new job, disaster struck! His "hip" gave out, incapacitating Sergei and putting a possible end to his ambitions. Now, he needs to wait for a replacement hip, and hope it helps enough to resume the life of a robot butler.

    Unfortunately, the Sabertooth Dual 12A Motor Driver burned out in the middle of testing, complete with smoke and the smell of fried electronics. After some testing, the most likely cause was that the connector wires got squished together, or into the metal body. As a result, two wires were grounded and burned out, so only one of the sides drive now. An important lesson in wire management: exposed wires should be kept track of at all times, or wrapped in an insulator like electrical tape.

    Unfortunately, this means that the Robot Butler project will have to be on hold until a new motor controller can be found. Though, only one of the two controllers on the motor driver is broken. So for now, the half working motor controller has been salvaged. Perhaps it can be re-purposed for another project.


    One Month Later...

    Little Sergei is able to acquire a hip replacement, and is now back in action. It's a bit more complicated to move around now, but the enterprising robot shall not let that deter his quest.

    A replacement motor drive is being used to control the robot motors. It is a Seeedstudio Motor Shield v1.0, which connects directly to the Arduino Mega. This ended up actually simplifying the the layout of the robot. The side connectors may also be amenable to servo motors, removing the need for a breadboard to handle the Lifting Servo Motor. In addition, the motor shield automatically bridges and powers the Arduino, so the 5V Universal Battery Elimination Circuit can be scavenged from the project.

    Controlling the motor shield is a bit different, each motor utilizes three PINs, compared to the original one:

    • Enable/disable
    • Power draw
    • Forward/Reverse

  • Wiring the Robot

    Shawn Chen08/18/2014 at 05:54 0 comments

    As the first step of training is to review all necessary equipment, Little Sergei will double-check his equipment and diet regimen to make sure he's prepared.

    While I'm able to piggyback off existing circuitry of the battle-bot, I still need to go through and make sure everything is connected properly. This will also be useful information if anything breaks. Below is a diagram of the device layout for this project.

    The layout begins with two Lithium Polymer batteries in serial, providing 14.8 volts to the robot. After going through an on/off switch, the power splits into a motor controller and a "Universal Battery Elimination Circuit" (UBEC). The DC motors are powered by the motor controller. The UBEC regulates the voltage to a stable 5 volts, so the Arduino won't be damaged from electrical spikes. This is a common setup so that a single power source can be used for both motors and electronics.

    For the robot control components, the Arduino pins are connected to the control pins for the lifters and controllers. A serial USB cable connects the Arduino with a laptop, while the Kinect sensor is hooked to the laptop.

  • Parts Testing and Assembly

    Shawn Chen08/12/2014 at 02:07 0 comments

    Now that all the equipment has been checked and verified, it is time for Little Sergei to put on the uniform and make sure he's ready to begin training.

    Previously, I attached the new batteries and uploaded Standard Firmata to the Arduino. The next step is to fire up a Firmata program on my computer and test how well the motors move. A test executable can be found on the Firmata website. I attach both devices with a USB cable and connect the control/power/ground pins between the motors and Arduino.

    This enables me to launch the text executable and select the appropriate serial (USB) port, which automatically populates the form field with all the available pins. I'm able to change the pin mode to "Servo" and adjust the motor values. All the motors react well, so I can move on to putting together the Kinect mount.

    These extensions are assembled from materials scavenged from the Makerbar. The core of the mount consists of two 7 inch pine wood planks. Each piece of wood had a diagonal cut into the edge, and the two pieces are wood glued together. This formed a "L" shaped structure that is screwed into a simple plank. I remove the cover of the battlebot replace it with the plank.

    The Kinect has a 1/4 inch screw hole on the bottom, the same as a standard camera mount. So I drill a hole of that size in the top of the mount and found a camera mount screw. Unfortunately, the weight of the Kinect is too much for the a "L" shaped mount to hold, so I add a simple support beam on the other side.

  • Batteries and Kinect

    Shawn Chen08/06/2014 at 21:37 0 comments

    After a few days of waiting, all of Little Sergei's new stuff arrived, so it's time to connect everything and make sure it works. Sadly, not everything is needed, so some parts will be taken out and stored away in a sad little cardboard box.

    Two new Lithium Polymer batteries arrived in the mail, along with a charger. With the new batteries installed, the robot turns on without issue. I then used Arduino's built in examples to directly test the motors. Unfortunately, one of the lifting Servo motors (the right one) doesn't lift. Sounds do still occur and there's little motions, so perhaps the motor isn't connected properly.

    I spent some time trying to create a new Kinect Project and have it communicate with the Arduino Mega over serial. I will use Standard Firmata, to cut down on the amount of Arduino programming. However, there is a scarity of up-to-date .NET libraries for Firmata. After a long period of failure, I settled on a C# library called Sharpduino.

    Some libraries I added:

    • JSON library
      • Tools -> Library Package Manager -> Package Manager Console
      • Install-Package Newtonsoft.Json
    • Reference to Kinect library
      • Project -> Add Reference... -> Extension

    A quick update on Kinect: my computer may be unable to directly use the Kinect device, but I can use Kinect Studio to play a recording and develop off of that.

  • Initial Kinect Notes

    Shawn Chen08/02/2014 at 21:21 0 comments

    While Little Sergei waits to build a new diet (batteries), he also needs to get glasses, in the form of a shiny cutting-edge version 2 Kinect. He'll spend a few days with it learning how to see boxes.

    I've recently attended a Hackathon at Grind Spaces and acquired a Version 2 Kinect. Since I have it, I should do something fun with it, or in this case, use it as the eyes and ears for the robot.

    The new device provides high resolution imaging, depth sensing, and a good microphone. The SDK also has built in libraries, and is able to see up to six people and their general limb positions. Since people detection is already available, I will work on detecting a cardboard box instead. For now, here's a little brainstorming about how the robot will use the Kinect.

    The new Kinect requires windows 8, and a USB 3.0 connection. Sadly, my wimpy computer only has USB 2.0. I attempted to buy a 34mm PCI Express card for USB ports, but the card needs Express version 2 to allow full functionality. Thus, I had to borrow a boot-camped Apple computer to operate the Kinect. I wish to avoid too many middle-men programs, so the core of the robot will be coded in C#. I'll aim to use standard firmata in C# so the program can directly send signals to the Arduino on the robot.

    Unfortunately, the Kinect requires external power, and the adapter ends in an electrical socket plug. I haven't found any third party power adapters I could snip and connect to a battery, so for the moment, Little Sergei will be a tethered robot. He probably needs some hand holding anyway.

  • Taking stock of available components

    Shawn Chen07/25/2014 at 19:29 0 comments

    "Little Sergei" is eager to begin working again, but he's been retired a bit too long. He needs to introspect and make sure those old bones are still in working order.

    Step 1: reviewing battlebot condition

    Looking through, the battlebot has:

    • Two 7.4V LiPo two-cell batteries
    • Four DC Motors
    • Two Servo Motors for lifting
    • Arduino Mega 2560
    • XBee Wireless

    Unfortunately, the battery packs are puffing a bit. This is indicative of potential damage in the battery. Possible, as the robot/battery has not seen use in two years. While many have continued to use puffed LiPo batteries without issue, there is still a chance of catastrophic failure (fire).

    I'm no battery expert, and I lack guard sleeves and fire-proof storage containers. LiPo batteries are fairly cheap nowadays, so the better action is to simply buy new ones.

    Arduino and Motor Testing

    The LiPo batteries are connected in serial, so the system would expect 14.8V/1.6Ah of power. I don't have a variable power supply with me at the moment, but I can power the Arduino with an AC adapter/computer. The control pins are already connected, so I just need a temporary wire from Arduino 5V to Servo power pin. Using a Raspberry Pi, I sent a few motor signals through the Arduino, which moves the motors.

    The attached computer's wireless will be used instead, so the XBee component can be removed.

View all 6 project logs

Enjoy this project?

Share

Discussions

Similar Projects

Does this project spark your interest?

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