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
Forty years ago my first robot, a 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).
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.)
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.)
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’s Spec Sheet:
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.