【Buzz】簡介及第一個案例

  一  什麼是Buzz?

Buzz是一種面向異構機器人集羣編程語言,允許用戶用簡潔的腳本來表達複雜的羣體行爲

它是基於C語言開發,可用於任何類型的機器人軟件,可與ROS框架集成(例如RosBuzz)

目前支持支持Linux MacOSX系統。     

在羣體內,bytecode字節碼文件會被上傳到羣內不同機器人上,每個機器人的BVM(Buzz Virtual Machine)會執行該字節碼文件。Buzz的調試文件與字節碼文件分離,節省了機器人上運行內存。

Buzz是基於ARGos模擬器開發調試的。

二  Buzz相關概念

離散羣:羣被視爲離散的機器人集合,每個機器人獨立運行BVM和Bytecode。

按步執行:每一步包含四個階段,包括處理接收到的消息、讀取傳感器數據、執行step腳本、廣播消息。在過程中,必須設置每步的長度,便於啓動下一步之前終止上一步的所有階段。

通信模型:Buzz假設羣內的所有機器人能夠通過位置通信來交換信息。位置通信是一種基於gossip的信息交換形式,在這種方式中,機器人在接收到消息後能夠估計消息源的相對位置。

三  Buzz腳本的編譯與執行

工具bzzparsebuzzasmbzzdeasmbzzc、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第一個案例(羣體梯度距離計算)

1)編寫Buzz腳本代碼testgradient.bzz
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>

場景中6foot-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

 按步執行結果:

結束!!!

 

 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章