【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

 按步执行结果:

结束!!!

 

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