---
# System prepended metadata

title: Raspberry 4B 安裝 ubuntu18.04 與 ROS 流程

---

# Raspberry 4B 安裝 ubuntu18.04 與 ROS 流程
#### 使用WindowsPC、2023/06/03最後更新
## 準備硬體設備：
1、	Raspberry 4B 開發板一塊
2、	螢幕(要能轉接到Raspberry 4B 開發板 micro HDMI接頭)
3、	鍵盤(接Raspberry 4B 開發板 USB port)
4、	Windows系統 PC一臺
5、	讀卡機(接Windows系統PC USB port)
## 準備軟體：
1、	Raspberry官方燒錄工具-“Raspberry Pi Imager”
2、	Ubuntu 18.04映像檔(https://github.com/TheRemote/Ubuntu-Server-raspi4-unofficial/releases)。請下載server版本的.xz壓縮檔案。下載後記得”解壓縮”後才會得到.img映像檔案。P.S.這裡是下載V28版本ubuntu-18.04.4-preinstalled-server-arm64+raspi4.img.xz，解壓縮以後得到ubuntu-18.04.4-preinstalled-server-arm64+raspi4.img映象檔。
3、	最新版本的Respberry 4B韌體(https://github.com/raspberrypi/rpi-firmware)。請直接下載zip檔到電腦後解壓縮。這些檔案是用來替換Respberry 4B安裝ubuntu18.04後的不相容檔案。

## 大致分為以下三步驟：
1、安裝ubuntu 18.04
2、設定ubuntu 18.04 server wifi 並連上網路
3、在ubuntu18.04上安裝ROS Melodic Morenia

## 1、安裝ubuntu 18.04
將讀卡機接上Windows PC，將SD插入讀卡機，接著利用官方的SD燒錄軟體“Raspberry Pi Imager”將ubuntu-18.04.4-preinstalled-server-arm64+raspi4.img映像檔燒錄至SD卡。
注意!使用Raspberry Pi Imager軟體燒錄時，不要在設定中選擇“配置WIFI“。可能導致後續流程有變。

接下來將SD卡插入Raspberry 4B開發板並開機，正常來說會開機失敗，但失敗畫面上會提示是哪些檔案不相容所導致。
這裡到的狀況提示start4.elf is not compatible。

將Raspberry 4B開發板下電後，把SD卡拔除並插回Windows PC的讀卡機，根據系統提示的不相容檔案，從之前下載的Respberry 4B最新版韌體中，以相應名稱的檔案覆蓋燒錄了ubuntu18.04的SD卡片的system-boot磁碟中的檔案。
注意!!每提示一個檔案不相容，要同時替換掉兩個檔案，規則如下：
如果提示start*.elf不相容  則須同時替換start*.elf與fixup*.dat兩個檔案。

例如提示為start4.elf is not compatible，則要從最新的韌體中複製start4.elf與fixup4.dat兩個檔案，覆蓋掉SD卡system-boot磁碟中的這兩個同名檔案。

將替換掉檔案的SD卡插回Raspberry 4B開發板並開機，如果還有提示其他不相容檔案則依序以最新韌體內檔案替換。
P.S. 實際測試時只替換了start4.elf與fixup4.dat就可順利進入登入畫面。

================================================================
安裝ubuntu 18.04之參考網頁
https://blog.csdn.net/JifengZ9/article/details/124314080

================================================================

## 2、設定ubuntu 18.04 server wifi 並連上網路(P.S.Raspberry4B已內建網路卡並可連接2.4Ghz與5Ghz wifi故無需再外接USB無線網路卡)
### (1)首次進入ubuntu的預設帳號密碼：
Username: ubuntu
Password: ubuntu
輸入後ubuntu18.04會要求更改密碼，第一次要輸入舊密碼(ubuntu)，第二次輸入新密碼，第三次重複輸入一次新密碼，即可更改完成並登入。登入後開始設定wifi。
首先先確認要連線的wifi之SSID與Password。確認提供wifi的ap使用dhcp模式(以下方法以該條件為前提進行設定)。

### (2)設定ubuntu 18.04 server wifi 並連上網路
在ubuntu中設定/etc/network/interfacs與/etc/wpa_supplicant/wpa_supplicant.conf兩個檔案。大致來說Interface檔案內會設定無線網路連線方式，wpa_supplicant.conf檔案則用來設定要連接的wifi熱點資訊(主要包含SSID名稱與PSK密碼)。

#### A.先確認wlan0 (無線網路卡)是否開啟
使用ifconfig指令，看是否會列出eth0、io以及wlan0的資訊。如果只有前兩項(eth0與io資訊)則代表wlan0未開啟，請用以下指令開啟wlan0網卡介面：
```shell=
udo ifconfig wlan0 up
```
P.S.正常應該不會開啟，需手動啟動。

#### B.設定 /etc/network/interfaces
```shell=
sudo nano /etc/network/interfaces
```
開啟interface檔案，在當中輸入以下指令並存檔離開(注意避免輸入錯誤)

```shell=
source-directory /etc/network/interfaces.d
auto wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
```

#### C.設定 /etc/wpa_supplicant/wpa_supplicant.conf
```shell=
***$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf***
```
開啟wpa_supplicant.conf檔案後在當中輸入以下指令並存檔離開

```shell=
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
#country=TW #國碼，這行不一定要加
network={
ssid="WIFI名稱"
psk="WIFI密碼"
}
```
#### D.使用以下指令確認是否可連線
```shell=
sudo wpa_cli -i wlan0 reconfigure
```
正常來說應該會報以下錯誤提示
<font color="red">*Failed to connect to non-global ctrl_ifname: (null)  error: No such file or directory*</font>
此時可使用以下指令修復(該指令詳細意義可以再自行查詢)

#### E.關閉所有使用中的wpa_supplicant
```shell=
sudo killall wpa_supplicant
```

#### F.重新讀取wpa_supplicant.conf設定
```shell=
sudo wpa_supplicant –B –c /etc/wpa_supplicant/wpa_supplicant.conf –i wlan0 –Dwext
```

#### G.完成以上步驟後將Raspberry 4B開發板重開機
```shell=
sudo reboot
```

#### H.重開機並登入後，重新開啟wlan0介面
```shell=
sudo ifconfig wlan0 up
```

#### I.執行以下指令確定eth0、io與wlan0都有被列出
```shell=
ifconfig
```

#### J.再次執行以下指令確認是否可連線
```shell=
sudo wpa_cli -i wlan0 reconfigure
```
如果出現
<font color="red">*OK*</font>
代表成功連上熱點或WAP了

#### K.執行以下指令確認是否可連線
```shell=
sudo wpa_cli reconfigure
```
如果出現
<font color="red">*Selected interface ‘wlan0’
OK*</font>
代表成功

#### L.連上特定的wifi熱點
```shell=
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
```
(最後的&符號意思為將該命令掛到後臺運行.若執行命令後出現CONNECTED,說明啟動成功,若出現CHANGE或REJECT或其他的,說明啟動失敗.)

#### M.向DHCP Server索取IP
```shell=
sudo dhclient wlan0
```

#### N.此時Raspberry 4B應成功連上wifi，後續便可執行與網路相關的操作。
建議可以下面兩指令執行相關更新
```shell=
sudo apt-get update
sudo apt-get upgrade
```


### 重新開啟raspberry 4 pi時，若wifi熱點資訊不變，則以dhcp方式連上wifi熱點僅需以下步驟：
#### A.開啟wpa_supplicant.conf，確認wifi熱點資訊是否正確。
```shell=
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
```
#### B.開啟無線網路卡介面
```shell=
sudo ifconfig wlan0 up
```
#### C.連上特定wifi熱點(假設wpa_supplicant.conf內熱點資訊與上次連線相同)
```shell=
sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf &
```

#### D.獲取ip地址
```shell=
sudo dhclient wlan0
```

================================================================
連線wifi參考網頁
https://home.gamer.com.tw/creationDetail.php?sn=4398337
https://blog.csdn.net/u010299133/article/details/105823339

================================================================

## 3、在ubuntu18.04上安裝ROS Melodic Morenia
### (1)	確保wifi已成功連線：
重新開啟raspberry 4 pi時，若wifi熱點資訊不變，則以dhcp方式連上wifi。
### (2)	設置sources.list
```shell=
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
```
### (3)	設置密鑰
```shell=
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
```
P.S.如果有掛代理伺服器導致執行失敗，也可嘗試以下命令：
```shell=
$ curl –sL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
```
### (4)	安裝ROS
#### A.系統更新至最新
```shell=
sudo apt update
```
#### B.安裝ROS完整版
```shell=
sudo apt install ros-melodic-desktop-full
```
也可以安裝其他版本
P.S.1.也可以安裝ROS標準版
```shell=
sudo apt install ros-melodic-ros-base
```
P.S.2.安裝ROS其他套件
$ sudo apt install ros-melodic-PACKAGE (***PACKAGE為其他套件的名稱***)例如：
```shell=
sudo apt install ros-melodic-slam-gmapping
```
P.S.3.尋找其他可供安裝的ROS套件
```shell=
apt search ros-melodic
```
#### B-1 若執行步驟B出現錯誤提示
<font color="red">*unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend) is another process using it?*</font>
請輸入以下三行指令，刪除相關檔案後即可重新安裝ros：
```shell=
sudo rm /var/lib/dpkg/lock-frontend
sudo rm /var/lib/dpkg/lock
sudo rm /var/cache/apt/archives/lock
```
#### C.安裝並初始化rosdep+
```shell=
sudo apt-get update
sudo apt-get install python-rosdep
sudo rosdep init
rosdep update
```
#### D.初始化環境變數
```shell=
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
```
#### E.安裝其他常用ROS套件
```shell=
sudo apt install python-rosinstall python-rosinstall-generator python-wstool
```
================================================================
安裝ROS Melodic Morenia參考網頁
https://blog.csdn.net/virtue333/article/details/52820407
https://zhuanlan.zhihu.com/p/126538251

================================================================
