機器人編程教程5使用Git和SD卡副本備份代碼

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

開始之前簡單講下源和包管理器的概念,個人理解如下: 源就是平時我們win電腦上的360軟體管家、騰訊軟體管家、微軟商店這個意思,提供下載各類軟體包、安裝包的平臺; 包管理器就是win電腦上各類軟體的安裝包,例如qq.exe、360.msi等,需要下載後用指定的命令可以進行安裝、協助等操作,跟源配合使 ...


5使用Git和SD卡副本備份代碼

在本章中,您將學習到以下內容:

  • 代碼是如何破壞或丟失的
  • 策略 1 - 將代碼保存在電腦上並上傳
  • 策略 2:使用 Git 回溯歷史
  • 策略 3 - 製作 SD 卡備份

5.1 代碼是如何破壞或丟失的

代碼和它的近親--配置,都需要時間和艱苦的努力。代碼需要配置才能運行,例如 Raspberry Pi 操作系統配置、額外軟體和必要的數據文件。兩者都需要研究和學習,需要設計、製作、測試和調試。

很多糟糕的情況會導致代碼丟失。我在經過數周的工作後,在帶機器人去參加展會的前一周就遇到過這種情況。那麼,您的代碼會發生什麼情況呢?

5.1.1 SD 卡數據丟失和損壞

SD 卡損壞是指 SD 卡中用來保存代碼、Raspberry Pi 操作系統和任何你準備好的東西的數據被破壞。文件無法讀取,或者卡無法使用。SD 卡上的信息可能會永久丟失。

如果 Raspberry Pi 意外斷電,SD 卡可能會損壞,導致數據丟失。發熱的 Pi 會慢慢烘烤 SD卡,損壞它。Pi 上的視覺處理就容易發熱。如果Pi通過GPIO引腳或電源發生嚴重的電氣故障,SD 卡也會受損。

5.1.2代碼或配置更改

編碼意味著嘗試。有些會成功,有些則會失敗。在這種情況下,你會想回頭看看你都改了些什麼。

錯誤的配置也會讓機器人失去作用,比如 Pi 無法聯網或啟動。系統軟體包升級可能會出錯,導致代碼無法工作,或者需要對代碼進行大量修改才能重新工作。

這些問題結合在一起可能會造成真正的噩夢。我曾見過代碼的修改導致機器人行為失常,並以損壞 SD 卡的方式損壞自身。在一次重要的機器人活動前兩周,我一直在更新操作系統的軟體包,結果把電源線弄斷了,導致 SD 卡損壞,Raspberry Pi 操作系統也隨之損壞,重建操作系統的過程非常痛苦。這是一次慘痛的教訓。

5.2 策略 1 - 將代碼保存在電腦上並上傳

通過安全文件傳輸協議(SFTP),您可以將文件從電腦傳輸到 Pi。這種策略可以讓你在電腦上編寫代碼,然後上傳到 Raspberry Pi。您可以選擇自己的編輯器,並安全地擁有多個副本。
編輯代碼需要專門設計的軟體。針對Python推薦使用Mu、Microsoft VS Code、WingIDE、Geany、Notepad++ 和 PyCharm。

SFTP 使用 SSH 通過網路在 Raspberry Pi 上複製文件。讓我們來看看如何操作:

  • 首先,在 PC 上創建一個文件夾,用於存儲機器人代碼;例如,my_robot_project。

  • 在該文件夾中,用編輯器製作一個測試文件,只需列印一段文字即可。將這段代碼放入名為 hello.py 的文件中:


print("Raspberry Pi is alive")

  • 我們將把它複製到機器人上並運行。您可以使用 https://filezilla-project.org 上的 SFTP 工具 FileZilla 進行複製。下載並按照安裝說明操作:

  • 插入Raspberry Pi並啟動電源。你會發現在右側面板底部,FileZilla顯示"未連接"。
  • 在"Host"框中,鍵入您在無頭設置中為機器人Pi提供的本地主機名,首碼為ftp://;例如,sftp://myrobot.local。
  • 在用戶名框中輸入pi,在密碼框中輸入之前設置的密碼。
  • 單擊 Quickconnect 按鈕連接Raspberry Pi。
  • 連接完成後,你會在右側的遠程站點面板中看Raspberry Pi的文件,如圖 5.2 所示:

  • 使用左側的本地站點面板進入你電腦上的代碼。

  • 現在單擊圖左上方突出顯示的 hello.py,並將其拖動到右下角面板,將其放到Raspberry Pi上:

  • 你拖動文件時,你會在"已排隊文件"部分看到它。由於文件較小,它只會在隊列狀態中停留一瞬間。你也可以對整個文件夾使用同樣的系統。你很快就能在遠程站點(Raspberry Pi)看到文件,如圖右側面板所示。

  • 要運行這段代碼,請使用 PuTTY 登錄 Pi 並嘗試執行以下命令:

$ python3 hello.py
Raspberry Pi is alive

這一策略是讓代碼更安全的良好開端。通過在筆記本電腦/PC 上工作並複製到Pi上,你可以保證除了機器人上的那個副本外,總有一個副本。你還可以在電腦上使用任何你喜歡的代碼編輯器,併在錯誤傳到樹莓派之前就發現它們。

5.2 策略2:使用Git回溯歷史

Git是一種流行的源代碼控制形式,是記錄代碼修改歷史的一種方式。你可以回溯修改,查看修改內容,還原舊版本,併在註釋日誌中記錄修改原因。Git 能將代碼存儲在多個位置,以防硬碟出現故障。Git將代碼及其歷史存儲在倉庫(或稱 repos)中。在Git中,你可以創建分支,即整套代碼的副本,與你的代碼並行嘗試各種想法,之後再將這些想法合併回主分支。

我將帶你開始使用Git,但這部分內容只能讓你瞭解Git的一些皮毛。讓我們開始吧:

如果你使用的是Windows或macOS,我建議你使用GitHub應用程式,這樣設置會更簡單。

  • Git要求你在電腦上使用命令行設置身份:
> git config --global user.name "<Your Name>"
> git config --global user.email <your email address>
  • 要將這個項目置於源代碼控制之下,我們需要初始化它並提交第一段代碼。請確保您已進入代碼文件夾(my_robot_project),然後在電腦命令行中鍵入以下內容:
> git init .
Initialized empty Git repository in C:/Users/danny/
workspace/my_robot_project/.git/
> git add hello.py
> git commit -m "Adding the starter code"
[master (root-commit) 11cc8dc] Adding the starter code
1 file changed, 1 insertion(+)
create mode 100644 hello.py

"git init ."命令Git將文件夾創建為Git倉庫。"git add"將hello.py文件保存在倉庫。

  • 現在我們可以用"git log"查看日誌了:
> git log
commit 11cc8dc0b880b1dd8302ddda8adf63591bf340fe (HEAD ->
master)
Author: Your Name <[email protected]>
Date: <todays date>
Adding the starter code
  • 現在修改 hello.py 中的代碼,將其改成這樣:
import socket
print('%s is alive!' % socket.gethostname())

讓我們看看這段代碼與之前有什麼不同:

> git diff hello.py
diff --git a/hello.py b/hello.py
index 3eab0d8..fa3db7c 100644
--- a/hello.py
+++ b/hello.py
@@ -1 +1,2 @@
-print("Raspberry Pi is alive")
+import socket
+print('%s is alive!' % socket.gethostname())

以上是Git顯示差異的方式。Git將這些改動理解為去掉了列印行,取而代之的是導入和列印行。我們可以把它添加到Git中,生成一個新版本,然後再用 git log查看兩個版本:

> git add hello.py
> git commit -m "Show the robot hostname"
[master 912f4de] Show the robot hostname
1 file changed, 2 insertions(+), 1 deletion(-)
> git log
commit 912f4de3fa866ecc9d2141e855333514d9468151 (HEAD ->
master)
Author: Your Name <[email protected]>
Date: <the time of the next commit>
Show the robot hostname
commit 11cc8dc0b880b1dd8302ddda8adf63591bf340fe (HEAD ->
master)
Author: Your Name <[email protected]>
Date: <todays date>
Adding the starter code

這樣你就可以回溯到以前的版本,或只是比較版本,並保護自己免受可能會讓你後悔的改動。

現在,我們可以回溯和向前(至少對我們的代碼而言),我們可以更自信地進行修改。只要記住頻繁提交--尤其是在完成某些工作之後!

5.3 策略3-製作 SD 卡備份

開始之前,請正確關閉 Raspberry Pi,取出 SD 卡並將其放入電腦。這些乾凈的鏡像文件很大,所以不要把它們放到 Git 倉庫中。在任何情況下,根據鏡像文件的大小不同,這項操作都需要 20-30 分鐘。

5.3.1 Windows

Windows上將使用Win32DiskImager。因此,我們的第一步就是安裝和設置它。繼續:

從https://sourceforge.net/projects/win32diskimager獲取安裝程式。

在"文件名"方框中將圖像命名為myrobot.img。然後單擊"打開"按鈕確認:

單擊"讀取"按鈕開始複製圖像。在讀取圖像的過程中,你會看到一個進度條和剩餘時間估算。圖像複製完成後,Win32 Disk Imager會告訴你讀取成功,然後你就可以退出軟體了:

參考資料

5.3.2 Mac

MacOS有一種製作SD卡和磁碟鏡像的內置方法。這就是使用內置的磁碟工具。讓我們來看看它是如何工作的:

單擊 "查看 "菜單:

現在點擊顯示所有設備選項。選擇包含啟動捲的設備:

在菜單欄中,選擇文件 | 新映像:

在此菜單下,選擇 "從 <您的存儲設備> 映像":

磁碟工具將顯示一個對話框。設置文件名和位置,並格式化為 DVD/CD 母盤:

磁碟工具為這些文件提供 .cdr 擴展名:

將其重命名為 .iso:

您需要確認是否需要這樣做:

現在,你可以在 macOS 上創建SD鏡像文件,以便與balenaEtcher 一起使用。

5.3.3 Linux

在Linux下,備份SD卡可以通過命令行dd命令完成。在瞭解如何操作之前,我們首先需要找到設備的位置。讓我們開始吧:

插入卡並鍵入以下命令查找設備的位置:

$ dmesg

該命令將輸出很多內容,但您只對接近末尾的一行感興趣,該行內容如下:

sd 3:0:0:0: [sdb] Attached SCSI removable disk

卡在方括弧[sdb]中,在你的電腦上可能有所不同。SD卡的位置將是/dev/<驅動器位置>,例如/dev/sdb。

請註意正確的位置,因為您可能會破壞SD卡或電腦硬碟中的內容。如果不確定,請勿使用此方法。

確定SD卡位置(如 /dev/sdb 或 /dev/disk1)後,就可以使用 dd 命令啟動克隆。該命令可將數據轉入或轉出驅動器:

$ sudo dd if=/dev/sdb of=~/myrobot.img bs=32M
Password:
474+2 records in
474+2 records out
15931539456 bytes (16 GB, 15 GiB) copied, 4132.13 s, 3.9
MB/s

if參數為輸入文件,本例中為SD卡。of參數是輸出文件,即克隆卡中的myrobot.img文件。

bs參數是區塊大小,因此將其設置為32M,會使操作更快。

你需要輸入用戶密碼才能啟動。dd命令會將myrobot.img文件創建為主目錄下整個SD卡的克隆文件。dd在完成之前不會有任何輸出,然後會顯示有關操作的統計信息。

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

-Advertisement-
Play Games
更多相關文章
  • TPTABP採用ABP6.0微服務架構。TPTABP擁有更強大的許可權系統,許可權可控制到按鈕、api級別。ABP本身使用多租戶、模塊化、領域驅動設計、微服務等架構設計, 支持多個ORM切換,支持後臺任務(HangFire,Quartz)集成、 事件匯流排、AutoMapper、審計日誌、數據過濾等基礎設 ...
  • 在項目中有的時候可能會用的畫虛線或者設置線的流動效果,這個時候可能會使用到線控制項。 屬性 說明 描述 X1 起始x軸坐標 X1="10" Y1 起始Y軸坐標 Y1="10" X2 結束X軸坐標 X2="100" Y2 結束Y軸坐標 Y2="100" Stroke 線條顏色 Stroke="Red" ...
  • 開源的git管理工具確實非常方便,相信很多小伙伴工作了一些年都會有自己的代碼庫,有的時候做一個新的項目了,需要使用到以前用過的技術,這個時候在去翻找以前的項目,可能就找不到了,但是吧代碼庫都整理到git上就方便多了,而且有什麼新的代碼或者優化等等都可以在任何地方修改和同步,想想還是很厲害的。 下載安 ...
  • 作為.NET開發者,介面是C#必須掌握的知識點,介面是C#中實現多態和組件間互操作性的關鍵機制之一。 介面是一種抽象的類型,它定義了一組成員(方法、屬性、事件等)的規範,但沒有實現代碼。類可以實現一個或多個介面,以表明它們提供了特定的功能。 以下是每個.NET開發者應該掌握的C#介面知識點: **1 ...
  • ## 前言: 在當今信息化社會,網路數據分析越來越受到重視。而作為開發人員,掌握一門能夠抓取網頁內容的語言顯得尤為重要。在此篇文章中,將分享如何使用 .NET構建網路抓取工具。詳細瞭解如何執行 HTTP 請求來下載要抓取的網頁,然後從其 DOM 樹中選擇 HTML 元素,進行匹配需要的欄位信息,從中 ...
  • ## 引言 深拷貝是指創建一個新對象,該對象的值與原始對象完全相同,但在記憶體中具有不同的地址。這意味著如果您對原始對象進行更改,則不會影響到複製的對象 常見的C#常見的深拷貝方式有以下4類: 1. 各種形式的序列化及反序列化。 2. 通過反射機制獲取該對象的所有欄位和屬性信息。遍歷所有欄位和屬性,遞 ...
  • 本文介紹如何使用Centos伺服器部署Docker和Docker Compose. ### 背景信息 本文中的命令使用的是**root用戶**登錄執行, 若不是root用戶要註意許可權問題. 筆者這裡使用的是阿裡雲伺服器, Linux版本為Centos 7.9, 使用SSH遠程連接到伺服器. ### ...
  • ## 固件升級方案綜述 單片機的固件升級方式有很多種, 1、ICP:In Circuit Programing,簡單說就是在單片機開發時使用燒錄器升級程式,比如使用J-Link燒錄單片機程式。 2、ISP:In System Programing,在單片機內部實現了基於通信介面(如串口、I2C、SP ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...