索尼 toio™应用创意开发征文|检测工业平台震动
虽然索尼toio Q宝机器人主要是为儿童教育娱乐开发的,但我认为它在工业等领域也有一定应用潜力。例如,工业领域经常会有某些平面在实际作业中持续震动,导致零件过疲劳、平台失去稳定等问题。而这样的平台往往位于机器内部,从外部很难直接观察。为此,我们可以使用Q宝机器人来持续监测平台的震动情况,当震动导致机器人位移过多,就让机器人移动到预定位置报警,提前避免潜在的风险。
具体操作中,我们需要为机器人预置一个周期间隔,每一个间隔结束后机器人检测自身位置是否发生变化,如果发生变化就移动到预定位置闪灯报警。代码如下:
import asyncio
from toio import *green_cube_location = None
red_cube_location = None
red_cube_arrived = Truedef id_notification_handler(payload: bytearray):global green_cube_locationid_info = IdInformation.is_my_data(payload)if isinstance(id_info, PositionId):green_cube_location = id_info.centerdef id_notification_handler_red(payload: bytearray):global red_cube_locationid_info = IdInformation.is_my_data(payload)if isinstance(id_info, PositionId):red_cube_location = id_info.centerdef motor_notification_handler(payload: bytearray):global red_cube_arrivedmotor_response = Motor.is_my_data(payload)if isinstance(motor_response, ResponseMotorControlTarget):print(motor_response)red_cube_arrived = Trueinit_green_cube_location = green_cube_location.pointdev_list = await BLEScanner.scan(2)
assert len(dev_list) == 2
cube_1 = ToioCoreCube(dev_list[0].interface)
cube_2 = ToioCoreCube(dev_list[1].interface)print("connect cube_1")
await cube_1.connect()
print("connect cube_2")
await cube_2.connect()red = IndicatorParam(duration_ms=0,color=Color(r=255, g=0, b=0)
)green = IndicatorParam(duration_ms=0,color=Color(r=0, g=255, b=0)
)await cube_1.api.indicator.turn_on(green)
await cube_2.api.indicator.turn_on(green)print("start")
await cube_1.api.id_information.register_notification_handler(id_notification_handler)
await cube_2.api.id_information.register_notification_handler(id_notification_handler_red)
await cube_2.api.motor.register_notification_handler(motor_notification_handler)target1 = CubeLocation(point=Point(x=384, y=331), angle=95)
target2 = CubeLocation(point=Point(x=344, y=337), angle=94)# 记录初始位置
init_green_cube_location = green_cube_location.point
init_red_cube_location = red_cube_location.point
print(init_green_cube_location)
print(red_cube_location)# 检测坐标是否改变
while True:if init_green_cube_location != green_cube_location.point or init_red_cube_location != red_cube_location.point:tmp_green_cube_location = green_cube_locationprint(green_cube_location)print("位置变了")# 变红await cube_1.api.indicator.turn_on(red)await cube_2.api.motor.motor_control_target(timeout=5,movement_type=MovementType.Linear,speed=Speed(max=100, speed_change_type=SpeedChangeType.AccelerationAndDeceleration),target=TargetPosition(cube_location=target2,rotation_option=RotationOption.AbsoluteOptimal,),)await cube_1.api.motor.motor_control_target(timeout=5,movement_type=MovementType.Linear,speed=Speed(max=100, speed_change_type=SpeedChangeType.AccelerationAndDeceleration),target=TargetPosition(cube_location=target1,rotation_option=RotationOption.AbsoluteOptimal,),)breakawait asyncio.sleep(1)
await cube_1.api.indicator.turn_on(red)
await cube_2.api.indicator.turn_on(red)
await asyncio.sleep(10)
print("check end ")
await cube_2.api.motor.unregister_notification_handler(motor_notification_handler
)
await cube_1.api.id_information.unregister_notification_handler(id_notification_handler
)
await cube_2.api.id_information.unregister_notification_handler(id_notification_handler_red
)
print("end")
await cube_1.disconnect()
await cube_2.disconnect()
我们可以在平台不同位置安放两个机器人,从而提高检测精度,同时避免单个机器人故障带来的检测失效问题。实际的检测效果示意如下:
检测工业平台震动1
检测工业平台震动2
可以看到,无论哪个机器人的位置发生移动,都会向另一个机器人发出通知,之后两个机器人一同移动到预定位置闪红灯报警。我们还可以增加更多机器人,即使在更大的平面上也能实现较为可靠的检测效果。

从本案例可以看出,Q宝机器人并非只能用于Q12教学用途,在其他领域也有待挖掘的应用潜力。未来,随着Q宝机器人的能力不断迭代,我们或许可以发现更多可以利用Q宝低成本实现的工业等场景的生产力用途。即便无法直接投入实际生产场景,Q宝机器人也可以用来快速搭建设备原型,为更成熟的产品设计提供参考。未来,希望更多开发者加入Q宝生态,将Q宝的潜能发挥到最大水平。
相关文章:
索尼 toio™应用创意开发征文|检测工业平台震动
虽然索尼toio Q宝机器人主要是为儿童教育娱乐开发的,但我认为它在工业等领域也有一定应用潜力。例如,工业领域经常会有某些平面在实际作业中持续震动,导致零件过疲劳、平台失去稳定等问题。而这样的平台往往位于机器内部,从外部很…...
【已解决】 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘.
问题描述 团队都是用mac,只有我自己是windows,启动项目一直报错 Expected linebreaks to be ‘LF‘ but found ‘CRLF‘. 但我不能因为自己的问题去改团队配置,也尝试过该vscode配置默认是LF还是报错 思路 看文章vscode如何替换所有文件的…...
Java8 Lambda.stream.sorted() 方法使用浅析分享
文章目录 Java8 Lambda.stream.sorted() 方法使用浅析分享sorted() 重载方法一升序降序 sorted() 重载方法二升序降序多字段排序 mock代码 Java8 Lambda.stream.sorted() 方法使用浅析分享 本文主要分享运用 Java8 中的 Lambda.stream.sorted方法排序的使用! sorted…...
Neural Networks for Fingerprint Recognition
Neural Computation ( IF 3.278 ) 摘要: 在采集指纹图像数据库后,设计了一种用于指纹识别的神经网络算法。当给出一对指纹图像时,算法输出两个图像来自同一手指的概率估计值。在一个实验中,神经网络使用几百对图像进行训练&…...
ChatGPT推出全新功能,引发人工智能合成声音担忧|百能云芯
人工智能AI科技企业OpenAI公司25日宣布,其聊天应用程序ChatGPT如今具备「看、听、说」能力,至少能够理解口语、用合成语音回应并且处理图像;但专家忧心,以假乱真与深度伪造的乱象可能变本加厉。 国家广播公司新闻网(NBC News)报导…...
Java 实现遍历一个文件夹,文件夹有100万数据,获取到修改时间在2天之内的数据
目录 1 需求2 实现1(第一种方法)2 实现2 (推荐使用这个,快)3 实现3(推荐) 1 需求 现在有一个文件夹,里面会一直存数据,动态的存数据,之后可能会达到100万&am…...
持续集成部署-k8s-命令行工具:基础命令的使用
持续集成部署-k8s-命令行工具:基础命令的使用 1. 资源类型与别名2. 资源操作2.1 创建对象2.2 显示和查找资源2.3 更新资源2.4 修补资源2.5 编辑资源2.6 scale 资源2.7 删除资源3. 格式化输出1. 资源类型与别名 资源类型缩写别名clusterscomponentstatusescsconfigmapscmdaemon…...
使用python脚本的时间盲注完整步骤
文章目录 一、获取数据库名称长度二、获取数据库名称三、获取表名总长度四、获取表名五、获取指定表列名总长度六、获取指定表列名七、获取指定表指定列的表内数据总长度八、获取指定表指定列的表内数据 一、获取数据库名称长度 测试环境是bwapp靶场 SQL Injection - Blind - …...
C++项目:仿mudou库one thread one loop式并发服务器实现
目录 1.实现目标 2.HTTP服务器 3.Reactor模型 3.1分类 4.功能模块划分: 4.1SERVER模块: 4.2HTTP协议模块: 5.简单的秒级定时任务实现 5.1Linux提供给我们的定时器 5.2时间轮思想: 6.正则库的简单使用 7.通用类型any类型的实现 8.日志宏的实现 9.缓冲区…...
【算法训练-贪心算法 一】买卖股票的最佳时机II
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【贪心算法】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…...
单阶段目标检测与双阶段目标检测的联系与区别
🚀 作者 :“码上有钱” 🚀 文章简介 :AI-目标检测算法 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬简介 双阶段目标检测算法与单阶段目标检测算法在工作原理和性能方面存在一些相似与差异之处。下…...
Mysql技术文档--设计表规范式-一次性扫盲
阿丹: 在设计表的时候经常出现一些问题,其实自己很清楚就是因为在设计表的时候没有规范。导致后期加表的时候出现了问题。所以趁着这个假期卷一卷。同时只有在开始的时候 几大范式 在关系型数据库中,数据表设计的基本原则、规则就称为范式。…...
python socket 传输opencv读取的图像
python socket网络编程 将ros机器人摄像头捕捉的画面在上位机实时显示,需要用到socket网络编程,提供了TCP和UDP两种方式 TCP服务器端代码: 创建TCP套接字: s socket(AF_INET, SOCK_STREAM) 创建了一个TCP套接字。SOCK_STREAM 表示这是一个TCP套接字&…...
APACHE NIFI学习之—UpdateAttribute
UpdateAttribute 描述: 通过设置属性表达式来更新属性,也可以基于属性正则匹配来删除属性 标签: attributes, modification, update, delete, Attribute Expression Language, state, 属性, 修改, 更新, 删除, 表达式 参数: 如下列表中,必填参数则…...
BIT-7文件操作和程序环境(16000字详解)
一:文件 1.1 文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明…...
冥想第九百二十八天
1.今天周三,今天晚上日语课上了好久,天气也不好, 2.项目上全力以赴的一天。 3.感谢父母,感谢朋友感谢家人,感谢不断进步的自己。...
深入浅出,SpringBoot整合Quartz实现定时任务与Redis健康检测(一)
目录 前言 环境配置 Quartz 什么是Quartz? 应用场景 核心组件 Job JobDetail Trigger CronTrigger SimpleTrigger Scheduler 任务存储 RAM JDBC 导入依赖 定时任务 销量统计 Redis检测 使用 编辑 注意事项 前言 在悦享校园1.0中引入了Quart…...
Lucene-MergePolicy详解
简介 该文章基于业务需求背景,因场景需求进行参数调优,下文会尽可能针对段合并策略(SegmentMergePolicy)的全参数进行说明。 主要介绍TieredMergePolicy,它是Lucene4以后的默认段的合并策略,之前采用的合并…...
数据的加解密
文章目录 分类特点业务的使用补充 分类 对称加密算法非对称加密算法 特点 对称加密算法 : 加密效率高 !加密和解密都使用同一款密钥 但是有一个问题 : 密钥如何从服务端发给客户端? (假如你直接先将密钥发给对方,要是在过程中被黑客技术破解了,那后面的消息也就泄漏了) (后…...
【Spring】更简单的读取和存储对象
更简单的读取和存储对象 一. 存储 Bean 对象1. 前置工作:配置扫描路径2. 添加注解存储 Bean 对象Controller(控制器存储)Service(服务存储)Repository(仓库存储)Component(组件存储&…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
