[活動] Duckietown小鴨城自走車工作坊(兩天)

上限 20 人。購買全套配件:$9450元。
Raspberry Pi 工作坊候補表單  <==額滿了,填寫候補表單!

Duckietown(小鴨城)源自於 MIT 2.166 自動駕駛車開放課程,使用樹莓派加魚眼相機加上馬達控制板建立一個自走小車(DuckieBot)。

DuckieBot(小鴨車)是在樹莓派上安裝 Ubuntu + ROS(Robot Operating System) 做為自走車的開發架構,使用魚眼鏡頭進行物體辨識,將當前環境根據非線性估計後使用馬達控制板控制左右馬達進行車道跟隨(lane following)。

兩天的活動,讓你由淺入深,從 ROS 介紹到電腦視覺,自動駕駛原理一次學會。

【Duckietown小鴨城自走車工作坊】
目標:學習自動駕駛原理,包括 ROS 使用、電腦視覺與相機校正、非線性估計、物體辨識、投影轉換和車道跟隨一次學會。
時間:2018/09/15-16(六-日) 早上 09:00~下午 18:00
地點:CLBC台北市大安區復興南路一段293號4樓
講師:
1. YC_thumb YC 老師,Robotist。Pioneer in Duckietown。第一屆 ROS.Taipei 2018 年會年協辦,ROS.Taipei 2018年會發表 “I am supposed to build robots!
2. HY_thumb HY 老師,Robotist。Pioneer in Duckietown。Unity, Unreal遊戲引擎專家。新竹Mars團隊, 新竹實驗中學與光武國中STEM教學資深講師。悠遊虛擬與現實間。

9/15(週六)

09:00 – 10:00: 1. Duckiebot環境設定(SSH設定/虛擬機設定)
10:00 – 12:00: 2. 單元測試與ROS介紹與練習(ROS/底盤校正/攝影機讀取)
13:00 – 14:00: 3. 電腦視覺與相機校正(內外參數/OpenCV基礎)
14:00 – 17:30: 4. 自動駕駛原理(一)(非線性估計/光補償校正)

9/16(週日)

09:00 – 10:30: 1. 自動駕駛原理(二)(物體辨識/投影轉換/車道跟隨(1))
10:30 – 12:00: 2. 自動駕駛原理(三)(車道跟隨(2))
13:00 – 17:00: 3. 實地測試

上限 20 人。購買全套配件:$9450元 Raspberry Pi 工作坊候補表單  <==額滿了,填寫候補表單!
包含樹莓派 Pi 3B 必備套件(Pi 3B + 32G SD卡 + 5V/2.5A 電源 + PL2303HXD傳輸線) + 小鴨車材料包(雙層小車、160 度魚眼相機、相機座、Adafruit 馬達驅動板(已焊接)、鋰電池擴充板、2.4G 搖桿、全車螺絲包、USB 轉 TTL、黃色小鴨),不包含午餐。

注意事項:
* 完成付款即完成報名。
* 學員當天需自備筆電,Windows / Linux / Mac 皆可。
* 本活動是進階課程,建議有使用過樹莓派和在上面開發程式的人參加。

更多介紹可以參考:

小鴨城(Duckietown) 一個基於Raspberry Pi和ROS 的開源無人小車專案介紹
from raspberrypi-tw

[進階] 安裝 Raspberry Pi 的 Toolchain

Toolchain 是一套能讓你編譯、連結、除錯程式的軟體,例如 GCCLDGDBAS glibc 等。

假設我們寫了一個 hello.c 的程式要在個人電腦上執行,我們只要打 gcc hello.c 就可以將 hello.c 編譯成 x86 架構的可執行檔。

由於 Raspberry Pi 上的處理器是 ARM 架構的,因此要將同樣的 hello.c 在 Raspberry Pi 執行,必須將程式編譯成 ARM 架構的可執行檔。

我們有兩個選擇,第一是直接在 Raspberry Pi 上編譯。第二是先在我們的個人電腦用 Raspberry Pi 的 toolchain 編譯完成後,再上傳到 Pi。

這裡簡介如何在個人電腦安裝 Raspberry Pi 的 toolchain,以在 ubuntu 上安裝 gcc-linaro-arm-linux-gnueabihf-raspbian 為例。

1. 在個人電腦安裝必要的套件。

sosorry@ubuntu:~$ sudo apt-get install make git-core ncurses-dev

2. 下載最新版的 toolchain。

sosorry@ubuntu:~$ mkdir rpi
sosorry$ubuntu:~$ cd rpi
sosorry@ubuntu:~/rpi$ git clone https://github.com/raspberrypi/tools.git
remote: Reusing existing pack: 17273, done.
remote: Total 17273 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (17273/17273), 311.52 MiB | 343 KiB/s, done.
Resolving deltas: 100% (11698/11698), done.
Checking out files: 100% (15860/15860), done.

3. 安裝 toolchain。安裝方法是將 gcc-linaro-arm-linux-gnueabihf-raspbian 加到環境變數裡。

sosorry@ubuntu:~/rpi$ vi ~/.bashrc
export PATH=$PATH:/home/sosorry/rpi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin   # add this line at the end of file

4. 測試。先開啟一個新的終端機,輸入 arm 後連續按兩次 tab 鍵,如果跑出來一堆像下面的提示表示安裝成功。

arm-linux-gnueabihf-addr2line        arm-linux-gnueabihf-gcc              arm-linux-gnueabihf-gfortran         arm-linux-gnueabihf-objdump
arm-linux-gnueabihf-ar               arm-linux-gnueabihf-gcc-4.7.2        arm-linux-gnueabihf-gprof            arm-linux-gnueabihf-pkg-config
arm-linux-gnueabihf-as               arm-linux-gnueabihf-gcc-ar           arm-linux-gnueabihf-ld               arm-linux-gnueabihf-pkg-config-real
arm-linux-gnueabihf-c++              arm-linux-gnueabihf-gcc-nm           arm-linux-gnueabihf-ld.bfd           arm-linux-gnueabihf-ranlib
arm-linux-gnueabihf-c++filt          arm-linux-gnueabihf-gcc-ranlib       arm-linux-gnueabihf-ldd              arm-linux-gnueabihf-readelf
arm-linux-gnueabihf-cpp              arm-linux-gnueabihf-gcov             arm-linux-gnueabihf-ld.gold          arm-linux-gnueabihf-size
arm-linux-gnueabihf-elfedit          arm-linux-gnueabihf-gdb              arm-linux-gnueabihf-nm               arm-linux-gnueabihf-strings
arm-linux-gnueabihf-g++              arm-linux-gnueabihf-gdbtui           arm-linux-gnueabihf-objcopy          arm-linux-gnueabihf-strip

讓我們實際寫一個 hello.c 並編譯它吧。

sosorry@ubuntu:~/rpi$ vi hello.c
#include <stdio.h>
int main()
{
	printf("hello, world\n");
        return 0;
}

用 Raspberry Pi 的 toolchain 編譯 hello.c。這一步驟稱為交叉編譯(cross-compiling)。

sosorry@ubuntu:~/rpi$ arm-linux-gnueabihf-gcc hello.c -o hello-arm

讓我們看看檔案的資訊,可以看到該檔案是 ARM 的格式。

sosorry@ubuntu:~/rpi$ file hello-arm
hello-arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not stripped

如果我們在 x86 環境下試著執行會發現無法成功。

sosorry@ubuntu:~/rpi$ ./hello-arm 
bash: ./hello-arm: cannot execute binary file

我們把 hello-arm 上傳到我們的 Pi,假設 IP 為 192.168.1.2。

sosorry@ubuntu:~/rpi$ scp hello-arm pi@192.168.1.2:/home/pi
pi@192.168.1.2's password: 
hello-arm                                                                                                                             100% 5447     5.3KB/s   00:00

在我們的 Pi 上執行,看看結果吧。

pi@raspberrypi:~$ ./hello-arm
hello, world

 

常見問與答:

1. 為什麼要在個人電腦上安裝 toolchain?
因為個人電腦的處理速度通常高於 Raspberry Pi ,因此如果要開發比較大的專案(例如編譯核心),建議在個人電腦上處理,才不會等等等等。實務上在嵌入式系統的開發過程中,目標機器通常不會有 toolchain,因此常常會需要先在開發環境上將專案交叉編譯後再燒到目標機器。

2. 為什麼要安裝 gcc-linaro-arm-linux-gnueabihf-raspbian?
因為在 userland README.md 告訴我們的。

This repository contains the source code for the ARM side libraries used on Raspberry Pi. These typically are installed in /opt/vc/lib and includes source for the ARM side code to interface to: EGL, mmal, GLESv2, vcos, openmaxil, vchiq_arm, bcm_host, WFC, OpenVG.

Use buildme to build. It requires cmake to be installed and an arm cross compiler. It is set up to use this one: https://github.com/raspberrypi/tools/tree/master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian

3. 如果個人電腦(主機端)是 64 位元的要裝那個版本的 toolchain?
要使用 tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 目錄下的執行檔,也就是將該路徑加入環境變數即可。