跳轉到內容

Khepera III 工具箱/工具箱/程式

來自華夏公益教科書,開放的書籍,開放的世界

程式資料夾包含一系列在 Khepera III 機器人上執行並與其感測器和執行器(電機)互動的有用程式和演算法。這些程式也是 實現自己的演算法 的有用模板。在本章中,我們將簡要解釋如何使用這些程式。

程式列表

[編輯 | 編輯原始碼]

紅外感測器(包括兩個紅外地板感測器)

  • infrared_ambient: 測量所有紅外感測器的環境紅外光。
  • infrared_proximity: 測量所有紅外感測器對障礙物的距離。

電機

  • motor_initialize: 初始化兩個電機。此程式必須在開啟機器人後啟動。
  • motor_setspeed: 設定電機速度。
  • motor_stop: 立即停止兩個電機。
  • motor_setposition: 設定電機編碼器的當前位置。
  • motor_gotoposition: 將電機驅動到特定的電機編碼器位置。
  • motor_getposition: 返回電機編碼器的當前位置。
  • motor_configuration: 列印兩個電機的完整配置(暫存器)。
  • motor_setspeedprofile: 設定梯形速度曲線。

超聲波

  • ultrasound_enable: 啟用或停用超聲波感測器。
  • ultrasound: 使用超聲波感測器測量與障礙物的距離。

電池

  • battery: 返回電池的當前狀態。

一般

  • firmware_version: 返回 dsPIC 和電機 PIC 的韌體版本。
  • test_math: 測試一些數學函式。此程式更多地充當模板,而不是有用的程式。
  • tcp_server: 演示如何編寫接受 TCP 連線的程式。
  • i2c: 通用 I2C 工具。
  • i2c_readstream*: 從 I2C 裝置讀取資料流。

運動

  • motion_braitenberg: 使用布萊滕貝格演算法實現物體跟隨、避障和牆體跟隨。
  • motion_arrowkeys: 允許使用鍵盤在周圍駕駛機器人。
  • motion_followline: 使機器人沿著地面的線條行駛。
  • motion_forwardbackward: 使機器人持續向前和向後移動。
  • motion_random: 使機器人隨機在周圍行駛。
  • motion_spiral: 使機器人沿著螺旋線移動。

里程計

  • odometry_track: 使用編碼器值基於差速驅動里程計跟蹤機器人的位置。
  • odometry_goto: 使用里程計跟蹤其位置,將機器人驅動到給定的目標位置。

標有星號 (*) 的程式目前不完整,需要進行一些修改。

啟動程式

[編輯 | 編輯原始碼]

每個程式都儲存在 Programs 的子資料夾中 - 其中包含其原始碼、Makefile、編譯後的二進位制檔案以及可能的其他資料。二進位制檔案是為 Korebot 平臺(執行 Linux 核心 2.4 的 ARM 處理器)編譯的,因此只能在 Korebot 上執行。

要使用程式,請先將其複製到您的機器人上

cd Programs
k3put +usb infrared_proximity

(如果您的機器人透過 WLAN 連線,請將 +usb 替換為 +RobotID。)然後,透過鍵入以下內容登入到您的機器人

k3go +usb

並在那裡啟動程式

cd your_username
./infrared_proximity

該程式將直接在終端視窗中寫入其輸出。

獲取幫助

[編輯 | 編輯原始碼]

每個程式在使用 -h 選項啟動時都會列印一些幫助文字,例如

./infrared_proximity -h

將程式的輸出重定向到檔案

[編輯 | 編輯原始碼]

在某些情況下,您可能希望將程式的輸出(例如紅外距離測量值)寫入檔案,而不是將其顯示在螢幕上。標準 Linux 工具提供了多種實現此目的的方法

要將輸出寫入 機器人上的檔案,只需在啟動程式時將輸出重定向到檔案即可

./infrared_proximity > my_infrared_proximity_measures

請注意,機器人的可用空間只有大約 1 MB。

要將輸出寫入 計算機上的檔案,請透過 SSH 啟動程式並將輸出重定向到檔案。對於不熟悉 SSH 的人來說,這可能會有點棘手。但幸運的是,有一個 Khepera III 指令碼可以自動完成所有這些工作

k3run +usb -o my_output_file /root/your_username/infrared_proximity -r

如果您的機器人透過 WLAN 連線,請將 +usb 替換為 +RobotID。這會透過網路連線傳輸程式的輸出並將其儲存在計算機上 k3-192.168.1.2 資料夾中的 my_output_file 檔案中。這實際上比將輸出寫入機器人上的檔案更快(即使這聽起來不直觀),因為 WLAN 傳輸通常比寫入機器人的快閃記憶體更快。

同時執行多個程式

[編輯 | 編輯原始碼]

您可以在機器人上同時執行多個程式。例如,如果您想要使用鍵盤控制機器人(motion_arrowkeys)並同時記錄紅外感測器測量值(infrared_ambient, infrared_proximity),或者跟蹤機器人的路徑(odometry_track),這可能很有意義。這也適用於使用後臺執行的程式監控電池電量。

要實現這一點,您可以在同一個機器人上多次登入(k3go),在後臺執行一個程式(例如./infrared_ambient > my_measures &),或從計算機啟動一些程式(k3run).

但是,有一些事情需要注意

  • 同時執行兩個都設定電機速度的程式 沒有 意義。每次一個程式設定速度時,舊速度都會被覆蓋,從而導致相當不可預測的行為。
  • 一個程式可能會減慢另一個程式的速度。CPU 是一種共享且有限的資源(使用top檢查 CPU 使用率),但更重要的是用於與機器人感測器和執行器通訊的 I2C 匯流排。因此,您應該避免使用多個程式並行讀取同一個感測器值。

重要說明:如果您正在執行基於 K-Team libkorebot 庫的程式,您永遠不應該並行執行訪問感測器或執行器的任何其他程式,因為這會導致此類程式獲得錯誤的感測器值或崩潰。

華夏公益教科書