索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计

目录

  • 一、索尼toio™初入门|多变、灵活、高性能
    • 1.1、拉取仓库和安装依赖
    • 1.2、第一个索尼toio™程序——Hello Q宝!
  • 二、索尼toio™|论一个小型机器人足球赛的实现
    • 2.1、机器人足球赛分析
    • 2.2、基于索尼toio™的足球赛方案设计
  • 三、索尼toio™|小小的Q宝,大大的能量

近期,索尼推出了一款名为索尼toio™可编程的机器人产品,其具有非常强大的开放性和可塑性,借助索尼toio™,开发者不仅能够创作出有趣的互动作品,还可用于探索未来智能新应用,能够打造一个从儿童到成人都可以享受的互动娱乐体验。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第1张图片

索尼toio™的外观很像一台小小的掌上游戏机,白色控制台机身上嵌一块小小的黑白显示屏,搭配两个乒乓球大小、宽仅 32mm 的方块机器人 "Q 宝 ",两个操纵控制环。虽然 Q 宝个头小巧,但它内置六轴传感器、识别感应器、磁力传感器、高性能马达等,能实现灵活移动及定位绝对位置,集索尼黑科技于一身。其产品规格和应用程序编程接口开源,可通过JavaScript、Python、Unity、可视化编程等语言和平台创造出丰富的应用和作品。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第2张图片

一、索尼toio™初入门|多变、灵活、高性能

话不多说,我托朋友小黑弄来了索尼toio™核心基本单元方块来“玩玩”。可以看到索尼toio™核心基本单元也就是核心Q宝的每个方块都配置了高性能马达,最大可以带动200g的物品。方块还内置了传感器,也可以感知自身的位置、方向、倾斜角度、碰撞等信息,并通过声光信号来反馈。方块之间还可以相互通信,实现协同运动,可应用于艺术创作、游戏、人工智能与深度学习等领域的研究开发。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第3张图片

下面,我将参考https://github.com/toio/toio.js,使用JavaScript写出我的第一个 “Hello Q 宝!”。

1.1、拉取仓库和安装依赖

首先使用git clone指令,拉取官方示例代码库:

git clone https://github.com/toio/toio.js.git

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第4张图片

然后cd进入toio.js文件夹,输入yarn install 安装必要的依赖(如果没有yarn,可以输入npm install -g yarn安装yarn),要注意不能使用npm i 安装,不然会报错,然后还得安装以下依赖:

  • 安装lerna:npm install -g lerna
  • 安装noble:npm install --global --production windows-build-tools

安装成功后,输入yarn build后显示如下,即说明安装大功告成:

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第5张图片

1.2、第一个索尼toio™程序——Hello Q宝!

成功安装好以上依赖后,输入yarn example:,即可开始我的第一个索尼toio™程序啦!keyboard-control的这段代码是一个使用键盘来控制索尼toio™做交互式控制,整个程序在运行时会不断监听键盘输入,根据按键触发上下左右不同的移动动作,代码如下:

const keypress = require('keypress')
const { NearestScanner } = require('@toio/scanner')

const DURATION = 700 // ms
const SPEED = {
  forward: [70, 70],
  backward: [-70, -70],
  left: [30, 70],
  right: [70, 30],
}

async function main() {
  // start a scanner to find nearest cube
  const cube = await new NearestScanner().start()

  // connect to the cube
  await cube.connect()

  keypress(process.stdin)
  process.stdin.on('keypress', (ch, key) => {
    // ctrl+c or q -> exit process
    if ((key && key.ctrl && key.name === 'c') || (key && key.name === 'q')) {
      process.exit()
    }

    switch (key.name) {
      case 'up':
        cube.move(...SPEED.forward, DURATION)
        break
      case 'down':
        cube.move(...SPEED.backward, DURATION)
        break
      case 'left':
        cube.move(...SPEED.left, DURATION)
        break
      case 'right':
        cube.move(...SPEED.right, DURATION)
        break
    }
  })

  process.stdin.setRawMode(true)
  process.stdin.resume()
}
main()

这段代码很简单,简单在此分析以下主要逻辑:

  1. 引入 keypress@toio/scanner 模块。
  2. 定义了 DURATIONSPEED 常量。其中 DURATION 表示移动动作的持续时间,SPEED 包含了不同方向的速度设置。(这里可以修改移动的时长和速度)
  3. 创建了一个异步的 main 函数。
  4. main 函数中,通过 NearestScanner 扫描器找到最近的 toio 立方体。
  5. 连接到找到的立方体。
  6. 使用 keypress 模块设置对键盘输入的监听。(这里可以监听上下左右的方向键)
  7. 监听键盘输入事件,在按键触发时执行不同的移动操作。
  8. 如果按下键盘上的 Ctrl + C 或者 q,程序退出。
  9. 根据按下的方向键,调用 cube.move() 方法来控制 toio 的移动。
  10. 最后,设置 stdin 接收原始输入模式并恢复流。

运行程序之后,就可以控制索尼toio™这个核心Q宝来进行基础移动了!比如可以让核心Q宝先向前走50步,然后转向后继续走50步:

索尼Q宝

二、索尼toio™|论一个小型机器人足球赛的实现

2.1、机器人足球赛分析

  1. 为了实现一个小型机器人足球赛,我们需要适当使用多个toio™基本单元,从而实现对机器人的控制和协调。在场地设计时,需要考虑机器人活动的一个合理位置和方向,我们采用3V3的形式,每进一球得一分,
  2. 足球场地:足球场地是小型机器人足球比赛的基础。在设计场地时,可以使用划线、纸板、标杆等材料来标志圈贴切出边界线,利用索尼toio™Q宝配套的操作垫对球场球门位置进行规定。
  3. 控制算法:机器人的控制算法至关重要。基于感测数据,如距离和方向,用户可以控制机器人的速度和方向。实现的算法可使用模糊 PID 控制或模糊神经网络等知名算法。将机器人面向足球或空位踢球,使球尽可能多地穿过对方球队。当然也可以使用索尼toio™配套方向盘,让每个参赛选手自由辅助操控。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第6张图片

  1. 多智能体协同:在小型机器人足球比赛中,机器人需要进行协同和合作,例如传球、阻挡、抢断、守门等。比如每个人分配三个索尼toio™核心Q宝,一个专门用来守门,感知自方球门和对方球员,在对方球员靠近球门时,对其前进路径进行一定的阻拦,另外两个索尼toio™核心Q宝专门用于进攻和协同合作,例如传球、阻挡、抢断等,充分考虑机器人的特性和实际水平,为每个机器人分配任务,并制定相应的策略,提高机器人足球赛的核心竞争力。

2.2、基于索尼toio™的足球赛方案设计

要对索尼toio™核心Q宝进行编程,设计相关的策略来实现机器人的协同比赛,就需要利用传感器获取自身与球的位置信息,一个重要的策略是对机器人进行定位和控制。通过计算机器人与球的相对位置和方向,判断球员角色(进攻、防守、中场),并控制机器人进行合适的动作(移动、停止、旋转等),以达到协同合作和有效控制比赛进程的目的。

  1. 状态感知与决策策略:机器人需要根据实时获取的信息,例如球的位置、敌方位置等,进行状态感知和决策。根据当前比赛场景和规则,机器人也可以判断是否需要修改策略,或者采取某种特定的行动。比如当机器人距离球门较近时,状态感知能提醒机器人放弃进攻而开始组织防守。
  2. 角色运动策略:不同球员角色需要采取不同的运动策略。例如,在进攻时,机器人可以寻找机会前进到对方球门附近并尝试踢球;在防守时,机器人可以尽量靠近对方球员,并通过预判对方的移动来阻止对方进攻;在中场时,机器人可以保持合适的位置,作为球传递的中间站点。
  3. 通信与协同策略:如果可以实现机器人之间的通信与协同,会更好地实现基于队伍的策略。通过互相传递信息,改变战术和策略,增加球员之间的协作,提高整体实力。

下面是一个我使用JavaScript实现toio™基本单元机器人足球的部分核心代码示例:

// 创建toio™基本单元机器人对象
const robot1 = new ToioRobot();
const robot2 = new ToioRobot();
const robot3 = new ToioRobot();

// 设置机器人的初始位置和角色
const players = [
  { id: 1, position: { x: 0, y: 0 }, role: "attacker" },
  { id: 2, position: { x: 10, y: 0 }, role: "defender" },
  { id: 3, position: { x: 5, y: 0 }, role: "midfielder" }
];

// 模拟机器人足球赛的主循环
function mainLoop() {
  // 获取机器人和球的位置信息
  const ballPosition = robot1.getBallPosition();
  const playersPositions = players.map(player => {
    return {
      playerId: player.id,
      position: robot1.getPlayerPosition(player.id)
    };
  });

  // 根据球的位置和角色来执行不同的策略
  playersPositions.forEach(player => {
    const targetPosition = (player.role === "attacker") ? ballPosition : getGoalPosition();
    moveToTargetPosition(player, targetPosition);
  });

  // 每隔一段时间调用主循环函数
  setTimeout(mainLoop, 100);
}

// 移动机器人到目标位置
function moveToTargetPosition(player, targetPosition) {
  const deltaX = targetPosition.x - player.position.x;
  const deltaY = targetPosition.y - player.position.y;

  const direction = Math.atan2(deltaY, deltaX) * 180 / Math.PI;
  const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2);

  if (distance > 1) {
    // 控制机器人移动到目标位置
    robot1.move(player.id, Math.min(100, distance * 5), direction);
  } else {
    // 机器人到达目标位置,停止运动
    robot1.stop(player.id);
  }
}

// 获取球门位置
function getGoalPosition() {
  // 返回球门的目标位置
}

// 启动机器人足球赛
mainLoop();

三、索尼toio™|小小的Q宝,大大的能量

经过体验,首先的感受就是索尼toio™的设计非常简洁而有吸引力。32mm宽大小的立方体本身非常可爱,由一个主体和两个轮子组成,此外,索尼toio™还有一些可选的外壳和配件,可以根据个人喜好进行选择和定制,增加了一些个性化的乐趣。对于开发人员而言,toio™基本单元机器人的灵活性在于它的自由度。这是因为toio™基本单元机器人是一个基于模块化设计的平台,具有可更换的部件,且将所有核心操控系统集成在一个小型的控制面板中。该控制面板可以完全独立于机器人运行,从而将代理映射转化为操纵命令,增加极大的灵活性和定制能力。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第7张图片

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第8张图片

其次,索尼toio™的操作非常简单,提供了各种库和API,使得编写控制和交互代码变得非常容易,可以使用多种编程语言和编程环境,对于各种各样的应用场景都可以更加方便地定制程序实现不同的功能。这种可扩展性不仅对于有编程经验的人来说很友好,对初学者来说也是一个很好的入门工具,经过这段时间阅读代码和文档,可以看到编程接口非常直观和易于理解,几分钟就可以通过简单的命令来控制立方体进行移动、旋转等操作。

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第9张图片

索尼 toio™ 应用创意开发征文|基于索尼 toio™ 的3v3机器人足球大赛设计_第10张图片

对于儿童来说,索尼toio™提供了一个有趣和多样化的娱乐和学习体验。它不仅可以作为玩具,还可以激发孩子们的创造力和逻辑思维,培养孩子们的编程和问题解决能力。而对于高校学生和开发人员来讲,toio™基本单元机器人不仅仅是一个机器人玩具,它是一个完备可定制的机器人平台,其提供了灵活、标准化的开发环境,同时也赋予了消费者和使用者更丰富的互动经验。它们的灵活性和可定制性使得toio™基本单元机器人在许多行业和奇思妙想中都可以扮演重要的角色。

你可能感兴趣的:(机器人,计算机视觉,目标检测,人工智能)