就如同各位從開始的夥伴們,你們一定很想快點看到,一台可以裝上雷射LiDAR導航,自主漫遊 + 路徑規劃 + 自主避障 + 影像AI   &^$%^#%%^%^&%^  ~ 等等集合了目前self-driving 前端科技的家用小車八 !! 我們記錄一位工程師,他是如何從開始的學習、蛻變到一位 self-driving developer的過程。

話說,這一開始的動作應該也是記錄摸索的過程,不過,這卻是最真實的、殘酷與慘痛代價的經驗。希望這些記錄可以減少後面跟進的學習者們寶貴的時間。

在此定義初階段的學習標的 :

  • 遠端遙控機器人 
  • LiDAR雷達建地圖
  • 自主導航與避障
  • 路徑規劃   (到這 ~ 基本該會的操作都已經具備了)

1-1、連線準備

使用裝備 : 

  • ACER i5 筆電 win10系統
  • 樹梅派 Pi4 B (2020 年最新版)

測試架構 : 

arduino_servo.png

1-2、上傳程式碼 

小編不再多寫,可參考官網 :

This should open the following code in your IDE:

Toggle line numbers

   1 /*
   2  * rosserial Servo Control Example
   3  *
   4  * This sketch demonstrates the control of hobby R/C servos
   5  * using ROS and the arduiono
   6  * 
   7  * For the full tutorial write up, visit
   8  * www.ros.org/wiki/rosserial_arduino_demos
   9  *
  10  * For more information on the Arduino Servo Library
  11  * Checkout :
  12  * http://www.arduino.cc/en/Reference/Servo
  13  */
  14 
  15 #if defined(ARDUINO) && ARDUINO >= 100
  16   #include "Arduino.h"
  17 #else
  18   #include <WProgram.h>
  19 #endif
  20 
  21 #include <Servo.h> 
  22 #include <ros.h>
  23 #include <std_msgs/UInt16.h>
  24 
  25 ros::NodeHandle  nh;
  26 
  27 Servo servo;
  28 
  29 void servo_cb( const std_msgs::UInt16& cmd_msg){
  30   servo.write(cmd_msg.data); //set servo angle, should be from 0-180  
  31   digitalWrite(13, HIGH-digitalRead(13));  //toggle led  
  32 }
  33 
  34 
  35 ros::Subscriber<std_msgs::UInt16> sub("servo", servo_cb);
  36 
  37 void setup(){
  38   pinMode(13, OUTPUT);
  39 
  40   nh.initNode();
  41   nh.subscribe(sub);
  42   
  43   servo.attach(9); //attach it to pin 9
  44 }
  45 
  46 void loop(){
  47   nh.spinOnce();
  48   delay(1);
  49 }

程式碼扼要說明 : 

11行 : 建立一個callback 函式 servoCb (被呼叫後立即返回),該函式是給subscriber使用的,函式的寫法是固定的, type of message is std_msgs::UInt16 ,message name 是 toggle_msg。這個callback函式很單純沒有參考回傳的內容,只是很單純地每次收到一個message,Arduino就會閃爍或熄滅一次LED。

15行 : 建立一個接下來可執行的 publisher或 subscriber。在這裡,我們建立一個subscriber,topic name 是 “servo” , type 是 std_msgs::UInt16。對於訂閱(subscriber)者,必須記住根據訊息(message)來訂閱。最後的兩個參數, Its two arguments are the topic it will be subscribing to and the callback function it will be using.

接著,執行程式

Now, launch the roscore in a new terminal window:

roscore

Next, run the rosserial client application that forwards your Arduino messages to the rest of ROS. Make sure to use the correct serial port: (要注意喔)

rosrun rosserial_python serial_node.py /dev/ttyACM0

   

再開一個 terminal,

rostopic pub servo std_msgs/UInt16  <angle>

 

就如同各位從開始的夥伴們,你們一定很想快點看到,一台可以裝上雷射LiDAR導航,自主漫遊 + 路徑規劃 + 自主避障 + 影像AI   &^$%^#%%^%^&%^  ~ 等等集合了目前self-driving 前端科技的家用小車八 !! 我們記錄一位工程師,他是如何從開始的學習、蛻變到一位 self-driving developer的過程。

話說,這一開始的動作應該也是記錄摸索的過程,不過,這卻是最真實的、殘酷與慘痛代價的經驗。希望這些記錄可以減少後面跟進的學習者們寶貴的時間。

在此定義初階段的學習標的 :

  • 遠端遙控機器人 
  • LiDAR雷達建地圖
  • 自主導航與避障
  • 路徑規劃   (到這 ~ 基本該會的操作都已經具備了)

我們就從 “ROSSerial_Arduino測試 (ROS通訊點亮Arduino LED實驗)” 開始吧 ! 

1-1、Arduino IDE安裝與設定 

 

在解壓縮後的資料夾開啟終端機。輸入:
$sudo sh install.sh

安裝好後,最後會在桌面上看到Arduino的圖案。

1-2、連線架構

使用裝備 : 

  • ACER i5 筆電 win10系統
  • 樹梅派 Pi4 B (2020 年最新版)

測試架構 : 

  • 使用PC (VM)環境架設MASTER 並運行 Publisher 這兩個nodes
  • Arduino 燒錄roserial (ros_lib)的接收程式,控制LED 

筆電中的VM環境再貼一次 :

1-3. 介紹ROS Serial

參考官網 。若是你想用Arduino來做ROS的通訊模組 (也就是作為一個ROS nodes),包括publish, subscribe ROS的messages, publish TF transforms 和 get the ROS system time。 rosserial provides a ROS communication protocol that works over your Arduino’s UART.  rosserial_arduino package, you can use ROS directly with the Arduino IDE. 喔!  rosserial 這個函式庫下面有許多packages,目的就是在不同硬體系統中,可以容易地運行一個ROS node。

1-4. 安裝軟體

有兩步驟 : 先安裝自己的ROS 工作站 ,再安裝 ros_lib 在自己的Arduino IDE環境中。 

1-4-1.  安裝自己的ROS 工作站 

官網有兩種方式,一個是安裝編譯好的binaries code,另一種是從source code先編譯再安裝,我們選擇第一種(官方建議的)。

You can install rosserial for Arduino by running:

sudo apt-get install ros-melodic-rosserial-arduino
sudo apt-get install ros-melodic-rosserial

你可以把 melodic 換成你自己的ros 版本如 indigo 等

再來到 /libraries 下面檢查是否事先有ros_lib資料夾,若是有先delete掉。

  cd ~/Arduino/libraries
  rm -rf ros_lib
  rosrun rosserial_arduino make_libraries.py .

以上完成後,就可在 /ibraries 下面找到 ros_lib的資料夾

開啟Arduino IDE ,檢查以下是否存在。

arduino_ide_examples_screenshot.png

PS : 目前,另一種更簡單的作法,就是如果你不想花功夫針對你的ROS工作站去做完全安裝,你只是要可以在Arduino上跑ROS的通訊協定,你可以採用以下 : 

*Note: Currently you can install the Arduino libaries directly in the Arduino IDE. Just open the Library Manager from the IDE menu in Sketch -> Include Library -> Manage Library. Then search for “rosserial”. This is useful if you need to work on an Arduino sketch but don’t want to setup a full ROS workstation.

1-5.  測試 Arduino 的 Hello World (example publisher) 

參考官網

先燒錄Arduino程式,第一次可能會出現 ”  can’t open device “/dev/ttyS0″: Permission denied  ” ; 處理方式,

sudo usermod -a -G dialout <username>  , 其中 username 用你Linux的帳號,我自己是 zanrobot ; 完成後先logout出系統,再 login一次。此時,再燒錄Arduino時就不會有問題。

接著當以下 : 

Now, launch the roscore in a new terminal window:

roscore

Next, run the rosserial client application that forwards your Arduino messages to the rest of ROS. Make sure to use the correct serial port:

rosrun rosserial_python serial_node.py /dev/ttyUSB0

此時,又會出現 

[ERROR] [1580567065.273146]: Error opening serial: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: ‘/dev/ttyACM0’

此時,處理一下 serial port權限的問題,

sudo chmod 666 /dev/ttyACM0

測試最後的結果,如下 : 在 VM上的node,可以收到Arduino 發佈出的文字訊息 “hello world” ! 

 

就如同各位從開始的夥伴們,你們一定很想快點看到,一台可以裝上雷射LiDAR導航,自主漫遊 + 路徑規劃 + 自主避障 + 影像AI   &^$%^#%%^%^&%^  ~ 等等集合了目前self-driving 前端科技的家用小車八 !! 我們記錄一位工程師,他是如何從開始的學習、蛻變到一位 self-driving developer的過程。

話說,這一開始的動作應該也是記錄摸索的過程,不過,這卻是最真實的、殘酷與慘痛代價的經驗。希望這些記錄可以減少後面跟進的學習者們寶貴的時間。

0-1、如何接近ROS ? 

在此先定義這個初階段的學習標的 :

  • 遠端遙控機器人
  • LiDAR雷達建地圖
  • 自主導航與避障
  • 路徑規劃   (到這 ~ 基本該會的操作都已經具備了)

我們就從 “ROS遠端遙控機器人” 開始吧 !

0-2、遠端遙控之系統架構

使用裝備 :

  • ACER i5 筆電 win10系統
  • 樹梅派 Pi4 B (2020 年最新版)

測試架構 :

筆電端 : 經過資料蒐集與無數次的誤打誤撞後,決定灌 VM 走 ROS Melodic Morenia。參考以下

官網資訊說明 Melodic 是最新持續update。

根據官網說法,

ROS Melodic installation instructions

These instructions will install the ROS Melodic Morenia distribution, which is available for Ubuntu Artful (17.10), Bionic (18.04 LTS) and Debian Stretch, among other platform options.

0-3、win10 筆電安裝VM (虛擬機)進行ubuntu環境安裝

我們決定先用PC安裝VM環境,如下 :

到Ubuntu官網下載 18.04LTS 印像檔 (ubuntu-18.04.3-desktop-amd64.iso ) , 約2.3G 下載時間約需 40分。

到VM中,點選 “Create a New Virtual Machine” ,一個按鍵可以安裝完成Ubuntu 18.04系統。不過系統安裝時間也約需40分鐘。

0-4、安裝 ROS Melodic Morenia 

請到ROS官網,按照步驟操作 :

1. Configure your Ubuntu repositories

按照下面的選項, “source code” 要勾一下,下載地點可依據下拉選單,選擇 “Select Best Server”,系統會自動去測試哪個server下載比較快。

Software Sources.png

選完下載伺服器後,點 “close”,接著會問是否要更新清單,選 “Reload” 來更新倉庫清單。

Select “Close” to save your changes. A dialog box should appear, asking whether you’d like to update the list of repositories. Select “Reload” to update the list.

Repobuttons.png

接著在 Alt+Ctrl照做以下動作。 refer to : http://wiki.ros.org/melodic/Installation/Ubuntu

Setup your sources.list

Setup your computer to accept software from packages.ros.org.

  • sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Mirrors

Source Debs are also available

Set up your keys

  • sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

If you experience issues connecting to the keyserver, you can try substituting hkp://pgp.mit.edu:80 or hkp://keyserver.ubuntu.com:80 in the previous command.

Alternatively, you can use curl instead of the apt-key command, which can be helpful if you are behind a proxy server:

  • curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -

Installation

First, make sure your Debian package index is up-to-date:

  • sudo apt update

There are many different libraries and tools in ROS. We provided four default configurations to get you started. You can also install ROS packages individually.

In case of problems with the next step, you can use following repositories instead of the ones mentioned above ros-shadow-fixed

    • Desktop-Full Install: (Recommended) : ROS, rqtrviz, robot-generic libraries, 2D/3D simulators and 2D/3D perception

      • sudo apt install ros-melodic-desktop-full

        or click here

      Desktop Install: ROS, rqtrviz, and robot-generic libraries (~ 我們這裡用這個 ~ 耗時30分) 

      • sudo apt install ros-melodic-desktop

        or click here

      ROS-Base: (Bare Bones) ROS package, build, and communication libraries. No GUI tools.

      • sudo apt install ros-melodic-ros-base

        or click here

      Individual Package: You can also install a specific ROS package (replace underscores with dashes of the package name):

    • sudo apt install ros-melodic-PACKAGE

      e.g.

      sudo apt install ros-melodic-slam-gmapping

To find available packages, use:

apt search ros-melodic

Environment setup

It’s convenient if the ROS environment variables are automatically added to your bash session every time a new shell is launched:

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

To install this tool and other dependencies for building ROS packages, run:

sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

Initialize rosdep

Before you can use many ROS tools, you will need to initialize rosdeprosdep enables you to easily install system dependencies for source you want to compile and is required to run some core components in ROS. If you have not yet installed rosdep, do so as follows.

sudo apt install python-rosdep

With the following, you can initialize rosdep.

sudo rosdep init
rosdep update

到此為止,ROS算是安裝完成了。

可以試試看以下 roscore 命令,得到正確的回應。

 

本文是利用Arduino系列的NodeMCU Lua (Esp8266) wifi 模組來製作簡單的App Inventor 手機程式,並用按鈕(Button)和語音辨識的方式來控制LED或電燈開關。 更令人興奮的是硬體材料費不到 NT200 !! 以下整理3 hr上課內容給各位參考,以搭配您的課程需要。

This image has an empty alt attribute; its file name is 1112.jpg

(for 3 hr in class only)

This image has an empty alt attribute; its file name is image-15-1024x768.png

成果展示 (智慧語音小禮盒)

1. 步驟說明

課程規劃如下 :
  1. 第一小時 : AIoT、Arduino與App Inventor 簡介與程式環境設定
  2. 第二小時 : 快速瀏覽Arduino程式並進入App Inventor開發
  3. 第三小時 : App Inventor程式編輯與上傳自己製作的App
第一小時課程 : AIoT介紹 AIoT 即AI (Artificial Intelligence)+ IoT (Internet of Things) 的簡稱,指人工智慧技術(AI)與物聯網(IoT)在實際應用中的落地融合 。本課程是將AIoT實際應用在智慧家庭(Smart Home)的情境中,如下圖

智慧家庭應用系列
以下影帶看完後,會對智慧家庭的應用有很清楚的概念
https://www.youtube.com/watch?v=NjYTzvAVozo
AI (人工智慧)則是現今科技界的響叮噹的學習標的,目前應用在生活中常見的AI應用 包括影像辨識 (人臉辨識)和語音辨識,本課程以語音辨識的開發應用作為主題之一。

相關圖片

人臉辨識案例
以上學習體驗可參考

微軟(Microsoft face API)人臉辨識A應用網站

。 至於語音辨識的應用,我們是連結google 雲端的免費語音服務系統,結合App Invemtor的程式去開發自己的功能。

常用的google 雲端語音服務

「google voice recognition api」的圖片搜尋結果

google 語音服務與程式開發的介面 vs 本文最上方的系統架構圖
Arduino 簡介 發展至今約10年的時間,已是現今所有領域的研究者、開發者和學習者的最常用工具之一,可以快速地開發物聯網、感測器、馬達控制、生醫訊號等等。 本文選用的是Arduino + Wifi 的非常廣泛的ESP8266系列之NodeMCU控制器。

Arduino Board

標準Arduino UNO板

「nodemcu」的圖片搜尋結果

NodeMCU (Esp8266)晶片控制器
Arduino 環境 安裝與設定,請參考

前一篇文章

,但是本次課程僅3Hr 所以學習目標先放在App Inventor的編輯與製作。既然時間有限,我們採用倒吃甘蔗的作法,先體驗一下程式執 第二小時課程 : 安裝與設定
  1. 接上LED與確認NodeMCU連上電腦 : 請用雙母頭的杜邦線,一端接在NodeMCU的G (接地)角,另一端接在D1 腳位。LED接角要特別注意長腳接(D1),短腳接 (G)

LED長腳接(D1),短腳接 (G) ; 我們省略了電阻串接在長腳端
上述接線仔細檢查無誤後,取出 micro USB傳輸線,一端接上電腦,一端接上NodeMCU控制器。
2. 燒錄Arduino程式 : 這個步驟這裡先不做,開課必須先將程式燒錄進去Arduino。 燒錄方法可

參考

3. 設定 NodeMCU wifi : 這個步驟這裡先不做我們的目的是讓每位學員的NodeMCU都能正確連上自己的手機熱點。開課前須先將每一個NodeMCU設定好wifi 的內容,包括欲連線的SSID和密碼。詳細動作

可參閱

4. 安卓手機程式APK(安裝執行檔,

下載連結

),或用以下QR code得到網址並下載

下載後請打開手機的外部應用程式安裝的權限,進行安裝。成功後會得到以下畫面。

手機App 截圖
5. 連線使用 : 當手機熱點打開後(熱點設定需同前面步驟3. ),按下APP的 “掃瞄”按鈕,若是在 “遠端IP”有出現另一組 192.168.xx.xx 的IP,那麼代表設定都正確,NodeMCU連上你自己的手機熱點了。 6. 操作說明 : 按下 “廚房燈開”, “廚房燈關” 等按鈕,會看到LED亮或滅。此外,按下”語音辨識”按鈕後,說出與上面 “廚房燈開”, “廚房燈關” 等按鈕一樣的文字,也可達到同樣的效果。 第三小時課程 : App Inventor程式講解
  1. 註冊google
  2. 進入App Inventor 2 編輯環境 。 文字閱讀不如看影帶教學,可參考 YouTube “MIT App Inventor 入門教學 – 按鈕文字及安裝執行” 。
  3. 如何手機安裝MIT AI2 Companion程式 ,進行編譯與APK製作,可參考YouTube “手機安裝MIT AI2 Companion程式
  4. 下載並匯入範例專案。

點選右上角的全部下載符號

再到自己的硬碟選取剛剛下載的 .aia檔案並匯入
5. 程式編輯、編譯與打包apk的體驗
5-1. 畫面編排練習 – 底圖更新和應用程式名稱修改

設計自己的背景圖片並更換,同時,選擇 “標題”修改App的名稱
5-2. 修改好後,準備編譯你的程式 :

選擇,連線 – AI Companion

畫面會出現QR code,準備用手機的App來掃描
打開手機的 “MIT AI2 Companion” app應用程式

相關圖片

選取 “scan QR code” ,並進入程式編譯與載入手機的階段
5-3. 程式設計練習 – 修改按鈕、語音辨識命令更動

更改上述按鈕的名稱與語音辨識指令,例如改成 “客廳開燈”

進入 “程式設計”,修改圖示圈選的對應文字
重複 5-2動作,編譯體的程式看看結果如何 ? 5-4. 製作一個新的開關按鈕 (這部分依據時間保留是否進行) 首先修改畫面新增按鈕

在畫面編排中,先安插新的一行,以便放入新的按鈕功能
進入程式設計,複製積木 ,然後修改傳送到Arduino程式的命令

進入Arduino程式,新增對應的程式碼,並燒入新的程式

以上動作,Happy Ending ~ 。