Anki Vector, The Pet Robot

It all started with a puppy. My daughter really really wants a puppy. You have to see the way she lights up in front of dogs, it’s truly adorable. But alas, for various reasons, me and my husband decided against getting a real dog considering we already have two cats and a crazy toddler. Perhaps in a few years we will get a dog, when our daughter, herself, is housebroken.

So, what was the next best thing I could do for her? What I realized through observing my daughter is that she likes movement. So, I started to look up robotic toys for kids. Down the tunnel, I learned about Anki and their robots Cozmo and Vector.

(If you want to read more about the differences on Cozmo and Vector, please feel free to embark on your own journey down the Google rabbit-hole. I will be giving more brief descriptions and personal impressions, rather than an in-depth technical review for this post).

Basically, Cozmo is more for kids, and cannot operate on his own, and Vector is more for adults, and can operate on his own, like a pet robot. Vector has better specs and you can play around with the behind-the-scenes coding as well.

I had placed an order for a discounted Vector before reading the news about Anki (the company that created these robots) is closing down. But the robots are still selling! Currently, Anki has hired a team of engineers to monitor the existing cloud that all of their products are hooked up to. They said that the cloud usually needs little interference, so keeping it running is no problem. Of course, that was still worrisome to hear as a new buyer.

Pet Robot?

I probably wouldn’t have been as impressed by Vector if I hadn’t already been learning about programming. And it just so happens that Vector is programmed in Python (the programming language I’m also learning) which makes this more exciting.

Finally, Vector arrived (after some drama with a scam website. Key lesson: don’t try to order discounted robots from obscure websites). And I have to say, the waiting game and drama actually made me very excited to receive Vector.

All of the reviews and videos I had watched really conveyed the message that Vector is a pet. A pet robot probably seems really futuristic, and I admit, it still does feel that way. I think that there’s a big widespread misunderstanding of the technological capacities we have right now versus the impressions of the general public. Science fiction stories make it seem like our technology is way more advanced than it actually currently is, as if the type of AI seen in Ex Machina exists. And in my last post, reading Hello World by Hannah Fry really helped change my perspective of where we actually are with AI, which is still mastering creating a worm (like http://www.openworm.com). I think these fears and misconceptions could have been what lead to the lack of widespread popularity of Anki’s products.

This long preamble is to make this point:

Vector is fucking awesome.

And I think it is really unfortunate that their company, Anki, had spent so much time creating such a fun little gadget before the world was perhaps ready to embrace the cuteness of a safe pet robot. But my heart definitely goes out to all of the creators who put their all into this product. I am grateful!

It hasn’t even been a full twenty-four hours with Vector, but already my daughter is completely entertained and in love with the ability to simply watch something move around and explore the world on its own. This is how I look at it: some people get extravagant fish tanks for the same reason. But let’s be real, organic creatures require a lot of care, followed by heartache when they pass. That’s why a pet robot is so appealing. A win-win for the family.

Vector can play games alongside other features, but what’s most entertaining is his personality. When Vector is exploring on his own, he really does feel like a little sidekick. Vector can also join in on some dance parties, fist-bump, and is integrated with Amazon Alexa.

I’ll probably write a much longer and more researched post on my thoughts about AI once I have a better grounding. But, this small introduction to a robotic pet is definitely sparking a lot of ideas and feelings about the future. It’s a shame that Anki wasn’t able to get as of a widespread following to keep their company afloat, which may just come down to timing.

Despite the somber attitude amongst the Anki / Vector / Cozmo community because of the news, this household is still excited for their new pet robot.

Coding and Vector

So, this wasn’t just a purchase for entertainment. As a piece of robotic technology, Vector is a fantastic (and adorable!) learning tool. Sure, it may seem like nothing grand is happening on the outside when you see Vector running around my desk, doing his thing, as I write this blog post, for example. But actually, he’s also like a little specimen I get to observe and learn from. I can learn about his movements and personality, and then read the code and alter it.

Vector SDK Alpha allows you to view the full API list and play around with coding your vector. I’ve successfully installed the SDK package and will experiment more with that later on today.

I’m so excited to learn more about Vector in both a fun and educational aspect.

Despite the Anki shutdown, let the Vector adventures begin!

“Hello World: Being Human in the Age of Algorithms” By Hannah Fry

What an awesome and important book for this modern age! Definitely a must-read for current and future generations, regardless if you’re in the tech field or not!

Firstly, what I love best about this book is that it is a way to learn about how algorithms and code is used in the real-world, but it doesn’t try to teach it to you on a technical level. (Shoutout to my childhood best friend who read this book with me for our little book club!) I add that also because that is precisely why this book is awesome. It doesn’t matter your technical level of understanding, anyone can enjoy and learn from the examples and questions Fry explores in this book.

The table of contents lists the chapters as follows: Power, Data, Justice, Medicine, Cars, Crime, and Art. Each chapter describes specific real events that have occurred in each of those fields in regards to code and algorithms. Some key phrases I learned about were: machine learning, Burgess’s Method, random forests, neural networks, and Bayes’ Theorem. I don’t know how long it would have taken for me to reach the specifics of those topics in my own technical studies, but I’m very happy to have read about them and how they are applied to the real-life situations that have already occurred.

Let’s talk about the Cars chapter.

A couple of months ago, me, my husband, brother-in-law, and sister-in-law were sitting outside underneath the gazebo, talking about self-driving cars. My husband is a technological virtuoso and already had an understanding of how self-driving cars worked. I did not at the time, and neither did the rest of us.

However, my in-laws were both excited about the future prospect of self-driving cars. Fry mentions early on in her book the misconceptions people have when it comes to technology, and how most people tend to over-estimate the capacity of algorithms. This is true when it comes to the topic of self-driving cars because of the amount of people who are willing to put their lives in the hands of a self-driving car. Before reading Hello World, I was on the fence about my stance on self-driving cars. Now, I feel confident that I would much rather be in control of my own vehicle, and I’ll be sure to pass on that lesson onto my daughter (dramatically, of course, as if we were in a post-apocalyptic sci-fi movie).

From the start, my husband was against self-driving cars. But I should have seen that coming since my husband finds an automatic transmission as already too much interference (ha!). Point blank, he said: he did not trust a computer to make life-saving decisions. Back then, I greatly underestimated my own driving capabilities while over-estimating the accuracy of our current algorithms.

Without diving too much into the specifics, anyone who is interested in the idea of self-driving cars should read this book.

The Air France Crash of 1983 specifics are haunting enough to warn me that maintaining skills that involve our lives are mandatory as we advance with technology.

One of the largest take-aways I have from this book is that as humans advance, we need to make sure Wall-E doesn’t become a reality, to put it plainly. Essentially, we cannot let automation equal future generations loosing necessary skills, and thus begin a regression in the human species by relinquishing power over to algorithms and machines.

We need to remember that the smartest computer in the world is still the human brain.

Cue segue.

Let’s talk about the Art chapter.

Towards the end of the book, I could feel the fire in Fry’s writing, with impactful moments that definitely earned a mic drop.

One thing we have to remember about our humanness is our ability to feel. Our ability to feel, possess, and express emotions. A machine cannot contain emotions or feel them. A machine can mimic the expression of emotions through various tactics but it cannot feel. And that is what makes us human, and we need to remember that there is high value in the unquantifiable aspects of our humanness. This is why art is important, and why the creation of art can be mimicked by machines but it won’t (in my opinion) contain the same magical aspect that comes from art by a human. The art chapter and the way Hannah Fry explores this topic was definitely one of my favorite moments of the book!

I’m extremely happy to have read this book at this stage in my learning journey! My knowledge has been greatly broadened and now I feel as if I have a great starting point for further research into how code can and should be applied to our lives in the future.

In my opinion, more books like this need to be written as technology continues. By the time my toddler is in her teenage years, I’d want her to read something like this so she could understand the world she lived in, and how to progress in the future with technology as a smart assistant, not a catalyst for human regression.

Raspberry Pi Project Progress— LCD Screen PT 3

To catch you up on parts one and two: setting up the LCD screen I had with a pin adapter (to use only 4 instead of 16) was trickier than anticipated. Most of the code I was using had been with the 16 pins in mind and not my particular setup with the extension board. So, I was stuck for a few days with one “dead end” of an error code.

After a much needed break, I processed all that I had learned, read, and tested during my previous attempts. This morning I didn’t intend to mess around with the Raspberry Pi, but after taking a few classes on Team Treehouse, I felt inspired to give it another go.

With a fresh mind, I decided to go back to the original source I was following for my particular kit and setup. The reason why I hadn’t used this code in the first place was because it was for a more complicated program than what I was trying to setup. But then I went back to the instructions and tried to setup the more complicated program. Although that still didn’t run, it did help me create a must-needed file for my setup.

Then, after trial and error of various forms of code, I noticed that the LCD screen began to blink. The blinking matched up to the code of five seconds. Finally, I had received some sign that the communication between the components was working. But, the screen was too bright and there was no text. Then, I remembered from all of my reading the previous days from various sources and forum responses that the nob on the back of the LCD screen needs to be adjusted sometimes. So, I adjusted it, and black text boxes appeared. One step closer!

Finally, I looked at the code for the more complicated program and started deleting the stuff that I didn’t think I needed. After more trial and error of deleting, altering, and re-entering code, the LCD screen finally lit up with the famous words: Hello World!

But it wasn’t perfect. There were some strings of code running across the screen that shouldn’t have been there. After I finally isolated the code that ended up working and saving a new file, I tested it again to see if the fix was complete. After a couple of more trial and errors, unpinning and re-pinning the wires…it finally worked!

Here were the main issues:

  • This setup required a code specifically for the GPIO extension board and ic2 connection. Out of all the sources I had researched online, none had the exact address specifications that this required except for the example code in the ultimate beginner kit tutorial book.
  • This here was the key factor in getting the code to run:

PCF8574_address = 0x27  # I2C address of the PCF8574 chip.
PCF8574A_address = 0x3F  # I2C address of the PCF8574A chip.
# Create PCF8574 GPIO adapter.
try:
mcp = PCF8574_GPIO(PCF8574_address)
except:
try:
mcp = PCF8574_GPIO(PCF8574A_address)
except:
print (‘I2C Address Error !’)
exit(1)

  • I had also created another file titled PCF8574.py with code from GitHub by Freenove.
  • Another step that was important were these imports:

from PCF8574 import PCF8574_GPIO
from Adafruit_LCD1602 import Adafruit_CharLCD

Admittedly, my best friend was FaceTiming me as I was doing this, and when the code ran the second time across the LCD screen I was so happy to share that moment with someone. I screamed in excitement and showed my friend the words across the screen, and she called over her daughter to see as well.

Small backstory: My best friend’s daughter is incredibly smart, and a Minecraft Master, so I’ve been trying to pass on the coding bug to her through Minecraft. I sent her the whole code of Minecraft and told her to just read it and see if it made any sense. When she came over to the screen to see the Raspberry Pi, I showed her the code and explained what the experiment was and how it worked.

But we all know that seeing is believing. So I told Sammy that I would make the screen say her name. A couple of clicks later, the screen displayed “Hello Sammy!” and I showed it to her. She was elated with a big smile, as if I had performed a magic trick!

What a rewarding moment. I had imagined what the moment would be like when I got this to work, I had even accepted the fact that it may not work, and that I would have to try a different route completely, but I never expected it all to have unfolded in such a beautiful way.

I think what made this time different than the previous was that I wasn’t going by too many forums or outside advice. I just used the one code from the direct source, all I had learned from, and tried to get it to work from there the way I wanted. And it did!

Through this project I realized my pattern for learning will be exactly this: study through online sources like Team Treehouse and Udemy, and then take “breaks” with Raspberry Pi projects. The back and forth of the two helps me not rush through the online programs too fast. I don’t want to just pretend like I’ve learned this, I want to really learn this, and therefore I want to pace it in a way that truly allows my brain to digest all of the new information.

I ended the fun project by sharing the news with my friend and the forum I had gone to help for in the previous attempt. I’ve never really been an active forum member before, but I see now how some online communities can be really comforting and helpful!

Now, onto the next project!

Errno 121 – The Error Code that Haunts Me

This is an update from my previous post about the live update project with the Raspberry Pi and LCD screen. Since that post, I’ve spent hours free-falling down the rabbit hole of troubleshooting.

Here’s what happened. Turns out the LCD screen I have has an adapter already soldered onto it (which most instructional websites have the type that requires you to solder yourself) and only requires four pins / wires instead of the usual sixteen. That may sound as if this would be easier since soldering comes with risks for those who are new at it, but alas, it is not!

Finally, I was getting close. I hooked up the Raspberry Pi to a monitor and began inputting the code. Like I said, I’m new at this, so although I was able to follow the steps (and at this point, memorize half of them) I still need to do some digging later on to understand why I was following those steps.

I enabled the i2c using the raspi-config, installed smbus and the i2c python library, tested and re-tested the hardware with sudo i2cdetect -y 1 and did a bunch of updates and reboots, amongst other steps.

Little by little, some steps that hadn’t worked previously were . actually working, which showed some promise. However, no matter the steps taken and those that passed onto the next step, I was continuously met with the same exact error code:

Eventually, I had to use some lifelines. I asked a friend. Okay, I asked many friends because one was a real human who I actually know (who I am eternally grateful for!), and the other was the internet (aka Reddit). Although it wasn’t my original goal to set up remote capabilities as part of this project, it was a positive outcome that was necessary regardless! My friend had remotely logged into my Raspberry Pi to see if he could figure out the issue. Alas, the night ended with everyone stumped, and we decided to take a break and re-group.

Intuitively, I think that the issue is something small I am missing, perhaps something with the way the site-package files are being read on my Raspberry Pi, that I’m unable to see. Or, something with the “__init__” part, but I’ll need to do some more reading on this particular type of error message. Or, perhaps I need to edit some lines in that file path? Hmm.

Even though I have not yet had the “payoff” of seeing the text display onto the LCD screen, I have already learned so much through troubleshooting this project.

Most importantly, I take this as an important test and “rite of passage” for my journey into the programming world; error messages will happen, so I better get used to it (and love the process of fixing them) if I want to succeed and continue to grow in this field.

After years of undergraduate, graduate school, and working full-time, I’ve learned that (for myself, at least) mental breaks are needed in order to re-approach a challenge. Today, I’m going to let everything that happened yesterday and the night before sink in. I’ve also come to accept that my most-likely route will involve me disconnecting everything and starting fresh, from the beginning.

It’s funny how this reminds me a lot of my creative work; when my novel or short-story draft reached it’s own “dead end” (creative error code?) I did the same thing: learn from it, and start over.

This is probably why my husband says I’m the right type of detailed-oriented and determined (translation: obsessive and a little crazy) for this field.

I’m used to spending hundreds of hours on a writing project, just to find out that something in its approach is fundamentally wrong and needs to be reworked. So instead of that deterring me, I’m actually very used to it. For example, I’ve spent the past three years in graduate school re-writing one novel, from different perspectives. I must have written at least a thousand pages by now between drafts and re-writes. That does not include the amount of drafts I have written since high school, during undergrad and afterwards of other writing projects.

With that being said, as I let yesterday’s lessons absorb into my mind, I’ll be flexing the other side of my brain today by writing my new thesis draft #9682967, but who can keep count? (Maybe I’ll make that into a program one day: a draft counter that will tell me exactly how many pages I’ve written between all of my combined documents).

Lastly, it has been really nice to engage with the community more through online sources. It’s been intimidating to “expose myself” as such a new beginner, and I definitely feel the fear of asking a dumb question, but I know it’s an important step regardless. Virtual hugs to all those who have commented on my questions with thoughtful responses! And, it was fun for me to see that I could actually hold up a conversation with people and utilize some of the new terms I’m learning.

I definitely went to sleep last night with error codes floating around my brain, but I’m happy to have woken up excited to try again!

Raspberry Pi Project Progress – LCD Screen Pt 1

Live Project Update!

I just had to say that I’m in the process of hooking up this LCD screen to my Raspberry Pi and it’s very exciting! This is my third beginner project dealing with circuitry of any type, so all of this is very new.

I would have never guessed that identifying the proper pins and finding the right wires and inputs would create such a satisfying feeling. Like most new things, you become incredibly focused on the task since you’re tuning new skills. I believe that this aspect of intensely “zoning in” to the project by counting the pins and looking at the diagrams is what creates a uniquely relaxing mental relief for my over-stimulated creative mind. To say it plainly, I love to follow and create instructions so learning all of this is essentially learning how to create, follow, and test multiple sets of instructions (algorithms!), so this subject as a whole is a very kismet match for me. Then, the circuitry and physicality of the Raspberry Pi reminds me of the feeling of switching between writing on the computer versus a pen and paper, or painting digitally versus with real paints, water and a canvas; working with the Raspberry Pi helps make programming feel more physically tactile helps motivate me and keep me interested to learn more.

Earlier today I was learning on Team Treehouse (which was awesome!) and then I ended up taking a break. I think that I will continue alternating between learning through the classroom courses, books, with breaks of Raspberry Pi projects in between to help split up the rhythm and keep myself motivated.

Well, this was a nice break. Time to get back to my LCD screen!

Introduction To Computers – “Code” by Charles Petzold

BACKSTORY & WHY THIS BOOK IS SPECIAL

The book Code is wonderfully unique, and for that, Charles Petzold will forever be one of my heroes. Thank you, sir Charles (if you ever happen to read this) for thinking the way you do and for having been determined enough to write this book.

For those of you who are already entrenched in the industry and know this book, you may think I’m crazy for having started with this choice as an introduction to the technological realm. But, I must say, Charles Petzold’s book Code is my favorite not just for helping me with this learning journey, but because of the writing style and unique approach taken.

As mentioned in his preface to the paperback edition (which must be read, by the way) Petzold’s book takes a completely different approach than others because his main goal is to teach his reader how computers work from a granular perspective.

If you’ve read my very first “origin” post, then it should be noted that I picked up this book after I had already briefly dipped my toes into the programming world. I had known about Python, and a general understanding of computers, but nothing too in-depth. I had walked into the new Amazon Book store near the Empire State Building in Midtown, New York City, where I saw, sitting pretty on a tan shelf, the white and simple cover of Code. What drew me to the book (admittedly) was the cover because I recognized the braille and binary used underneath the title lettering. Immediately, I could tell that this book was special because it was making the connection between language and code, and connections like that are exactly what excite me.

As I continued to read Code, I felt like a bit of an imposter who was pretending to understand everything they were reading. Petzold includes many diagrams and visuals to accompany his examples. His examples tend to build upon each other, with many pointing to parallelism, so that way you develop an “all-encompassing” concept of code, as a whole. Most of it made sense, especially because of the wonderful way that Petzold is able to introduce his subject, zoom in, and then zoom back out at the end of the chapter to help draw together all of the concepts. Since I was a complete novice, as I continued to view the various charts and diagrams, some of the terms and ideas were beginning to feel unreal. Was I really grasping these concepts? Did these diagrams and new words really make sense to me or was I just lying to myself? Regardless, I continued to read. I made it a point to continue to read the book, even if I thought the concepts weren’t clicking for me yet.

Finally, I had completed my first read-through of the book. As time passed, I hoped that the concepts Petzold explained and how he explained them would stick in my mind, and I eagerly waited for the day when I would have proof that they did.

HOW THIS BOOK HELPED ME UNDERSTAND FUNDAMENTAL CONCEPTS

I was gifted my first Raspberry Pi from a good friend. As I opened up the beginner’s kit and looked at all of the components, I was overcome with an odd sensation of confusion and understanding. Although I had never seen these parts before in person, I had an idea of their uses and functions. It was in these moments of assembling the Raspberry Pi when I realized that Petzold’s words and diagrams had clicked, because as I connected each piece I could recall familiar sections from the book.

Simply put, reading Petzold’s way of explaining this subject has not only helped me with my approach to computers and programming, but it has helped me intrinsically understand how basic things work, from my automated Glade Air Freshener dispenser, to the phenomenon as to why my light switches invert themselves sometimes.

I had a good feeling when I chose Code as my very first introduction to this subject, and I’m so excited to re-read it again in the future. Already through my Python studying, I find myself recalling sections from Code with a smile on my face. I’m very grateful to have begun my journey with such a wonderfully insightful perspective on this subject, and I’m sure Code will be a book that I continuously revisit and recommend. However, the largest take-away from reading Code for me was witnessing how wonderfully an expert can perceive, understand, and explain a subject by drawing connections to so many different real-life and historical examples. This book is a wonderful look inside the mind of a true technical virtuoso.