機器人編程教程4為機器人準備無頭Raspberry Pi

来源:https://www.cnblogs.com/testing-/archive/2023/08/15/17622630.html
-Advertisement-
Play Games

最近一段時間沒有看 docker desktop,忽然想起來打開看看,結果死活啟動不了。以前卸載之後,重新安裝就好了,同樣的方法嘗試了很多次還是不太行,重啟也不行... 後來想想是不是 wsl 出了問題,運行 WSA ,WSAClient 啟動後又自動退出了。在命令行下運行 wsl,等待了很久,出現 ...


4為機器人準備無頭Raspberry Pi

本章將介紹以下內容:

  • 什麼是無頭系統,為什麼它對機器人有用?
  • 在Raspberry Pi上設置Wi-Fi並啟用SSH
  • 在網路上找到你的Raspberry Pi
  • 連接Raspberry Pi
  • 配置Raspberry Pi操作系統

要求:一臺 Raspberry Pi,最好是 3A+(但 Pi3或4也可以)

4.1 什麼是無頭系統,為什麼它對機器人有用?

無頭系統是指在鍵盤、屏幕和滑鼠訪問設備不方便的時間或地點,可以通過網路從另一臺電腦上操作的電腦。無頭訪問可用於伺服器系統、製造機器人和小工具:


與屏幕、鍵盤和滑鼠連接的 Raspberry Pi

上圖展示了一個有頭的系統,用戶可以坐在設備前面。您需要在機器人上安裝屏幕、鍵盤和滑鼠,因此移動性較差。您可以根據需要安裝/拆卸它們,但這樣做也很不方便。有一些攜帶型系統可以與Raspberry Pis像這樣對接,但當機器人移動時,您需要斷開連接或與機器人一起移動。

我曾看到過帶有微型板載屏幕、由無線鍵盤和滑鼠控制的機器人。不過,在本書中,我們將機器人作為無頭設備使用:


機器人上的Raspberry Pi採用無頭配置

上圖中的 Raspberry Pi作為無頭設備安裝在機器人上。這台Raspberry Pi沒有屏幕和鍵盤的束縛;這些都由另一臺電腦來處理。代碼、指令和信息通過無線網路從筆記本電腦發送到 Raspberry Pi,再從 Raspberry Pi發送出去。許多代碼示例都是自主運行的,電腦可以啟動/停止這些示例。手機可以啟動和停止自主行為,查看機器人的狀態,或者直接驅動機器人,完全不需要連接筆記本電腦。這個 Raspberry Pi沒有屏幕和鍵盤。

雖然您通常不需要屏幕和鍵盤,但還是值得準備一下,以防與 Raspberry Pi失去聯繫時,它拒絕通過網路做出響應。這時,您可以使用屏幕和鍵盤與它連接,查看發生了什麼。

對於無頭訪問Raspberry Pi,我們將使用Secure Shell(SSH)。SSH提供了向Pi發送指令的命令行,以及向 Pi 傳輸文件的文件傳輸系統。

讓Pi成為無頭機器人可以讓它自由行動。它無需攜帶屏幕和鍵盤,也無需為其供電,從而保持了機器人的輕便。由於顯示器和鍵盤非常笨重,因此無頭設計使機器人更小巧。它還能鼓勵製造者思考機器人的自主行為,因為你不能總是向機器人輸入命令。

4.2 在Raspberry Pi上設置Wi-Fi並啟用SSH

現在你已經看到了無頭系統的功能,讓我們來修改SD卡,使 Raspberry Pi啟動後即可作為無頭設備使用。我們需要先設置 Wi-Fi:

並創建文件:

  • ssh: 沒有擴展名的空文件。
  • wpa_supplicant.conf: 該文件包含 Wi-Fi 網路配置,如圖所示:
country=CN

update_config=1

ctrl_interface=/var/run/wpa_supplicant

network={

ssid="<your network ssid>"

psk="<your network password>"

}

讓我們逐行查看該文件:

第一行必須指定ISO/IEC alpha2國家代碼。您可以在 https://datahub.io/core/country-list 找到適合您所在位置的國家代碼。如果沒有,Raspberry Pi OS 將禁用Wi-Fi適配器。

接下來的兩行允許其他工具更新配置。

文件的最後四行定義了機器人和 Raspberry Pi 將連接的 Wi-Fi網路。請使用您自己的網路詳細信息,而不要使用此處的占位符。預共用密鑰(PSK)也稱為 Wi-Fi 密碼。這些信息應與您將筆記本電腦或手機連接到Wi-Fi網路時使用的信息相同。我建議在電腦上保留一份 wpa_supplicant.conf 文件副本,以便在其他 Raspberry Pi SD 卡上使用。

4.3 在網路上找到你的 Pi

假設您的SSID和PSK正確無誤,您的 Raspberry Pi現在已經在Wi-Fi網路上註冊。不過,現在你需要找到它。Raspberry Pi使用動態地址(DHCP)。每次將它連接到網路時,它都可能獲得不同的地址。訪問Wi-Fi路由器的管理頁面並記下IP地址在短期內有效。但每次更改地址時都這樣做會令人沮喪,而且在某些情況下可能無法使用。

幸運的是,Raspberry Pi使用了一種名為mDNS(多播功能變數名稱系統)的技術,因此附近的電腦都能找到它。客戶端電腦會廣播一條本地消息,詢問是否有名稱為 raspberrypi.local 的設備,Raspberry Pi會回覆地址,以便找到它。這也被稱為Zeroconf和Bonjour。因此,你需要做的第一件事就是確保你的電腦能做到這一點。

如果你使用的是 macOS,那麼你的電腦已經在運行Bonjour軟體,它已經具備mDNS功能。此外Ubuntu和Fedora桌面版本也早已相容 mDNS。在其他 Linux 桌面上,你需要找到它們的Zeroconf或 Avahi說明。許多最新的 Linux桌面都預設啟用了這一功能。

但如果你使用的是Windows,則需要使用Bonjour軟體。下麵我們就來看看如何設置。

參考資料

4.3.1 為Microsoft Windows設置Bonjour

如果你安裝了最新版本的Skype或iTunes,你就會擁有這款軟體。你可以使用本指南檢查它是否已經存在並啟用它:https://smallbusiness.chron.com/enable-bonjour-65245.html。

你可以在命令提示符中使用以下命令來檢查它是否已經運行:

C:\Users\danny>ping raspberrypi.local

如果你看到這個,說明你已經安裝了 Bonjour:

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms

如果你看到這個,你需要安裝它:

Ping request could not find host raspberrypi.local. Please check the name and try again.

為此,請瀏覽 Apple Bonjour For Windows 網站 https://support.apple.com/downloads/bonjour_for_windows 並下載,然後安裝 Download Bonjour Print Services for Windows。運行該程式後,Windows 就能按名稱查詢 mDNS 設備了。

4.3.2 測試設置

Raspberry Pi的綠燈應該已經停止閃爍,只能看到紅色的電源指示燈。這表明Pi已完成啟動並連接到網路。

如果一切順利,電腦將顯示已連接到 Pi:

$ ping raspberrypi.local

PING raspberrypi.local (192.168.0.53) 56(84) bytes of data.

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=1 ttl=64 time=0.113 ms

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=2 ttl=64 time=0.079 ms

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=3 ttl=64 time=0.060 ms

64 bytes from 192.168.0.53 (192.168.0.53): icmp_seq=4 ttl=64 time=0.047 ms

4.3.3 故障排除

如果 Raspberry Pi 似乎沒有響應ping操作,你可以採取以下步驟嘗試診斷和補救。嘗試以下步驟:

  • 仔細檢查連接。你應該看到綠燈閃爍幾下,紅燈持續亮起。如果沒有,請拔下電源插頭,確保 SD 卡插穩,然後再試一次。
  • 在啟動Raspberry Pi時使用Wi-Fi 接入點設置,看看它是否在那裡獲取了IP地址。
  • 如果您在Wi-Fi路由器上找到Raspberry Pi,這可能意味著mDNS沒有在您的電腦上正確運行。如果尚未安裝,請重新安裝。在 Windows 上,不同版本的 Bonjour 列印服務、Skype Bonjour 和 iTunes Bonjour 如果安裝在一起可能會發生衝突。請使用 Windows 的添加/刪除功能查看是否有多個版本,並刪除所有 Bonjour 實例,然後重新安裝官方版本。
  • 接下來,關閉電源,取出 SD 卡,將其放回電腦,仔細檢查wpa_supplicant.conf文件是否存在,並確保 Wi-Fi 詳情和國家代碼正確無誤。該文件中最常見的錯誤如下:a) Wi-Fi 詳情不正確; b) 缺少引號或缺少/不正確的標點符號;c)國家代碼錯誤或缺失;d)關鍵字大小寫錯誤(關鍵字應小寫,國家代碼應大寫)
  • 當 Raspberry Pi 啟動時,SSH 文件會被刪除。如果你確定它存在並已被移除,這意味著 Pi 確實啟動了。
  • 最後,您可能需要在連接屏幕和鍵盤的情況下啟動Pi,並嘗試診斷問題。顯示屏會告訴您wpa_supplicant.conf是否存在其他問題或其他問題。使用屏幕文本併在網上搜索答案。我無法在此重現所有這些問題,因為這裡可能出現多種問題。我還建議使用 #raspberrypi 標簽在 Twitter、Stack Overflow 或 Raspberry Pi 論壇(https://www.raspberrypi.org/forums/)上提問。

我們現在已經驗證了 Pi 與網路的連接,並一路排除了各種問題。我們可以通過
ping 找到它。現在我們知道它就在那裡,讓我們連接到它。

4.4 使用PuTTY或SSH連接Raspberry Pi

windows推薦:MobaXterm或git bash, Linux和MacOS可直接使用bash,Linux的PAC也挺不錯。下麵以跨平臺但是不太好用的PuTTY為例:

如果您已經使用SSH客戶端,請註意並非所有Windows命令行SSH客戶端都支持mDNS。

PuTTY 是訪問 SSH 的便捷工具,適用於 Windows、Linux 和 Mac。這些操作系統的安裝信息可在 https://www.ssh.com/ssh/putty/上找到。

從上述鏈接安裝好PuTTY後,讓我們將它連接到 Raspberry Pi。繼續
啟動 PuTTY。你會看到如圖的界面。在 "主機名(或 IP 地址)"框中輸入 raspberrypi.local,然後點擊 "打開 "登錄到你的 Pi:

第一次執行此操作時,PuTTY 會顯示安全警告,要求你添加 Pi 的密鑰(如果你信任它)。單擊 "是";只有當另一個具有相同主機名的設備(例如新的 Raspberry Pi)使用不同的密鑰出現時,PuTTY 才會再次詢問你。當你看到 "Login as"提示時,輸入pi,按Enter,並使用密碼raspberry。現在你將看到類似下圖的內容,表明你已連接到 Pi:

4.5 配置Raspberry Pi操作系統

我們可以使用raspi-config工具來完成許多這些任務,它是一個菜單系統,用於在 Raspberry Pi OS 上執行配置任務。

sudo raspi-config

4.5.1 重新命名你的 Pi

在raspi-config中選擇Network Options(網路選項)-> Hostname(主機名):

4.5.2 更改用戶密碼

在raspi-config頂部菜單中選擇"更改用戶密碼":

4.5.3 重啟並重新連接

使用Tab按鈕轉到"完成"項,然後按 Enter:

下一個屏幕會詢問您是否要重啟Pi。選擇是並按回車鍵:

Raspberry Pi將開始重置,在重置過程中,PuTTY會話將被斷開。等待幾分鐘,Pi上的綠色活動指示燈會閃爍一下,然後穩定下來。PuTTY會告訴你已經失去了與它的連接。此時 Pi已關閉。紅燈將一直亮著,直到你拔掉電源:

4.5.4 更新 Raspberry Pi 上的軟體

$ sudo apt update – y && sudo apt upgrade -y

4.5.5 關閉樹莓派

sudo poweroff

等待綠燈活動停止;PuTTY會檢測到它已斷開連接。現在可以安全斷開電源了。

在不預期的情況下拔掉Raspberry Pi的電源可能會導致文件丟失和 SD卡損壞。您可能會丟失工作並損壞 SD 卡。請務必使用正確的關機程式。

釘釘或微信號: pythontesting 微信公眾號:pythontesting
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 起因是懶 - 最近在開發中要用到PostgreSQL數 ...
  • Java技術體系中所提倡的自動記憶體管理最終可以歸結為自動化地解決了兩個問題:給對象分配記憶體以及回收分配給對象的記憶體。關於回收記憶體這一點,我們已經使用了大量篇幅去介紹虛擬機中的垃圾收集器體系以及運作原理,現在我們再一起來探討一下給對象分配記憶體的那點事兒。對象的記憶體分配,往大方向講,就是在堆上分配,對象... ...
  • # MyBatis--1.快速入門 ## MyBatis簡介 ### 原始jdbc操作的弊端 1. 創建、釋放頻繁導致系統資源浪費 2. sql語句在代碼中硬編碼,不易維護 3. 查詢操作時,需要手動將結果集中的數據封裝到實體中。插入操作同理需要手動 解決方案: 1. 使用資料庫連接池初始化連接資源 ...
  • ## Eureka 簡介 Eureka 是一個基於 REST 的服務發現組件,SpringCloud 將它集成在其子項目 spring-cloud-netflix 中,以實現 SpringCloud 的服務註冊與發現,同時提供了負載均衡、故障轉移等能力,目前 Eureka2.0 已經不再維護,故不推 ...
  • Quartz由Java編寫的功能豐富的開源作業調度框架,可以集成到幾乎任何Java應用程式中,並且能夠創建多個作業調度; ...
  • ## 引言 深拷貝是指創建一個新對象,該對象的值與原始對象完全相同,但在記憶體中具有不同的地址。這意味著如果您對原始對象進行更改,則不會影響到複製的對象 常見的C#常見的深拷貝方式有以下4類: 1. 各種形式的序列化及反序列化。 2. 通過反射機制獲取該對象的所有欄位和屬性信息。遍歷所有欄位和屬性,遞 ...
  • 鴿了好久的內容,終於補上了。這篇文章對該合集前幾篇文章的內容做了簡要的總結和應用,同時按照MVVM設計模式完成了一個學習小Demo,希望可以幫到正在學習的友友們。有什麼問題可以評論區留言討論。 ...
  • # Unity AssetPostprocessor的Model的動畫相關的函數修改實際應用 在Unity中,AssetPostprocessor是一個非常有用的工具,它可以在導入資源時自動執行一些操作。其中,Model的動畫相關的函數修改可以幫助我們在導入模型時自動修改動畫相關的函數,從而提高我們 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...