目录
- 一、索尼toio™初入门|多变、灵活、高性能
- 1.1、拉取仓库和安装依赖
- 1.2、第一个索尼toio™程序——Hello Q宝!
- 二、索尼toio™|论一个小型机器人足球赛的实现
- 2.1、机器人足球赛分析
- 2.2、基于索尼toio™的足球赛方案设计
- 三、索尼toio™|小小的Q宝,大大的能量
近期,索尼推出了一款名为索尼toio™可编程的机器人产品,其具有非常强大的开放性和可塑性,借助索尼toio™,开发者不仅能够创作出有趣的互动作品,还可用于探索未来智能新应用,能够打造一个从儿童到成人都可以享受的互动娱乐体验。
索尼toio™的外观很像一台小小的掌上游戏机,白色控制台机身上嵌一块小小的黑白显示屏,搭配两个乒乓球大小、宽仅 32mm 的方块机器人 "Q 宝 ",两个操纵控制环。虽然 Q 宝个头小巧,但它内置六轴传感器、识别感应器、磁力传感器、高性能马达等,能实现灵活移动及定位绝对位置,集索尼黑科技于一身。其产品规格和应用程序编程接口开源,可通过JavaScript、Python、Unity、可视化编程等语言和平台创造出丰富的应用和作品。
话不多说,我托朋友小黑弄来了索尼toio™核心基本单元方块来“玩玩”。可以看到索尼toio™核心基本单元也就是核心Q宝的每个方块都配置了高性能马达,最大可以带动200g的物品。方块还内置了传感器,也可以感知自身的位置、方向、倾斜角度、碰撞等信息,并通过声光信号来反馈。方块之间还可以相互通信,实现协同运动,可应用于艺术创作、游戏、人工智能与深度学习等领域的研究开发。
下面,我将参考https://github.com/toio/toio.js,使用JavaScript写出我的第一个 “Hello Q 宝!”。
首先使用git clone指令,拉取官方示例代码库:
git clone https://github.com/toio/toio.js.git
然后cd进入toio.js文件夹,输入yarn install 安装必要的依赖(如果没有yarn,可以输入npm install -g yarn安装yarn),要注意不能使用npm i 安装,不然会报错,然后还得安装以下依赖:
安装成功后,输入yarn build后显示如下,即说明安装大功告成:
成功安装好以上依赖后,输入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()
这段代码很简单,简单在此分析以下主要逻辑:
keypress
和 @toio/scanner
模块。DURATION
和 SPEED
常量。其中 DURATION
表示移动动作的持续时间,SPEED
包含了不同方向的速度设置。(这里可以修改移动的时长和速度)main
函数。main
函数中,通过 NearestScanner
扫描器找到最近的 toio 立方体。keypress
模块设置对键盘输入的监听。(这里可以监听上下左右的方向键)cube.move()
方法来控制 toio 的移动。运行程序之后,就可以控制索尼toio™这个核心Q宝来进行基础移动了!比如可以让核心Q宝先向前走50步,然后转向后继续走50步:
索尼Q宝
要对索尼toio™核心Q宝进行编程,设计相关的策略来实现机器人的协同比赛,就需要利用传感器获取自身与球的位置信息,一个重要的策略是对机器人进行定位和控制。通过计算机器人与球的相对位置和方向,判断球员角色(进攻、防守、中场),并控制机器人进行合适的动作(移动、停止、旋转等),以达到协同合作和有效控制比赛进程的目的。
下面是一个我使用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™的设计非常简洁而有吸引力。32mm宽大小的立方体本身非常可爱,由一个主体和两个轮子组成,此外,索尼toio™还有一些可选的外壳和配件,可以根据个人喜好进行选择和定制,增加了一些个性化的乐趣。对于开发人员而言,toio™基本单元机器人的灵活性在于它的自由度。这是因为toio™基本单元机器人是一个基于模块化设计的平台,具有可更换的部件,且将所有核心操控系统集成在一个小型的控制面板中。该控制面板可以完全独立于机器人运行,从而将代理映射转化为操纵命令,增加极大的灵活性和定制能力。
其次,索尼toio™的操作非常简单,提供了各种库和API,使得编写控制和交互代码变得非常容易,可以使用多种编程语言和编程环境,对于各种各样的应用场景都可以更加方便地定制程序实现不同的功能。这种可扩展性不仅对于有编程经验的人来说很友好,对初学者来说也是一个很好的入门工具,经过这段时间阅读代码和文档,可以看到编程接口非常直观和易于理解,几分钟就可以通过简单的命令来控制立方体进行移动、旋转等操作。
对于儿童来说,索尼toio™提供了一个有趣和多样化的娱乐和学习体验。它不仅可以作为玩具,还可以激发孩子们的创造力和逻辑思维,培养孩子们的编程和问题解决能力。而对于高校学生和开发人员来讲,toio™基本单元机器人不仅仅是一个机器人玩具,它是一个完备可定制的机器人平台,其提供了灵活、标准化的开发环境,同时也赋予了消费者和使用者更丰富的互动经验。它们的灵活性和可定制性使得toio™基本单元机器人在许多行业和奇思妙想中都可以扮演重要的角色。