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 庫的程式,您永遠不應該並行執行訪問感測器或執行器的任何其他程式,因為這會導致此類程式獲得錯誤的感測器值或崩潰。