我造輪子,你造車,創客一起造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】 本文介紹X-CTR100控制器與樹莓派Linux系統組成機器人平臺。首先介紹與樹莓派串口通信,後介紹機器人平臺搭建。這種上下位機平臺架構常用於機器人RO... ...
我造輪子,你造車,創客一起造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】
本文介紹X-CTR100控制器與樹莓派Linux系統組成機器人平臺。首先介紹與樹莓派串口通信,後介紹機器人平臺搭建。這種上下位機平臺架構常用於機器人ROS系統開發中。最後介紹了Linux機器人開發中常用的軟體工具,意在拋磚引玉。
環境搭建
本文使用樹莓派硬體版本為3B+,GPIO擴展介面具有1路串口,可以與X-CTR100控制器通信。
組成強大的上下位機機器人系統,這個是主流的ROS架構。GPIO的串口引腳定義如下。
軟體操作系統使用NOOBS安裝,NOOBS版本2.8.2,2018-06-27更新。
安裝樹莓派官方Raspbian Stretch版本。
預設狀態樹莓派串口是關閉的,需要打開串口,並關閉串口終端,如下。如果未關閉串口終端,改串口會列印系統調試信息。
輸入以下命令,查看串口狀態。ttyS0為我們要使用的擴展介面上的串口。
ls -l /dev
此時,無須像網上教程所述修改任何配置映射文件,即可使用ttyS0通信。
樹莓派與PC機串口通信測試
首先測試樹莓派例串口通信是否正常,測試採用樹莓派與PC機串口通信。硬體平臺如下。
本文使用一款圖像化的Linux串口工具cutecom,當然也可以常用的minicom或picocom。
後兩者在Linux中使用較多,但是為文本工具,上手有難度。
cutecom軟體通信
cutecom安裝非常簡單使用apt-get命令,如下。
sudo apt-get install cutecom
安裝完成後,輸入如下命令打開軟體。串口操作需要root許可權。
sudo cutecom
設置串口設備為/dev/ttyS0,並打開設備,可以實現串口數據收發。
minicom軟體通信
minicom軟體安裝前註意更新軟體源,通常使用命令安裝軟體apt-get install。
sudo apt-get install minicom
也可以使用圖形化的方式安裝一款軟體:串口調試工具minicom。使用系統自帶的 "Add /Remove Software"軟體。
打開終端,如下命令打開ttyS0串口。
sudo minicom –b 115200 –o –D /dev/ttyS0
軟體界面如下,為文本界面。
樹莓派鍵盤輸入字元即可傳輸到PC機,PC機發送字元到樹莓派。
如果參數固定,也可使用如下命令,配置minicom,後續啟動均按照該配置啟動。
sudo minicom –s
進入配置界面,選"Serial port setup"進行串口設置。按下圖設置,重點A選型串口名稱。
然後進入配置界面,選擇"Save setup as dfl"保存配置,並選擇"Exit"退出。
後續輸入如下命令,即可按照配置內容打開串口。
sudo minicom
退出minicom方法,根據提示按CTRL+A,進入help界面,按X退出。按Z查看幫助。
打開軟體時,如果出現如下提示,可通過進入/var/lock文件夾,刪除"LCK..ttyS0"解決。該情況一般為錯誤關閉串口導致。
Device /dev/ttyS0 is locked.
樹莓派與X-CTR100串口通信測試
硬體連接
本常式測試樹莓派與X-CTR100串口通信是否正常,硬體平臺如下,樹莓派連接UART1。
測試常式
X-CTR100控制器下載《X-CTR100 l 樹莓派串口通信常式(迴圈發送)》常式,X-CTR100會每隔1S發送一次串口數據。樹莓派使用minicom接收,測試結果如下。
樹莓派與X-CTR100 python串口通信
minicom僅滿足調試用途,用於製作還需要編程解決,樹莓派流行的編程語言為python語言,介紹如何使用python編寫串口通信代碼,使用python的serial擴展庫——pyserial實現。
硬體連接
本常式測試樹莓派與X-CTR100 python串口通信功能。此常式樹莓派串口連接UART3(LB介面)。
pyserial安裝
安裝pyserial擴展庫有很多種方法,可使用pip或者easy_install安裝,也可以直接選擇apt-get工具安裝。若使用apt-get工具安裝,可輸入以下指令
sudo apt-get install python-serial
python代碼
代碼實現樹莓派迴圈向X-CTR100控制器發送數據功能。
# -*- coding: utf-8 -* import serial import time # 打開串口 ser = serial.Serial("/dev/ttyS0", 9600,timeout =0.5) # 迴圈發送 while 1: ser.write('Hello X-CTR100\r\n'.encode()) time.sleep(1) #關閉串口 ser.close() |
測試常式
X-CTR100控制器下載《X-CTR100 l 樹莓派串口通信常式(接收數據)》常式。常式實現UART3接收樹莓派發送的數據,並通過USB串口顯示數據內容,當接收到'\n'符後,反轉LED燈指示狀態。主程式及UART3中斷接收部分代碼如下。
int main(void) { /* X-CTR100初始化 */ AX_Init(115200);
printf("***X-CTR100 接收樹莓派串口數據測試常式***\r\n");
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置中斷優先順序分組
AX_UART_Init();
while (1) { AX_Delayms(1000); //延時100ms } }
/** * @簡 述 串口中斷服務程式 * @參 數 無 * @返回值 無 */ void USART3_IRQHandler(void) { uint8_t Res;
if (USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中斷 {
Res = USART_ReceiveData(USART3);
//USB串口顯示接收到的字元 printf("%c", Res);
//接收到換行符,反轉綠色LED if (Res == '\n') AX_LEDG_Toggle();
USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); } } |
X-CTR100控制器下載代碼後,打開串口調試助手。在樹莓派使用預設IDE運行python代碼。運行結果下圖所示。
樹莓派X-CTR100機器人平臺搭建
目前的測試平臺,只實現了樹莓派與X-CTR100控制器上下位機串口通信功能。樹莓派需要連接鍵盤滑鼠和顯示器,並且需要USB單獨供電,不方便搭建機器人平臺。
要構建機器人平臺還需要解決供電和遠程操作兩個問題。
供電
X-CTR100使用VIN輸入時,其內置DCDC具有5V@2A供電輸出能力,可以向樹莓派提供穩定5V電源,解決電源輸入問題。
遠程式控制制
供電解決了,滑鼠鍵盤顯示器還依然存在,如果需要擺脫,就需要通過網路進行遠程式控制制。
本文介紹兩種遠程操作方式,一種文字方式SSH,一種圖像方式VNC。
SSH方式,這也是Linux常用操作方式,適合高手,需要記錄大量命令,操作高效便捷,但是難度大。對於小白,操作起來可能會比較困難。另一種VNC遠程式控制制方式,在PC機上使用遠程式控制制操作樹莓派桌面。下麵分別介紹。
SSH方式
SSH為 Secure Shell 的縮寫,由 IETF 的網路小組(Network Working Group)所制定;SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程式,後來又迅速擴展到其他操作平臺。SSH在正確使用時可彌補網路中的漏洞。SSH客戶端適用於多種平臺。幾乎所有UNIX平臺—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平臺,都可運行SSH。系統框圖如下。
Windows系統運行SSH有兩個常用軟體,putty和SSH Secure Shell Client。本文已putty為例說明。
PC機下載安裝putty,PC機和樹莓派在一個網段內,如下方式連接樹莓派。
連接後即可通過命令方式控制樹莓派,一般Linux操作大多通過命令方式進行,界面如下。
在SSH模式下,也可以使用minicom軟體,進行遠程串口調試,非常方便。
VNC方式
對於小白用戶SSH方式可能有些困難,使用VNC方式,可以通過遠程桌面,就像操作自己電腦一樣操作樹莓派圖像桌面,使用非常方便。藉助WIFI無線網路,更可實現無線控制,對於機器人操作調試非常方便。
VNC (Virtual Network Console)是虛擬網路控制台的縮寫。它是一款優秀的遠程式控制制工具軟體,由著名的 AT&T 的歐洲研究實驗室開發的。VNC 是在基於 UNIX 和 Linux 操作系統的免費的開源軟體,遠程式控制制能力強大,高效實用,其性能可以和 Windows 和 MAC 中的任何遠程式控制制軟體媲美。
樹莓派自帶VNC軟體,預設關閉,需要通過配置選項開啟。
如果使用PC機,需要安裝VNC Viewer軟體。添加樹莓派IP地址,賬號密碼,即可使用,非常簡單。
註意,樹莓派預設解析度設置為根據顯示設備自適應,如果不插顯示設備,解析度會比較低。為了達到較好效果,建議將樹莓派解析度調節至1080P,如下設置。
硬體平臺
X-CTR100控制器可以方便與樹莓派組裝在一起,組成性能強大的Linux機器人開發平臺。組裝後,X-CTR100和樹莓派介面均可以正常使用,例如下圖所示電機驅動也可以正常使用,最多可驅動四路直流電機。只需要為平臺供電即可開發,連接非常簡單,適合ROS機器人系統開發。
ROS機器人系統
有了機器人硬體平臺,實現機器人還需要軟體平臺,下麵介紹機器人常用軟體。
ROS(Robot Operating System,下文簡稱"ROS")是一個適用於機器人的開源的元操作系統。它提供了操作系統應有的服務,包括硬體抽象,底層設備控制,常用函數的實現,進程間消息傳遞,以及包管理。它也提供用於獲取、編譯、編寫、和跨電腦運行代碼所需的工具和庫函數。
ROS 的主要目標是為機器人研究和開發提供代碼復用的支持。ROS是一個分散式的進程(也就是"節點")框架,這些進程被封裝在易於被分享和發佈的程式包和功能包中。ROS也支持一種類似於代碼儲存庫的聯合系統,這個系統也可以實現工程的協作及發佈。這個設計可以使一個工程的開發和實現從文件系統到用戶介面完全獨立決策(不受ROS限制)。同時,所有的工程都可以被ROS的基礎工具整合在一起。
使用ROS,可以方便開發現在較為流行的SLAM機器人。
具體樹莓派ROS系統的安裝和使用,網路上有大量文章,請搜索參考,本文不做詳見介紹。
OpenCV機器視覺
OpenCV於1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一個基於BSD許可發行的跨平臺電腦視覺庫,可以運行在Linux、Windows和Mac OS操作系統上。它輕量級而且高效——由一系列 C 函數和少量 C++ 類構成,同時提供了Python、Ruby、MATLAB等語言的介面,實現了圖像處理和電腦視覺方面的很多通用演算法。
OpenCV是開發機器人視覺不可缺少的工具,可以方便進行圖像處理操作,例如機器人常用的物體檢測,人臉跟蹤等功能。這裡不做過多描述,感興趣可以搜索安裝。
TensorFlow人工智慧
TensorFlow 是谷歌研發的第二代人工智慧學習系統,可被用於語音識別或圖像識別等多項機器學習和深度學習領域。今天,TensorFlow 官方宣稱開始支持樹莓派平臺,這意味著樹莓派設備在人工智慧方向的應用和學習上變得更加容易。
TensorFlow 在 2015 年首次發佈之時,我們希望它成為一個任何人都可以使用的開源的機器學習框架。為此,我們將它擴展到了 Linux、MacOS、Windows、iOS 以及 Android 平臺。而今,在樹莓派基金會的協力下,我們宣佈最新的 TensorFlow 1.9 版本將可以通過樹莓派預裝的 Python pip 包系統安裝!如果你使用的是 Raspbian 9 (stretch),你可以在終端運行下麵的命令進行安裝:
sudo apt install libatlas-base-dev
pip3 install tensorflow
然後在終端運行 python3,像在其他平臺使用 TensorFlow 一樣使用它就好了。下麵是一個 hello world 的例子。
# Python
import tensorflow as tf
tf.enable_eager_execution()
hello = tf.constant('Hello, TensorFlow!')
print(hello)
參考
http://shumeipai.nxez.com/2018/08/03/tensorflow-officially-supports-the-raspberry-pi.html