Autonomous rover/robot dog

Ultimately, my goal is to construct a rover (in a K-9 shell) to follow me when I attend sci-fi conventions (myself dressed as Dr. Who).

Similar projects worth following
Originally, I wanted to make a robot that looked and acted like K-9, the beloved robot dog from the BBC's TV show Doctor Who. Many folks have accomplished this, though a good portion are remote controlled. I would like to construct a rover that would be as autonomous as possible. The "K-9" shell would be removable, not only for maintenance access, but also that would be the rover's "costume".

When I began work on the rover, I planned to use only a Raspberry Pi 3 Model B. As I have added servos, sensors, and more to it, I realized an Arduino could do the bulk of the work with sensors and servos while the Rpi provides the autonomous control.

Phases of K-9’s development, K-1 through to K-9 v1.0.

1. Make it possible for Rpi to accessed remotely. The only cable connection should be the power until inductive charging is complete.

* If my home router is unavailable, try to connect to my phone's WiFi hotspot - this is a good fall back in that K-9 needs to follow the phone anyway and if WiFi is unavailable, at least my phone’s signal is pretty solid and provides a hotspot.

* Have K-9 set up his own ad-hoc network. However, I don’t know if you can do both. Can it still connect to outside wifi?

2. Build a chassis that you can mount the Rpi and servos to.

3. Connect Rpi to servos mounted on the chassis, and demonstrate ability of Rpi to control the servos.

* NOTE: Already an issue with the tracks. Switching to Mecanum wheels.

* Mecanum wheels can move an object in all eight cardinal directions as well as spin in place. They will provide total freedom of movement and better traction.

* Write software that will allow speed and direction controls to the servo-driven wheels.

* Create a remote control web app - this should be a web front-end on a lightweight web server running on K-9.

* Use an Arduino Mega for servo control

4. Video camera and side display support.

* Single front-facing camera mounted in head.

* Provide a way to shine a headlamp for darkness? (Maybe a pen light instead a laser pointer for the nose?)

* Primary purpose is for visual detection of objects, and maybe faces?

* Secondary purpose is for streaming security video feed or even as a live-streaming video chat.

* Provide a side display panel to bring up local diagnostic info and direct input (touchscreen)

* DO NOT ALLOW any kind of command access. (Command and control can ONLY be done over secure WiFi channel to a secure account.) We must not allow anyone with physical access to K-9 to be able to alter him from this display.

5. Batteries and changing circuitry. Need one battery for Rpi/camera/touchscreen and one for all servos, sensors, lights, etc. Because of power draw of combined Rpi, camera, and touchscreen may be > 1A, we may need one battery for Rpi & camera and a separate battery for the touchscreen.

* Since we need to determine current draw of Rpi, camera, and Touchscreen together, I moved their installation phase up before this one.

* Use Qi Charging Pads so that the batteries can be charged wirelessly.

* The charging receivers will be placed on a side panel will “dock” next to the pads aligned on a wall.

6. Add microphone and speakers for accepting voice control commands and responses.

* Voice recognition of user.

* Microphone doubles as a “tail”.

* Query processing, to be able to answer questions and perform commands.

* If online, K-9 can query the hive mind (aka Google) to answer questions like “OK Google” (or Siri or Alexa or Cortana…)

7. Add Sensors and be able to use them to observe and map his environment.

* Use an Arduino to get data from the sensors

* Install ROS/Johnny-five/MQTT if desired

* ROS does the bulk of the communication and can prioritize sensor feedback and determine actions.

* Can we do this without ROS? Perhaps with MQTT. I would prefer to have MQTT be a secondary queue, to communicate with IoT/openHAB Things, but still use ROS for K-9’s controls.

* Also, ROS interfaces with OpenCV, the camera view application, so it has that advantage.

* an alternative is Johnny-five and raspi-io which is essentially a JavaScript robot API.

* proximity detection and obstacle avoidance.

* SONAR scanning

* Room mapping to learn where movement is possible, where bed is.

* Object and user recognition via video inputs.

* Ramp/cliff detection - allow it to go up or down small angle, but if angle is to steep, or if at edge of cliff/stairs, it must stop

* Altitude detection - specifically detect if it has been lifted or set down

8. Track Master/Mistress to be able to freely follow us, find us. We need to be able to track K-9 also via GPS.

* find and follow my cellphone via bluetooth/Wifi

* K-9...

Read more »


Originally found at These are "unofficial" plans for the shell of the robot which can be shared, but not sold.

Adobe Portable Document Format - 74.82 kB - 03/08/2017 at 01:57


  • 2 × ERECTOR Multimodels 25 Super Construction set Providing an inexpensive framework to build the chassis with. Solid construction and lightweight. (One set does not provide enough of a larger pieces, so I purchased a second set.)
  • 1 × Raspberry Pi 3 Model B Besides acting as the autonomous "brain" for the rover, the Rpi3 has WiFi and Bluetooth built in. The Rpi3 runs Ubuntu Linux so that we can install ROS (Robot Operating System) on it., which enables a lot of ready-to-use functionality.
  • 1 × Adafruit Ultimate GPS breakout module Provides the ability for the rover to know where it is and also to alert the user to its location.
  • 1 × 9 Degrees of Freedom Stick Provides gyroscope, accelerometer, and magnetometer (compass) data
  • 1 × Rpi 5MP camera module Provides computer vision. can take still shots, record/stream video, recognize faces, etc.

View all 23 components

  • johnny-five is alive... yeah, original, I know

    Dan Shaurette03/18/2017 at 05:48 0 comments

    After installing the requisite packages on my Raspberry pi from the website and reviewing examples, I realized one small oversight on my part. The "typical" use for johnny-five appears to be the ability to control a board (like an Arduino or Raspberry Pi) from a computer over a USB cable. You can install johnny-five on a Raspberry Pi itself, but then the use case is that the Rpi is the master and the board you connect (like an Arduino) is the slave. That's all well and good and part of what I wanted to do, but I *also* want to be able to control things *on* the Rpi at the same time.

    I have googled all over and did not see examples of anyone saying that this could be done or had been done. Examples were either for the Rpi *or* the arduino. I find this shocking because it seems like the perfect robotic use case. Sure, there's piduino5, but again, that's just an Rpi controlling an Arduino without any specific control on the Rpi in addition.

    I did find out how to set up multiple boards. With some digging I found out how to set up both types of boards and made adjustments for using the multi-board setup. I tinkered with the setup of LEDs and I found that I could blink LEDs on the Rpi AND the Arduino in the same script!

    Below is my script. Very plain, it only tests with LEDs. I would consider this a "bilingual Hello World" for johnny-five. I hope this helps someone else scratching their head over the same dilemma,

    ** Control Raspi AND Arduino
    ** (C) Dan Shaurette; licensed as CC-BY.
    ** March 17, 2017
    ** Using
    var five = require("johnny-five");
    var Raspi = require("raspi-io");
    var ports = [
      { id: "mega", port: "/dev/ttyACM0" },
      { id: "rpi3", io: new Raspi() }
    new five.Boards(ports).on("ready", function() {
      var aled = new five.Led({
        pin: 13,
        board: this.byId("mega")
      var pled = new five.Led({
        pin: "P1-13",
        board: this.byId("rpi3")
      this.on("exit", function() {;;

  • Johnny-five/nodebots vs. ROS

    Dan Shaurette03/15/2017 at 03:39 0 comments

    To celebrate #PiDay 2017, I decided it was time to investigate options for open-source robotics libraries and protocols that I could use with my Raspberry Pi 3 (and Arduino Mega). There's still a part of me that wants to just keep exploring and building Python scripts to find out just what I can accomplish with the Rpi and Arduino. There's also the part of me that wants to take full advantage of what others who've come before me have created that could move things along faster. The great thing about both approaches is that I can always scrap what I don't think is working and take another path.

    So, what's out there? The one that is most mature and has many developers contributing to it is the Robot Operating System, aka ROS. As of the writing on this blog, Kinetic Kame is the most recent release, and on their wiki there are instructions on how to install it on the Raspberry Pi. To be blunt, it is not a simple process, but if everything installs without conflicts, it does seem straight-forward.

    In fact, their upfront advice is to download an SD card image with Ubuntu and ROS installed. I agree, that would be a good idea, but I have invested quite a bit of time on my existing Raspbian (Debian Linux for Rpi) installation and I'm not going to scrap it. I may very well buy a new card and experiment with ROS in this way later.

    Now, ROS itself is hefty. There are modules to build some amazing and sophisticated robots with many off the shelf parts and other popular libraries (like CV Computer Vision software). It also comes with 3D virtual prototyping environments so that you can design before you build with real parts. All of this is both a blessing and a curse. I'm sure there's a way to get only what you need, but in my admittedly cursory dive into their website, it feels like it might be too much overhead for what I want to build.

    So for now, I'm setting ROS aside as a luxury item to find out more about later.

    Another promising open-source project is, named after one of my favorite robots, from the movie "Short Circuit". This project uses the node.js Javascript environment on many platforms (Raspberry Pi included) to control an Arduino. You may have heard of nodebots, which are a type of robot built with Johnny-five.

    What strikes me immediately is how lightweight, versatile, and easy-to-use this project is. I did have to do some digging into how to get node.js on my Rpi, but once that was done, the rest was trivial. Javascript is a language that many people can pick up quickly, so it was a wise choice by them, but admittedly not one that I would have expected. I mean, it's primarily for website design. I have never used node.js before but I have extensively used Javascript itself.

    So, at least for now, I see more immediate value in Johnny-five, and if nothing else, I think it will be fun to experiment with. I will update later with my thoughts after I have a chance to play with it.

    If YOU have used either ROS or Johnny-five and you have any advice, I would love to hear it.

View all 2 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

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