【Buzz】简介及第一个案例
一 什么是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 robotmydist = 0.}else {# Other robotsmydist = 1000.# Listen to other robots' distancesneighbors.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
按步执行结果:
结束!!!
【Buzz】简介及第一个案例相关推荐
- SpringMVC简介及第一个MVC程序
文章目录 SpringMVC 一. 关于SpringMVC 1.MVC 2.Spring 1.Spring简介 2.Spring的7个模块 3.Spring优点 4.Spring核心机制 5.Spri ...
- C++桌面应用开发(Qt学习)--Qt简介及第一个Qt程序
Qt简介 历史: 1991 奇趣科技 优点:跨平台:接口简单,易上手:简化了内存管理操作 成功案例:Linux桌面环境:WPS:谷歌地图等 创建一个Qt程序 点击创建项目后,选择项目路径以及给项目起名 ...
- 【概念简介】编辑器及第一个Javas cript程序
[概念简介]编辑器及第一个Javas cript程序 Javas cript编辑器 在编写Javas cript代码的过程中,一款好的编辑器能让我们事半功倍.目前市面上流行的Javas cript编辑 ...
- 从一个案例看系统优化
10月27日,由子衿技术团队首席架构师白鳝(徐戟)老师在"DBA+南京群"进行了一次关于"从一个案例看系统优化"的线上主题分享.小编特别整理出其中精华内容,供大 ...
- 2020车载凯立德懒人包下载_华为HarmonyOS App开发工具DevEco Studio下载安装及第一个HarmonyOS App实战教程...
2020年9月10日,华为开发者大会发布了鸿蒙(HarmonyOS)2.0.HarmonyOS是一套全场景操作系统.从理论上讲,HarmonyOS可以在任何平台上运行(包括但不限于PC.手机.平板电脑 ...
- 【Vue3.0】Vue3.0简介-指令-过滤器-案例D2.0
[Vue3.0]Vue3.0简介-指令-过滤器-案例 一.Vue3.0简介 1.1.vue3.0与vue2.0对比 vue2.0中绝大多数的API与特性,在vue3.0中同样支持.但是vue3.0中新 ...
- DL之HNN:Hopfield神经网络(HNN之DHNN、CHNN)的相关论文、简介、使用案例之详细攻略
DL之HNN:Hopfield神经网络(HNN之DHNN.CHNN)的相关论文.简介.使用案例之详细攻略 导读:Hopfield神经网络(HNN)是一种具有循环.递归特性,结合存储和二元系统的神经网络 ...
- 【操作系统】HarmonyOS App开发工具HUAWEI DevEco Studio下载安装及第一个HarmonyOS App实战教程
路标 DevEco Studio简介 DevEco Studio的下载安装 安装过程演示 开发第一个基于Java的TV App 微信公众号原文链接:点击查看 2020年9月10日,华为开发者大会发布了 ...
- 华为HarmonyOS App开发工具DevEco Studio下载安装及第一个HarmonyOS App实战教程
路标 DevEco Studio简介 DevEco Studio的下载安装 安装过程演示 开发第一个基于Java的TV App 微信公众号原文链接:点击查看 2020年9月10日,华为开发者大会发布了 ...
- JUnit基础及第一个单元测试实例(JUnit3.8)
JUnit基础及第一个单元测试实例(JUnit3.8) 单元测试 单元测试(unit testing) ,是指对软件中的最小可测试单元进行检查和验证. 单元测试不是为了证明您是对的,而是为了证明您没有 ...
最新文章
- python基础知识整理 第二节:容器(list tuple dict)
- 【播放器SDK】Android如何实现固定竖屏播放视频
- Linux基础系列(四)系统用户和组管理
- 2021年春季学期-信号与系统-第九次作业参考答案-第四小题
- 【commons】Bean工具类——commons-beanutils之BeanUtils
- 【NLP-ChatBot】搜索引擎的最终形态之问答系统(FAQ)详述
- 编写CGI小结(Java)
- YbtOJ#652-集合比较【Treap】
- Python小白的数学建模课-B5. 新冠疫情 SEIR模型
- 轻量级J2EE持久层解决方案,MiniDao-PE版 1.5.4【版本发布】
- arcgis分隔图层重复出文件_【干货】ArcGIS不可或缺的制图技巧,处理好细节才能让图更专业!...
- BGP华为、思科选路规则
- LINUX获得当前用户名
- Docker 清理数据卷 volumes
- CGContextRef绘图-iOS球形波浪加载进度控件-HcdProcessView详解 1
- 机器算法基础——回归分析
- 南京信息工程大学计算机博士点,南京信息工程大学2021年招收攻读博士学位研究生专业及考试科目...
- ThinkAdmin for PHP后台管理系统
- 【Python 23】52周存钱挑战3.0(循环计数for与range)
- 一加 Ace Pro怎么样?颜值性能它都有