Carl and the GoPiGo3: What it takes to make robot dreams come to “life”


The following is a guest post by Dexter Industries community member CyclicalObsessive.  We appreciate all the time and effort he put into writing it!

I am a recently retired software engineer (with a mechanical engineering degree). Retirement has increased the time I have to devote to my robot dreams, and my robot’s dreams!

Psychologists have a term, cognitive dissonance, that describes the stress I feel when I think about my robot dreams. I may have time to make my robot smarter, but building a smart robot is hard – really, really hard!

What are my robot dreams? I will feel satisfied when my robot:

  • can independently manage its power needs: i.e. either contiguous or continuous, endless life
  • is aware of humans and objects in its environment
  • can interact with humans using a speech interface
  • learns useful facts and behaviors from its experiences and its “wilderness”, the Internet

So what would this robot’s dreams look like? (“Do Androids Dream Of Electric Sheep?”) During the time the robot will be constrained to sitting on its charger it could:

  • evaluate its power situation: Vbatt, fast or trickle charging, maintain and evaluate historical power statistics, decide when to move off its charger
  • evaluate short term memories for estimated usefulness: e.g. categorizing/culling photos taken while exploring, updating hypothesized room maps based on sensor data (distance sensor, PiCam, encoder/IMU) taken while exploring
  • Use the Internet to identify proposed extensions to its knowledge graphs in its useful objects database
  • Use recent experiences to evaluate prior proposed knowledge graph extensions for truth and usefulness

During the time the robot is not conserving energy or not charging, it might:

  • recognize me, my wife, and “stranger”,
  • manage its theory of mind about what we are doing (sleeping or watching TV mean do-no-disturb)
  • identify sounds of dishwasher, typing, music, TV, conversations, rain outside, lawn sprinklers running
  • investigate a floorboard, a wall, a window, a room, a light, the ceiling, a doorway, that “new thing” not seen before
  • search the Internet for alternate phrases to express useful concepts (so interactions are less repetitive)

Of course, it will not be able to do everything all the time, so it will need to learn to manage its catalog of behaviors according to the situation.

History According To My Robots


My “Hero”

Forty years ago my first robot,Heathkit Hero robot, had a 1MHz Motorola 6800 family brain made with four-thousand transistors. While it had many capabilities useful to its existence such as power on self-test, and automatic calibration of the head panning servo, it suffered from “Eternal Sunshine of the Spotless Mind”, and was hopelessly dependant on me for care and feeding. It weighed 40 lbs. and “ran” for less than 30 minutes.

Twenty-five years ago, I had a Cye robot that could find its charger independently. It would develop an hypothesized map of its environment, but “understood” nothing, (and left spoked-wheel tracks in the carpets).


Cye Robot – Look at them scary wheels


Cye’s Recharger Base (in a reference corner)



Tracks from Cye’s sprocket wheels. Very accurate odometry, but he was not welcome to wander the house.

Eighteen years ago, I built a Rug Warrior Pro (RWP) robot kit, from the Massachusetts Institute of Technology (MIT) robotics curriculum. The RWP had a 2 MHz HC6811 processor with 32KB of memory that ran small, interactive C language programs. I started a user group that grew to several hundred RWP users, and together we pushed the limits of this “adorable” little bot. (e.g. Using Braitenburg Vehicle “reactive behaviors to appear complex or intelligent”, and assisted numerous Fire Fighting Robot Contest winners.)


Rug Warrior Pro Robot ($600 in 1999)

Four years ago, I upgraded the processor in my, then 15 year old, RWP robot with the 700MHz Raspberry Pi B+ to become the “Rug Warrior Pi robot, and started learning to program in Python. While this robot had vastly greater processing capacity, it had only me to program it. It also was hampered by poor health from my limited electrical engineering skills (false encoder clicks, and variability of ultrasonic distance sensor and current draw sensor readings, as well as unbuffered bumper sensors may have drawn more current than allowed.)

Rug Warrior with Raspberry Pi

Rug Warrior Pi – Replaced Brain with Raspberry Pi and new sensor suite

Today, meet Carl

Carl is built upon the Dexter Industries GoPiGo3 base robot kit, and a four-core 1.2GHz 1GB Raspberry Pi 3B processor containing several billion transistors.

Carl the Robot

Carl, the GoPiGo3 bot (before battery pack moved internal to figure)

The GoPiGo3 is a superb platform to build upon, coupled with excellent programming examples and tutorials, as well as responsive forum support from the DI engineering staff.

Carl’s Spec Sheet:



The GoPiGo3 power circuitry is quite sophisticated, feeding the components, with isolation and protection, over a wide input voltage range. My robot is powered with 8 AA size 2800mAH NiMH cells which yields 3 to 9 hours of “running” programs depending on the amount of wandering, servo scanning, distance measuring, wall finding, and photo capturing “he decides to do.” (See a detailed test report of Carl on his prior 2300 mAH cells here.)

Currently, Carl announces, (using text-to-speech), when he is getting worried about his battery charge, and will shutdown completely if he has not been connected to his charger by his “safety point.” (Shutting down with 10 to 20% capacity reserved can extend the cells’ useful life by many years. My 10 year old Toyota Prius has 168 NiMH cells that are still going strong. It recharges when the cells reach 20% reserve. ) The GoPiGo3 board also has low voltage monitoring and management that I have not integrated into Carl’s power planning.

It is said that we are uniquely shaped by our memory of life experiences and what we learn from those memories. Carl is a long way from learning anything on his own, but he does keep a log of each hour I let him run. His life.log lists what he was doing for his 336 hours of contiguous life to date. Paraphrasing someone smarter than me: If he doesn’t learn from his history, he will be destined to repeat it.

Hopefully my dreams for Carl will soon become reality, and he will learn to find his refrigerator (charger), drink all the juice he wants, and start dreaming for himself.


You can see more of cyclicalobsessives posts on the forums here, here, and here.  Have a project you want to share with our community?  Contact us!


Leave a reply