跳轉到內容

Khepera III 工具箱/示例/繪製電池電壓

來自華夏公益教科書

此示例演示瞭如何記錄電池電壓隨時間變化,並在之後使用 Matlab 繪製它。

啟動 Khepera III 機器人,並確保它連線到您的計算機透過 WLAN 或 USB。在以下文字中,我們假設您的機器人透過 USB 連線。如果您使用 WLAN,只需替換+usb+RobotID(例如+203).

將 *battery* 程式複製到機器人上

cd Programs
k3put +usb battery

您現在基本上已經準備好了。但是,為了測試一切是否正常,登入到您的 Khepera III 機器人

k3go +usb

並輸入

cd your_username
./battery

這應該列印類似於以下內容的內容

$BATTERY,0,7.8372,-0.4445,-0.4453,0.0000,76.0000,26.0000

此 NMEA 訊息中的第二個數字 (7.8372) 報告了電池電壓,以伏特 (V) 為單位,通常在 8.2 V(充滿電的電池)和 6.6 V(幾乎沒電的電池)之間。

記錄電池電壓

[編輯 | 編輯原始碼]

我們現在將每秒測量一次電池電壓,並將訊息記錄到計算機上。請注意,您的機器人需要在整個實驗過程中保持與計算機的連線。

在您的計算機上,輸入以下內容

k3run +usb -o battery_measures "/root/your_username/battery -r -w 1000000"

請注意,此指令碼將在後臺啟動程式並立即返回。樣本將儲存在 *k3-192.168.1.2/battery_measures* 檔案中,而不是列印在終端中。(*k3-192.168.1.2* 資料夾由k3run 指令碼自動建立。)

要檢視當前正在儲存的內容,您可以“tail”該檔案

tail k3-192.168.1.2/battery_measures

這將列印輸出檔案的最後 10 行。您甚至可以使用 **-f** 選項來跟蹤測量值

tail -f k3-192.168.1.2/battery_measures

在機器人上,您可以透過輸入以下內容來檢查 *battery* 程式是否正在執行

ps

它列出了所有正在執行的程序。

停止測量

[編輯 | 編輯原始碼]

如果您的機器人正在電池上執行,則電池電壓會下降,直到下降到大約 6.6 V 以下,此時執行 Linux 的 KoreBot 板會崩潰。此時,記錄將自動停止。

如果您希望在機器人崩潰之前停止記錄,您可以透過在機器人上終止 *battery* 程序來手動完成此操作

killall battery

如果您輸入

ps

現在,*battery* 程序應該已經消失。

備選方案 1

[編輯 | 編輯原始碼]

如果您的機器人沒有在實驗過程中連線到計算機,您可以透過輸入以下內容(在機器人上)將樣本儲存到機器人上

./battery -r -w 1000000 > battery_measures

或者,如果您想同時列印樣本

./battery -r -w 1000000 | tee battery_measures

要終止測量,只需按 Ctrl-C。

要從機器人下載測量結果,請在您的計算機上輸入以下內容

k3get +usb battery_measures

請注意,機器人上的磁碟空間非常有限(只有大約 1 MB 是空閒的)。確保您始終在實驗後下載測量結果,並在機器人上刪除檔案(rm battery_measures)。可以使用以下命令查詢可用磁碟空間df -h.

備選方案 2

[編輯 | 編輯原始碼]

您可以使用 **-r** 選項(連續測量)執行 *battery* 程式,也可以在每次想要測量電壓時啟動 *battery* 程式,並且每次只進行一次測量。如果您想要在實驗之前/之後進行測量,或者測量之間的時間間隔更長(例如,每 10 分鐘一次),這將非常有用。

要實現這一點,最好編寫一個簡短的指令碼,透過執行以下行,該指令碼會不時地啟動電池程式

 ssh root@192.168.1.2 "/root/your_username/battery" >> battery_measures

可以在此示例的資料夾中找到示例指令碼(*measure_alternative2.pl*)。

解析結果檔案

[編輯 | 編輯原始碼]

*battery_measures* 檔案包含 NMEA 0183 記錄,我們需要從中提取當前電壓。這可以使用提供的指令碼 *parse_battery_voltage.pl*(Perl)或 *parse_battery_voltage.py*(Python)之一來完成。這兩個指令碼是等效的——選擇您喜歡的任何一個。我們在這裡將堅持使用 Perl 版本。

以以下方式啟動指令碼

./parse_battery_voltage.pl < battery_measures > matlab_battery_voltage

*matlab_battery_voltage* 檔案現在每行包含一個數字,表示相應測量的電壓。

繪製結果

[編輯 | 編輯原始碼]

現在,啟動 Matlab 並輸入

plot_battery_voltage

這是一個非常簡單的 Matlab 指令碼 (m 檔案),它載入 *matlab_battery_voltage* 檔案並繪製曲線。

華夏公益教科書