一 什麼是Buzz?
Buzz是一種面向異構機器人集羣的編程語言,允許用戶用簡潔的腳本來表達複雜的羣體行爲。
它是基於C語言開發,可用於任何類型的機器人軟件,可與ROS框架集成(例如RosBuzz)。
目前支持支持Linux 和 MacOSX系統。
在羣體內,bytecode字節碼文件會被上傳到羣內不同機器人上,每個機器人的BVM(Buzz Virtual Machine)會執行該字節碼文件。Buzz的調試文件與字節碼文件分離,節省了機器人上運行內存。
Buzz是基於ARGos模擬器開發調試的。
二 Buzz相關概念
離散羣:羣被視爲離散的機器人集合,每個機器人獨立運行BVM和Bytecode。
按步執行:每一步包含四個階段,包括處理接收到的消息、讀取傳感器數據、執行step腳本、廣播消息。在過程中,必須設置每步的長度,便於啓動下一步之前終止上一步的所有階段。
通信模型:Buzz假設羣內的所有機器人能夠通過位置通信來交換信息。位置通信是一種基於gossip的信息交換形式,在這種方式中,機器人在接收到消息後能夠估計消息源的相對位置。
三 Buzz腳本的編譯與執行
工具:bzzparse、buzzasm、bzzdeasm、bzzc、bzzrun
文件:*.bzz(Buzz腳本代碼文件,Buzz Script)、*.bo(字節碼文件)、*.bdb(調試信息文件)、*.basm(彙編文件)
編譯過程:(假設Buzz腳本代碼文件爲A.bzz)
1)bzzparse命令將A.bzz腳本代碼文件編譯爲A.basm彙編文件;
2)bzzasm命令將A.basm彙編文件編譯爲A.bo字節碼文件和A.bdb調試信息文件;(bzzdeasm是bzzasm的反編譯過程)
bzzc命令綜合了bzzparse命令和bzzasm命令,也就是說,可以通過 $ bzzc A.bzz 命令直接編譯出A.bo和A.bdb文件。
機器人執行命令:$ bzzrun A.bo A.bdb (-trace參數用於輸出堆棧信息,-I 參數用於添加依賴的bzz文件路徑)
四 運行Buzz第一個案例(羣體梯度距離計算)
function init() {
if(id == 0) {
# Source robot
mydist = 0.
}
else {
# Other robots
mydist = 1000.
# Listen to other robots' distances
neighbors.listen("dist_to_source",
function(value_id, value, robot_id) {
log("ROBOT ", id, ": value = ", value, " from robot ", robot_id, " at ", neighbors.get(robot_id).distance)
mydist = math.min(
mydist,
neighbors.get(robot_id).distance + value)
log("ROBOT ", id, ": mydist is now ", mydist)
})
}
}
function step() {
neighbors.broadcast("dist_to_source", mydist)
log("ROBOT ", id, ": mydist = ", mydist)
}
function destroy() {
}
mydist是本機器人到源機器人的距離,源機器人是id=0的機器人;
ARGos模擬器會按步執行調用step方法,step方法發送本機器人的全局變量mydist;
本機器人偵聽鄰居機器人發送過來的“dist_to_source”數據,計算並更新本地mydist;
2) 編譯腳本代碼:$ bzzc testgradient.bzz
3) 配置ARGos模擬器實驗文件testgradient.argos(詳細配置文件參考src/testing/test_experiment.argos文件)
3.1)配置控制器
<controllers>
<buzz_controller_footbot id="bcf">
<actuators>
<differential_steering implementation="default" />
<leds implementation="default" medium="leds" />
<range_and_bearing implementation="default" />
</actuators>
<sensors>
<range_and_bearing implementation="medium" medium="rab" show_rays="true" noise_std_dev="0" />
</sensors>
<params bytecode_file="testgradient.bo" debug_file="testgradient.bdb"/>
</buzz_controller_footbot>
</controllers>
<params>用於指定argos要執行的buzz腳本。
3.2)配置場景機器人
<arena size="50, 50, 4" center="0,0,2">
<distribute>
<position method="uniform" min="-2,-2,0" max="2,2,0" />
<orientation method="gaussian" mean="0,0,0" std_dev="360,0,0" />
<entity quantity="6" max_trials="100">
<foot-bot id="fb" rab_data_size="100">
<controller config="bcf" />
</foot-bot>
</entity>
</distribute>
</arena>
場景中6個foot-bot機器人,位置均勻分佈在[-2,-2,0]和[2,2,0]的範圍內,方向高斯分佈在[0,0,0]和[360,0,0]的範圍內,控制器使用第一步中定義的bcf控制器。
3.3)配置Buzz編輯器
<visualization>
<qt-opengl>
<user_functions label="buzz_qt" />
</qt-opengl>
</visualization>
4)啓動argos模擬器,執行Buzz腳本
命令: $ argos3 –c testgradient.argos
按步執行結果: