A fellow from PLUG defied me to show a LEGO robot that translates conversation, much like the C3PO protocol droid from Star Wars.
I only had a couple of hours so I decided to copy the Raspsberry Pi approach of using “the Cloud”. Google offers a one year free trial so I registered and tried a few examples on my Ubuntu laptop, amazing what one can do with just a few curl commands!
So, how to use Google Cloud SDK directly from LEGO MINDSTORMS EV3?
Google has a repository for Debian but it doesn’t work with ev3dev – there are no packages for the ARM architecture. But I found someone saying that he managed to install the x86 tar.gz package on his Raspberry Pi so.. why not give it a try? And yes, it really works.
So this is the process to install Google Cloud SDK on EV3 running ev3dev. It was tested with a fresh installation of the latest release available today, “2017-06-09”
robot@ev3dev:~$ Linux ev3dev 4.4.68-20-ev3dev-ev3 #1 PREEMPT Mon May 15 12:45:40 CDT 2017 armv5tejl GNU/Linux
No dependencies needed – just download the most recent of the “Versioned archives” available for download:
wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-158.0.0-linux-x86.tar.gz
Then just extract it and run the install script:
tar -xvf google-cloud-sdk-158.0.0-linux-x86.tar.gz ./google-cloud-sdk/install.sh
The install takes 5 minutes:
Welcome to the Google Cloud SDK! To help improve the quality of this product, we collect anonymized usage data and anonymized stacktraces when crashes are encountered; additional information is available at <https://cloud.google.com/sdk/usage-statistics>. You may choose to opt out of this collection now (by choosing 'N' at the below prompt), or at any time in the future by running the following command: gcloud config set disable_usage_reporting true Do you want to help improve the Google Cloud SDK (Y/n)? N Your current Cloud SDK version is: 158.0.0 The latest available version is: 158.0.0 +------------------------------------------------------------------------------------------+ | Components | +---------------+-----------------------------------+--------------------------+-----------+ | Status | Name | ID | Size | +---------------+-----------------------------------+--------------------------+-----------+ | Not Installed | Cloud Datalab Command Line Tool | datalab | < 1 MiB | | Not Installed | Cloud Datastore Emulator | cloud-datastore-emulator | 15.4 MiB | | Not Installed | Cloud Datastore Emulator (Legacy) | gcd-emulator | 38.1 MiB | | Not Installed | Cloud Pub/Sub Emulator | pubsub-emulator | 21.0 MiB | | Not Installed | gcloud Alpha Commands | alpha | < 1 MiB | | Not Installed | gcloud Beta Commands | beta | < 1 MiB | | Not Installed | gcloud app Java Extensions | app-engine-java | 132.2 MiB | | Not Installed | gcloud app Python Extensions | app-engine-python | 6.4 MiB | | Installed | BigQuery Command Line Tool | bq | < 1 MiB | | Installed | Cloud SDK Core Libraries | core | 6.1 MiB | | Installed | Cloud Storage Command Line Tool | gsutil | 2.9 MiB | | Installed | Default set of gcloud commands | gcloud | | +---------------+-----------------------------------+--------------------------+-----------+ To install or remove components at your current SDK version [158.0.0], run: $ gcloud components install COMPONENT_ID $ gcloud components remove COMPONENT_ID To update your SDK installation to the latest version [158.0.0], run: $ gcloud components update Modify profile to update your $PATH and enable shell command completion? Do you want to continue (Y/n)? Y The Google Cloud SDK installer will now prompt you to update an rc file to bring the Google Cloud CLIs into your environment. Enter a path to an rc file to update, or leave blank to use [/home/robot/.bashrc]: Backing up [/home/robot/.bashrc] to [/home/robot/.bashrc.backup]. [/home/robot/.bashrc] has been updated. ==> Start a new shell for the changes to take effect. For more information on how to get started, please visit: https://cloud.google.com/sdk/docs/quickstarts
Now exit from the SSH session and login again. The SDK commands should be available so let’s configure our environment:
robot@ev3dev:~$ gcloud init
This will take about 6 minutes:
Welcome! This command will take you through the configuration of gcloud. Your current configuration has been set to: [default] You can skip diagnostics next time by using the following flag: gcloud init --skip-diagnostics Network diagnostic detects and fixes local network connection issues. Checking network connection...done. Reachability Check passed. Network diagnostic (1/1 checks) passed. You must log in to continue. Would you like to log in (Y/n)? Y Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&prompt=select_account&response_type=code&client_id=32555940559.apps.googleusercontent.com&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&access_type=offline
Just copy the link in last paragraph and open it on your browser. You will need to login with a valid Google account. Mine was already associated with a project (‘ev3-pd’) because I already started testing the APIs on the laptop so I picked that project but you can also create a new one.
You will get a verification code like this:
6/vzSXbihAPCTeewAazTZo0YqL49qYDFUcuIR0HBDWnvz
Just copy&past it to the last prompt to continue
Enter verification code: 6/vzSXbihAPCTeewAazTZo0YqL49qYDFUcuIR0HBDWnvz You are logged in as: [yourgoogleid@gmail.com]. Pick cloud project to use: [1] ev3-pd [2] Create a new project Please enter numeric choice or text value (must exactly match list item): 1 Your current project has been set to: [ev3-pd]. Do you want to configure Google Compute Engine (https://cloud.google.com/compute) settings (Y/n)? Y Which Google Compute Engine zone would you like to use as project default? If you do not specify a zone via a command line flag while working with Compute Engine resources, the default is assumed. [1] asia-east1-a [2] asia-east1-b [3] asia-east1-c [4] asia-northeast1-b [5] asia-northeast1-c [6] asia-northeast1-a [7] asia-southeast1-b [8] asia-southeast1-a [9] europe-west1-d [10] europe-west1-c [11] europe-west1-b [12] europe-west2-a [13] europe-west2-b [14] europe-west2-c [15] us-central1-c [16] us-central1-f [17] us-central1-a [18] us-central1-b [19] us-east1-c [20] us-east1-b [21] us-east1-d [22] us-east4-a [23] us-east4-b [24] us-east4-c [25] us-west1-a [26] us-west1-b [27] us-west1-c [28] Do not set default zone Please enter numeric choice or text value (must exactly match list item): 9 Your project default Compute Engine zone has been set to [europe-west1-d]. You can change it by running [gcloud config set compute/zone NAME]. Your project default Compute Engine region has been set to [europe-west1]. You can change it by running [gcloud config set compute/region NAME]. Created a default .boto configuration file at [/home/robot/.boto]. See this file and [https://cloud.google.com/storage/docs/gsutil/commands/config] for more information about configuring Google Cloud Storage. Your Google Cloud SDK is configured and ready to use! * Commands that require authentication will use yourgoogleid@gmail.com by default * Commands will reference project `ev3-pd` by default * Compute Engine commands will use region `europe-west1` by default * Compute Engine commands will use zone `europe-west1-d` by default Run `gcloud help config` to learn how to change individual settings This gcloud configuration is called [default]. You can create additional configurations if you work with multiple accounts and/or projects. Run `gcloud topic configurations` to learn more. Some things to try next: * Run `gcloud --help` to see the Cloud Platform services you can interact with. And run `gcloud help COMMAND` to get help on any gcloud command. * Run `gcloud topic -h` to learn about advanced features of the SDK like arg files and output formatting
Since I already activated a service account for my project I already had a JSON file with a private authorization key to use (if you don’t know how to do it look here). I copied it from my laptop as ‘EV3-PD.json’ and defined a path variable for Goggle Cloud SDK to find it when needed:
robot@ev3dev:~$ export GOOGLE_APPLICATION_CREDENTIALS=/home/robot/EV3-PD.json
This key allows us to generate an access token that grants access to Google Cloud APIs for the next 3600 seconds:
robot@ev3dev:~$ gcloud auth application-default print-access-token ya29.ElpnBDIm1MCsz4isiMF6NL3Hc5yzGpkoGr0iJG1sB68DX00ZvkecQaBL-fkviWYq6HVtkezRjg9Vv_lSxJ6Q7XXFRfH-2Gon_Q4H2784wYZkvZox2UfP2ncJJ0Q
And we are now able to use Skynet The Cloud for our most CPU intensive tasks. Next post I will show how to transcript voice to text through Google Cloud Speech API.