「RPi2啊派兔#07」手動安裝 ROS indigo 在Raspberry Pi 2 Raspbian Jessie 上 step-by-step 學習筆記 教學

Standard

事前準備
參考「RPi2啊派兔#01」~「RPi2啊派兔#06」
https://shannon112.blogspot.tw/search/label/RPi2%E5%95%8A%E6%B4%BE%E5%85%94

開始吧!
這篇主要是跟著網站的tutorial走
然後command在跑的時候就來網誌這邊紀錄一下
Installing ROS Indigo on the Raspberry Pi
http://www.robopgmr.com/?p=3993
這篇tutorial英文看不太不懂沒關係,跟著步驟code複製貼上即可
以下是所有用到的command(Jessie版)

但是重點是我是用這個方法在Raspbian上最後沒有成功安裝ROS
因為在 3.3 Build the workplace
的第一行指令一直跑不過
再加上這整套坐下來會花非常多時間網路上有人說9hr+
我個人也是花了一整個晚上至少5hr+包含等待時間跟debug時間都搞不定
所以後來我轉用另一個快速的方法,詳見另一篇教學,結果有成功喔~
「Raspberry Pi 2」使用 Ubuntu + ROS indigo image 快速建立有ROS環境的作業系統 免step-by-step

2.1 Setup ROS Repositories
$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu jessie main" > /etc/apt/sources.list.d/ros-latest.list'
$ wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get upgrade

2.2 Install Bootstrap Dependencies
$ sudo apt-get install python-pip python-setuptools python-yaml python-distribute python-docutils python-dateutil python-six
$ sudo pip install rosdep rosinstall_generator wstool rosinstall

2.3 Initializing rosdep
$ sudo rosdep init
$ rosdep update

3.1 Create a catkin Workspace
$ mkdir ~/ros_catkin_ws
$ cd ~/ros_catkin_ws
ROS-Comm: (recommended) ROS package, build, and communication libraries. No GUI tools.
$ rosinstall_generator ros_comm --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-ros_comm-wet.rosinstall
$ wstool init src indigo-ros_comm-wet.rosinstall

3.2.1 Unavailable Dependencies
Following packages are not available for Raspbian:
Raspbian Jessie: collada-dom-dev
The following packages are needed for each ROS variant:
Ros_Comm: libconsole-bridge-dev, liblz4-dev

$ mkdir ~/ros_catkin_ws/external_src
$ sudo apt-get install checkinstall cmake
$ sudo sh -c 'echo "deb-src http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi" >> /etc/apt/sources.list'
$ sudo apt-get update
libconsole-bridge-dev:
$ cd ~/ros_catkin_ws/external_src
$ sudo apt-get build-dep console-bridge
$ apt-get source -b console-bridge
$ sudo dpkg -i libconsole-bridge0.2*.deb libconsole-bridge-dev_*.deb
liblz4-dev:
$ cd ~/ros_catkin_ws/external_src
$ apt-get source -b lz4 //這條跑了非常非常久
$ sudo dpkg -i liblz4-*.deb

3.2.2 Resolving Dependencies with rosdep
$ cd ~/ros_catkin_ws
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie

3.3 Building the catkin Workspace
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo
$ source /opt/ros/indigo/setup.bash
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc

4.2 Maintaining a Source Checkout
$ cd ~/ros_catkin_ws
$ rosinstall_generator ros_comm ros_control joystick_drivers --rosdistro indigo --deps --wet-only --exclude roslisp --tar > indigo-custom_ros.rosinstall
$ wstool merge -t src indigo-custom_ros.rosinstall
$ wstool update -t src
$ rosdep install --from-paths src --ignore-src --rosdistro indigo -y -r --os=debian:jessie

Debug

問題一:
Should the compilation fail with an "internal compiler error", it may be because you're out of memory. A quick fix for this is to add swap space to the Pi and recompile.
更改swap
http://raspberrypimaker.com/adding-swap-to-the-raspberrypi/

問題二:
$ sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/indigo
error
[175/187]
<== Failed to process package 'urdf':
參考:http://answers.ros.org/question/238484/ros-installation-on-rpi-failed-to-process-package-urdf/

$ sudo apt-get install liburdfdom-dev
然後發現有dependence的問題
$ sudo apt-get remove libconsole-bridge-dev
再一次
$ sudo apt-get install liburdfdom-dev

「RPi2啊派兔#04」查詢IP 與 連線狀態 透過無線網卡 使用SSH 遠端操作 教學

Standard

A、SSH的使用
SSH的使用非常簡單,通常在Linux 或 Mac都是內建的不用再apt-get,
大前提是你要先確定你和你要連的裝置在同一個網域,也就是連同一個wifi
然後就只有一行
$ ssh user@192.168.1.1 -p 26
user打你要ssh進去的使用者
@後面接那個使用者的IP位置
如果有port number的話 -p 後面接port number
如果是進去另一個電腦的話通常是沒有port number
$ ssh user@192.168.1.1
但如果是進去嵌入式裝置通常會沒有使用者名稱
$ ssh @192.168.1.1 -p 26



這是實際進去的畫面,一開始在你自己的電腦
shannon@Shannons-MBP:~$
第一行用ssh
第二行會跳出叫你打密碼
然後會跳出關於你ssh進去的系統的資訊
然後你的command line就換成了
ubuntu@ubuntu:~$
代表你已經在那台電腦的command line了

troubleshooting
有的時候第一次ssh到新的ip位置
terminal會跳出下圖中的情況
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!



解法如下,詳細請看這篇的第5點


B、查詢IP與連線狀態
然後這些註解是憑我的理解拉,有的沒查資料,只是看她output判斷
先介紹兩大指令

$ iwconfig
看看網路的的狀態,看看這個裝置上的連網裝置的編號與狀態
lo 好像是一定會有的
eth0, eth1 .... 是有線網路的狀態,虛擬機上的網路也是看這個,跟主機共用網路
wlan0, wlan1 ... 是無線網路,像是網卡的狀態
bridge0, bridge100 ... 也是有線網路的狀態
en0, en1 ... 也是無線網路狀態
想對iwconfig裡面的描述有更深的了解可以參考:

$ ifconfig
查看ip位置的好幫手
因為他會把所有上面提到的那些都列出來,所以最好先知道你要看的是哪項
不過不知道也沒關係,因為真正連上的只有一種,所以應該只有一個有提到ip位置

像這個情況是用wifi連網就看en開頭的,然後會看到有一行是inet,就是那行ip=192.168.1.36


然後這是在虛擬機上查ip,就看eth0,一樣是inet那行,ip=10.211.55.7


然後以下是一些常用指令:(多為使用於Raspbian上,使用在Ubuntu的在文章後段)
$ lsusb //看看USB孔接了什麼東西,看看有沒有讀到網卡,決定要不要裝驅動
$ iwconfig wlan0 //只看無線網路wlan0的部分
$ ifconfig wlan0 //只看無線網路wlan0的部分
$ sudo ifdown wlan0 //關閉wifi
$ sudo ifup wlan0 //開啟wifi

$ sudo ifconfig wlan0 up //開啟wifi
$ sudo iwlist wlan0 scan //掃附近有哪些wifi
$ sudo vim /etc/wpa_supplicant/wpa_supplicant.conf 
//打開.conf檔,裡面紀錄你要連的 wifi AP,他就會自動連上,這個部分可以參考之前連上的wifi是怎麼寫的

C、使用無線網卡

一、確認一下網卡型號
ex: 網卡型號 DWA-140 (Version B2)
如果是系統是Raspbian的話以下網址是有支援的清單,ctrl+F DWA-140
http://elinux.org/RPi_USB_Wi-Fi_Adapters



二、先插上去看看
對,其實不管第一步是怎麼樣,
先插上去看看就知道了,
如果燈有亮,代表有在運作,系統已經有它的驅動程式了,所以之後就輕鬆了
如果燈沒亮,代表沒有裝驅動程式要把你的型號拿去google一下,或是系統沒有打開wifi功能

1.如果是 Raspbian:
插上去default就會把pi的wifi開啟,如果你手動關閉pi的wifi那網卡的燈也會熄掉
建議使用方法是先接螢幕或是用有線,開機後到桌面,
再插上網卡,看看右上角的wifi有沒有在運作,如果沒打開就把它打開
然後就可以選擇wifi加入摟~




ifconfig一下自己的ip,看wlan0的


然後回到我們的筆電ssh,成功~


2.如果是 Ubuntu14.04 LTS 的話(有GUI):
開機登入桌面後,跟Raspbian一樣右上角有wifi的狀態點下去
如果你到這一部已經成功,看到一堆wifi被掃出來的話,那恭喜你已經可以用網卡連wifi了


如果發現什麼東西都沒有的話那就要調個設定,看下去吧~
點選Preferences
然後會看到Wireless interface跟Wired interface
通常default設定會是wlan0跟eth0
但根據你插不同的網卡或是網路線是可能會改變的,可以透過在terminal打
ifconfig

iwconfig
就能看到目前RaspberryPi連接的網路裝置的名字,我是wlan1, eth1
因此把預設的0改成1,再Refresh一下,就搜尋的到wifi摟~


然後也可以設定個自動連某個wifi或是使用static ip


3.如果是 Ubuntu14.04 LTS 的話(無GUI):
法一:

參考解法來源:https://askubuntu.com/questions/522842/ubuntu-14-04-connect-to-a-wifi-network-using-command-line
直接使用command line
1.先看看你的網卡是哪個裝置,應該會是wlan?,看?是多少,以下用0當示範
$ sudo iwconfig
2.然後打開你那個裝置的wifi,通常這行有成功網卡燈就會開始亮
$ sudo ifconfig wlan0 up
3.然後掃掃看有沒有wifi,這邊一定要用sudo,不然他會說沒掃到東西
$ sudo iwlist wlan0 scan
4.選擇要加入的wifi名字,這裡注意ssid一定要保留"",ex: sudo iwconfig wlan0 essid "shannon112"
$ sudo iwconfig wlan0 essid <ESSID>
5.輸入你加入的wifi的密碼 ex: iwconfig wlan0 key s:1234567890111
$ sudo iwconfig wlan0 key s:<password_wireless>
6.最後再向DHCP server要求IP就可以了
$ sudo dhclient wlan0
補充:如果你再輸入密碼時發生錯誤,
Error for wireless request "Set Encode" (8B2A) :
SET failed on device wlan0 ; Invalid argument.
可以參考這個:https://superuser.com/questions/42460/can-you-explain-how-to-understand-what-the-iwconfig-command-displays-in-ubuntu
總之就是iwconfig不支援WPA/WPA2的樣子,
所以你要將你的密碼改成5個字或是13個字才能被他接受

法二:
直接寫入一個script檔,在一開機時就執行
1.進到下面這個路徑的檔案
$ vim /etc/network/interfaces

2.看看裡面有沒有寫到wlan之類的東西,沒有的話就在底下空白的方加上,以wlan0做示範
auto wlan0
iface wlan0 inet dhcp 
                       wpa-ssid <ssid>
                       wpa-psk  <password>
但是注意這裡的密碼跟上面補充的一樣,要遵守5個字或13個字

3.然後重新開機就會連上摟~如果沒連上他會卡很久在找network,
這時候就要等他一段時間,
等系統放棄找網路了才會開機,如果你等不下去,中間可以按esc看看,有的時候有效有的時候沒有QQ

「RPi2啊派兔#02」Raspberry Pi 2 安裝作業系統 Raspbian Jessie with pixel — 從0開始的系統重灌之旅 裝好裝滿 for Mac

Standard
這篇因為前面已經裝過一次Pi的作業系統了,
因為已經對裝系統沒這麼生疏了,
這篇就來個速成教學吧
如果有些地方這篇講的不是很清楚可以參考這個系列的其他文
https://shannon112.blogspot.tw/search/label/RPi2%E5%95%8A%E6%B4%BE%E5%85%94

讓我們直接開始吧!
1.先把系統的.img檔載下來
直接去他們官網載: https://www.raspberrypi.org/downloads/raspbian/
RASPBIAN JESSIE WITH PIXEL->我們這次要載的,有圖形化介面(桌面)
RASPBIAN JESSIE LITE->好像是沒有桌面
載好之後就放到桌面


2.把系統灌到SD卡
把SD卡插到電腦裡
先格式化你的SD卡到exFAT格式
然後三步把.img檔安裝到隨身碟
第一步是要看你的SD卡是插在哪一個disk
我是插在disk2,不是的話要改一下disk的編號
$ diskutil list
$ diskutil unmountDisk disk2
$ sudo dd if=~/Desktop/2017-04-10-raspbian-jessie.img of=/dev/rdisk2 bs=2m


3.開機~~~~
準備好以下七樣東西:
1. Raspberry Pi (Raspberry Pi 2 Model B V1.1)
2. SD卡 (sandisk 32G) 與 Adapter
3. micro USB-B線 與 電源(變壓器、行充)
4. 筆電 (mac pro)
5. 網路線 與 無線網卡
6. HDMI接頭 的顯示器(電腦螢幕or電視)
7. USB接頭 的鍵盤 與 滑鼠
然後
1.把SD卡插到Pi的SD卡槽
2.把螢幕的HDMI線插到Pi的HDMI孔
3.鍵盤滑鼠的USB插到Pi的USB孔
4.把microUSB的電源插到Pi的microUSB孔
重新插拔電源線就會開機摟~



4.打開 Pi 的 SSH Server
因為官方為了安全性把ssh預設關閉了,
https://www.raspberrypi.org/blog/a-security-update-for-raspbian-pixel/
雖然好像還是可以不用接螢幕就把它打開(如下面連結)
http://yehnan.blogspot.tw/2017/02/raspberry-pivnc.html
不過我們還是使用有接螢幕的方法
進去桌面以後先開terminal設定管理員密碼
$ sudo passwd



然後點左上角的pi進到設定


這裡可以改個hostname,然後順便改個密碼
預設:
hostname: raspberry
username: pi
passward: raspberry
然後密碼不能太廢,不然他不給你改
這裡我們就暫時先不改



然後把SSH權限打開,然後就可以重開了
VNC權限也一起打開,後面才有辦法遠端控制螢幕


5.從筆電用 SSH 連上 Pi
然後我不知道為什麼就吃土了
跑出一排不知道在供三小,反正我也是笑笑拉
就照他說的做吧(如果你沒遇到這個問題可以跳過這個部分


到他說的那個資料夾 /Users/shannon/.ssh/
找那那個檔案 known_hosts
用vim打開
$ vim /Users/shannon/.ssh/known_hosts
長下面這個鳥樣
在你要連的IP那段後面找到結尾應該是個"="
把他說的那個ECDSA key sent by the remote host is
後面整段接在"="後面就可了
像是圖片中的 SHA256:AggqlkxHI/bP...........


然後就沒有然後了
esc -> :wq 存檔
再重新ssh一次
他就會問你密碼
然後就成功進去摟~

「RPi2啊派兔#06」使用 Microsoft Remote Desktop 遠端桌面 連線到 另一台電腦 有圖形化操作介面 for mac

Standard

開始前可以先參考這個系列之前的文章
https://shannon112.blogspot.tw/search/label/RPi2%E5%95%8A%E6%B4%BE%E5%85%94
先進到你的作業系統打開terminal,

1. 以Ubuntu 14.04 LTS為例
參考下面這篇,
Ubuntu 14.04 – How to install xrdp in Ubuntu 14.04
附上懶人紀錄:
sudo apt-get update
sudo apt-get install xrdp
sudo apt-get install xfce4
echo xfce4-session >~/.xsession
sudo service xrdp restart
hostname -I
最後一個指令可以再看到一次raspberry pi ubuntu的IP位置
xrdp: An open source remote desktop protocol(rdp) server.
VNC(Virtual Network Computing),為一種使用RFB協定的螢幕畫面分享及遠端操作軟體。此軟體藉由網路,可傳送鍵盤與滑鼠的動作及即時的螢幕畫面。
在Raspbian上VNC預設跟ssh一樣是關閉的要記得把它打開

然後開啟App store下載Microsoft Remote Desktop




載好之後打開來,按Add,填一下表格,填好後按叉叉就可以了,沒有儲存鍵



然後按start就連上囉~







2. 以Raspbian為例
這裡跟ubuntu得有些微不同,參考葉難大大
http://yehnan.blogspot.tw/2017/02/raspberry-pivnc.html
$ sudo apt-get update
$ sudo apt-get install xrdp
$ sudo apt-get install tightvncserver
$ reboot
就可以摟~
然後電腦端



成功~~



3. 以Ubuntu x ROS為例
sudo apt-get update
sudo apt-get install xrdp
sudo service xrdp restart
就可以了

4. 一些常用的指令

關機:
sudo poweroff  
sudo shutdown -h now
重開:
sudo reboot
顯示磁碟使用情況:
df
每天一個Linux指令- df指令(檢查linux伺服器的檔案系統的磁碟空間佔用情況)

尋找apt裡面的package:
apt-cache search package_name_or_word

「# Arduino開發日誌 03」ESP8266 ESP01 WIFI模組 — 最便宜,最多人用,但也很難搞,學習筆記 教學 for Mac

Standard


今天要來介紹ESP8266 ESP01 WIFI模組 — 最便宜,最多人用,但也很難搞,
我一開始是拿到一片不知道哪來的ESP8266,弄了超級久,花了超多時間,
都沒有反應,下AT然後什麼都沒回傳,後來就放棄了,
買一片新的,就還蠻順利的,估計上一片是燒壞了吧....

作業系統:macOS

1、材料

1. ESP8266 ESP01
http://goods.ruten.com.tw/item/show?21519293943233
ESP8266有分三代 ESP01 02 03 這個形狀是01,也是我們這次要用的


>>>>>>>>>然後下面2, 3兩個擇一,都可以用,但是3比較方便<<<<<<<<<<
2. USB轉TTL:
http://goods.ruten.com.tw/item/show?21716902881971
採用PL2303HX USB轉TTL晶片,這個需要載驅動程式,一樣是問一下G老師就有了,
這邊簡單附上mac的驅動程式:
http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41


3. USB轉ESP8266:
http://goods.ruten.com.tw/item/show?21716902881971#qa&p=1
採用CH340G USB轉TTL晶片,如果你不幸的買到比較便宜的Arduino就會用這種晶片,
用這種晶片跟電腦溝通是需要載驅動程式的,不然會讀不到東西,
windows的很好找,問一下G老師就有了,mac也是,但稍微不好找一點,
mac的驅動程式附上連結:
http://www.homautomation.org/2015/02/05/how-to-use-arduinos-with-ch340g-ch341g-serialusb-ftdi-chip/


2、讓我們開始吧!

1. USB轉ESP8266使用方法:
http://pm25.tn.edu.tw/xoops/modules/tad_book3/html.php?tbdsn=17
先照封面照的那樣插好,然後先不管韌體燒入模式,我們先用AT指令模式,所以都先不用焊

2. 然後參考這篇:
深入淺出 Wifi 晶片 ESP8266 with Arduino
我們從他的大標「Serial」開始做
我使用的是CoolTerm




3. 輸入 AT 得到OK後,
可以玩一些AT的指令看看feedback
然後把baud rate設成9600(但是電源拔掉後,會重置回115200)


4. 然後開始看這篇的「(三)透過指令(AT Command)去操作 ESP8266」
【技術教學】打造Wifi遙控車(之一):使用 ESP8266進行 Wifi無線通訊
並且了解這些AT
以下是我後面實習的成果
把ESP8266當伺服器端




然後直接使用mac的terminal,
使用ssh指令當客戶端連上它, 成果如下,伺服器端是回傳connect


3、韌體更新

教學參考:深入淺出 Wifi 晶片 ESP8266 with Arduino
如果可以的話還是不要走到這一步比較好,
因為一個用不好真的很麻煩,我就搞了很久,
一開始用了來路不明的v0.9.2.2檔,不知道燒了什麼進去,
然後害整個ESP8266都沒反應,AT完全不回應,
所以以下這個是我測試過OK的韌體更新檔,

1.下載韌體檔
v0.9.2.2  預設baud rate=9600
https://drive.google.com/file/d/0B3dUKfqzZnlwdUJUc2hkZDUyVjA/view

2. 裝esptool,且要裝一些python的配套,這部分忘了筆記,所以忘了是在哪找的,
印象中是去找到esptool的github直接clone下來,然後再用macport載python配套

3. 裝好後把剛剛載好的韌體bin檔丟到espstool的資料夾,

4. 把腳位短路,然後把USB轉接頭連同ESP8266插上去(從插入到燒錄,全程要保持短路)


5.然後在那個資料夾裡執行下面的指令就OK了(./esptool到Firmware.bin那行)


然後再重新試試那些AT指令



4、小試用WEB控制LED亮

1. 先看一下ESP8266要怎麼接Arduino,把TX, RX改接 D2, D3即可
*教學*Arduino WIFI(ESP8266) 初次上手應用

2. 看一下這篇教學,把裡面三份code準備好(.no, .html, .min.js)
http://allaboutee.com/2015/01/02/esp8266-arduino-led-control-from-webpage/

3. 把剩下三個腳位D11, D12, D13接到LED

4. 把電腦連上ESP8266發出來的wifi,應該都會叫"AI-THINKER_?????"
然後把Arduino的程式燒進去

5. 最後把html用瀏覽器打開,三個按鈕點點看應該就成功摟~
如果不行的話試試交換一下Arduino程式的TX, RX腳位,還有要照著順序開,html要最後開

備註:然後這個程式反應有點慢,按下去要一秒左右才有反應,而且我跑起來有個問題,
就是在重複按的時候,不會關掉...三個都亮完後,整個程式就不理我了...