机器人生产开源解决方案 智能老年机器人

小夏 科技 更新 2024-01-28

作者: Liu Ying, Wang Haoyu, Dang Yujuan

所属机构: University of Science and Technology Beijing

指导老师:刘新阳、李琳

1.1 行业背景

随着越来越多的服务机器人进入家庭,应用场景多样化、专业化,机器人产业生态不断完善,服务机器人爆发式增长。 如何健康养老,帮助养老,一直是近年来的热门话题。 在中华人民共和国发布的《中国制造2025》战略文件中,国家层面在医疗、养老服务、快递服务、多功能工业服务等智能服务机器人领域进行了行动部署。 《扩大和提升信息消费三年行动计划》文件提到,要开发居家服务机器人等智能健康养老服务产品,满足老年人需求。 “智慧助老”活动已在全国开展,帮助老年人享受数字化、智能化带来的便利。

数字时代,让老年人“不掉线”。 助力老年产品层出不穷,结合老年人的身心特点,有针对性地开发面向老年人的温度产品。 除了面向老年人的各种数字化产品外,面向老年人的服务机器人也引起了大众的关注,如何更智能地帮助老年人也成为老年人服务机器人技术发展的新方向。 “分会椅”——老年智能机器人,顺应行业市场发展方向,响应国家政策。

1.2 需求分析

1)智能轮椅机器人需求分析。

产品开发的目标受众是行动不便、腿脚不灵活的人群,满足用户外出户外活动的需求。 我国人口老龄化,逐步进入老龄化社会,许多大城市老年人口比例接近20%。 同时,还有近6000万肢体残疾人,其中许多人因行走困难而依靠轮椅进行正常生活。 然而,普通轮椅功能单一,远远不能满足其需求,因此智能轮椅机器人市场具有巨大的发展空间。

2)智能轮椅机器人与普通滑板车分析。

目前市面上的轮椅产品大多只能满足用户简单的户外活动需求,而且大多只支持电动自行车等功能,并没有真正解决行动不便人群的痛点。 在特殊情况下,例如爬楼梯或从高处拿东西,用户仍然无法单独解决问题。 与现有的轮椅产品不同,“科学椅”考虑到行走不便人士和部分手脚不灵活的人群,进行功能设计和产品设计,有效解决使用者的问题。

2.1 引言

团队基于中国社会老龄化带来的市场需求,结合对市面上轮椅功能简单、解决真实痛点难的分析,设计了一款具有多种功能的老年人智能轮椅,具有遥控、语音、手势控制等功能。 更加人性化,注重安全问题。

机器人模型的实际图纸。

除了轮椅行走和爬楼梯的基本功能外,作品还具有人脸智能识别、语音命令控制、蓝牙无线遥控、手势识别控制和紧急提醒五大智能功能,让轮椅智能贴心,让老人也能享受到科技带来的便利。

2.2 详细功能

2.2.1.人脸识别解锁功能

智能轮椅前方有摄像头,轮椅电源启动后,用户面对智能轮椅摄像头,轮椅自动进行人脸识别。 成功识别用户后,解锁智能轮椅,增强智能轮椅的安全性。

2.2.2 蓝牙无线遥控功能

使用手机**并安装本作品专用手机APP,安装完成后打开手机蓝牙,打开APP后,进入APP首页,选择“连接设备”。 蓝牙连接成功后,APP会自动提醒蓝牙连接成功,并显示以下操作页面,触摸屏可控制轮椅。 使用蓝牙无线遥控器可以实现以下功能:

手机蓝牙APP键盘界面。

蓝牙遥控器

成功连接蓝牙后,点击或长按界面中的虚拟按钮,向前、向后、向左、向右移动,实现轮椅的蓝牙远程行走。

(2)变速齿轮

连接蓝牙成功后,点击“速度+”虚拟按钮,切换轮椅的行走速度档位。 有四种速度档位可供选择。

(3) 座椅调节

成功连接蓝牙后,点击“坐起来”或“坐下”虚拟按钮,实现轮椅座椅升降调节。 座椅高度可独立控制,无固定档位。

(4)模拟爬楼梯

成功连接蓝牙后,控制智能轮椅走到楼梯台阶,按住“轨道升降”,当前轨道与楼梯台阶大致平行时,松开虚拟按钮,然后虚拟按下“前进”。

按下按钮前进适当距离,按“轨道下降”将前轨道放在楼梯上并将轮椅提升到与楼梯相似的斜坡上,最后按“前进”到轮椅上稳稳爬楼梯。

2.2.3 语音命令功能

语音命令功能默认关闭,人脸识别后,可以通过说出预设的语音密码(如“芝麻开门”)来开启语音命令功能,避免他人声音干扰轮椅的控制。 说“关闭语音”以关闭语音命令。

在智能轮椅附近说出“前进”、“后退”、“停止”、“左转”、“右转”等命令(命令名称与蓝牙遥控器中的按钮名称相同),智能轮椅在“听到”命令后会立即做出相应的动作,实现语音命令功能。

2.2.4 手势识别功能

针对特殊残疾人,提供手势识别功能控制行走,可提供前后、左右转弯功能。 打开轮椅并通过人脸识别后,调整摄像头方向对准轮椅上的使用者,用户在摄像头前做出“前进”和“停止”等手势,智能轮椅会自动识别手势并做出相应的动作(注:本作品中使用的手势训练器由智能云提供)。

2.2.5 紧急提醒

如果轮椅意外翻车,智能轮椅会自动检测轮椅翻车,并自动向老人的孩子或紧急联系人发送电子邮件,告知智能轮椅意外翻车,请尽快关注。 邮件的发件人需要提前设置,如有必要,也可以改为短信发送。

3.1 超过view 机器人系统

这项工作主要使用 explorer 模块构建。 机器人系统的结构大致分为:机械本体、控制系统、人机交互系统、感知系统、上位机PC。

机械体由Explorer机器人套件组装而成;控制系统采用STM32F407作为主控板,是整个机器人控制系统的核心,接受和处理传感器数据和消息,控制机器人的行为人机交互系统基于蓝牙串口模块、手机APP、语音模块,实现手机的蓝牙遥控功能和语音控制感知系统由摄像头和MPU6050组成,摄像头采集图像数量,通过路由器发送到上位机进行图像处理,MPU6050采集姿态数据后发送到STM32进行姿态求解主要负责图像处理的上位机PC接到下位机发出的轮椅翻倒消息,并发邮件通知老人和儿童危险情况。

3.2 机械机身

机械体由Explorer Robot Kit组装而成,底盘采用双履带底盘,履带式比轮式抓地力更强,适用环境广,双节履带造就平稳爬坡的可行性,前后履带采用直流电机驱动。 对于座椅的升降,伺服是驱动动力**,采用复合连杆传动,使座椅升降。

机械机身。 3.3 控制系统

控制系统采用STM32F407单片机作为主控板,在集成开发环境Keil5中使用标准库开发。 单片机上电后,处于等待开锁状态,摄像头将图像传输到上位机,上位机发送人脸识别成功消息后,权限解锁,用户可以控制机器人。 单片机直接控制整个机器人的运动,其指令**有三个方向:

1)手机上的蓝牙应用程序。

2)语音识别模块,识别人声。

3)上位机手势识别。

同时,单片机不断获取MPU6050采集到的原始姿态数据,进行姿态融合求解,检测到轮椅翻倒后,通过路由器将翻车消息通知上位机。

过程流程。 3.4 人机交互系统

交互系统基于HC-05蓝牙串口模块、手机APP蓝牙通信和LD3320语音识别模块。 人脸识别解锁后,打开手机APP,连接HC-05蓝牙,即可在手机APP上远程控制机器人。 语音识别模块可以识别人的声音,可以通过说出预设的语音密码(如“芝麻开门”)来开启语音功能,从而避免他人声音对轮椅控制的干扰,实现语音控制。

3.5 感知系统

感知系统由摄像头和MPU6050组成。 摄像头采集的图像数据通过路由器传输到上位机,在上位机上完成人脸识别和手势识别。 MPU6050,通过IIC通信协议,将加速度计数据和陀螺仪数据发送到STM32单片机,由微机中的程序进行姿态计算,得到轮椅的RPY角轮椅翻滚后,俯仰角或翻滚角过大,使轮椅翻倒被察觉。

3.6 上位机 PC

主机PC为板载PC,连接路由器WiFi,运行Python程序,基于OpenCV实现人脸识别,利用云智能提供的手势训练器识别手势,通过socket编程实现与下位机的以太网TCP通信,并将图像处理结果发送给下位机在收到下位机轮椅翻倒的消息后,程序立即将WiFi切换到可以上网的WiFi热点,并使用SMTP协议发送电子邮件,告知老人和儿童危险情况。

1)市面上几乎所有的轮椅产品都只实现了普通滑板车的功能,本产品是针对产品受众进行设计分析的,并在滑板车的基础上,实现了上下楼梯、老年人拿高物、语音控制动作等功能。

2)为了满足用户对速度的需求,设计了四个档位,提供不同的行走速度。

3)采用关节双轨爬升结构设计,在保证前进速度的同时,采用稳定的梯子步态,实现梯子需求。

4)为防止轮椅丢失,设置了面部解锁功能,不开锁时锁定,无法行走。

5)针对特殊残疾人,提供手势识别功能控制行走,可提供前后、左右旋转功能。

6)为防止事故发生时无人知晓,设置了危险感应和紧急提醒功能,当轮椅翻倒或受到猛烈撞击时,及时通知老年亲属。

from socket import *

import cv2

from pil import image, imagedraw, imagefont

import smtplib

from email.mime.text import mimetext

from email.mime.multipart import mimemultipart

import pywifi,time

from pywifi import const

import os

import sys

import numpy as np

import time

import threading

from aip import aipbodyanalysis

import base64

def cv2imgaddtext(img, text, left, top, textcolor=(0, 255, 0), textsize=20):

if (isinstance(img, np.ndarray)):确定 opencv** 的类型是否为。

img = image.fromarray(cv2.cvtcolor(img, cv2.color_bgr2rgb))

创建一个可以在给定图像上绘制的对象。

draw = imagedraw.draw(img)

字体的格式。

fontstyle = imagefont.truetype(

simsun.ttc", textsize, encoding="utf-8")

绘制文本。

draw.text((left, top), text, textcolor, font=fontstyle)

转换回 OpenCV 格式。

return cv2.cvtcolor(np.asarray(img), cv2.color_rgb2bgr)

读取人脸数据。

def read_images(path , sz=none):

c=0x,y =,names=

for dirname,dirnames,filenames in os.walk(path):

for subdirname in dirnames:

subject_path=os.path.join(dirname,subdirname)

for filename in os.listdir(subject_path):

try:if(filename==".directory"):

continue

filepath=os.path.join(subject_path,filename)

im=cv2.imread(os.path.join(subject_path,filename),cv2.imread_grayscale)

if(im is none):

print("imges"+filepath+"is none")

if(sz is not none):

im=cv2.resize(im,sz)

x.append(np.asarray(im,dtype=np.uint8))

y.append(c)

except :

print("unexpected error")

raisec=c+1

names.append(subdirname)

return [names,x,y]

def face_rec():

cap=cv2.videocapture(1)

now=time.time()

while true:

ret, frame= cap.read()

x,y=frame.shape[0:2]

small_frame= cv2.resize(frame,(int(y/2),int(x/2)))

result = small_frame.copy()

gray = cv2.cvtcolor(small_frame, cv2.color_bgr2gray)

faces = face_cascade.detectmultiscale(gray, 1.3, 5)

for (x, y, w, h) in faces:

result = cv2.rectangle(result, (x, y), x + w, y + h), 255, 0, 0), 2)

roi = gray[x:x + w, y:y + h]

try:roi = cv2.resize(roi, (200, 200), interpolation=cv2.inter_linear)

p_label, p_confidence] = model.predict(roi)

print("置信度 =", p_confidence)

# print(names[p_label])

if( p_confidence < 6000 )

# cv2.puttext(result, names[p_label],(x,y-20),cv2.font_hershey_**x,1,255,2)

result=cv2imgaddtext(result,"认可成功,欢迎使用",x,y-20,(0,255,0),20)

cv2.imshow("recognize_face", result)

cv2.waitkey(3000)

cap.release()

cv2.destroyallwindows()

return 1

except:

continue

nnow = time.time()

cv2.imshow("recognize_face", result)

超时。 if nnow - now > 30:

result=cv2imgaddtext(result,"超时,识别失败",x,y-20,(0,255,0),20)

cv2.imshow("recognize_face", result)

cv2.waitkey(3000)

cap.release()

cv2.destroyallwindows()

return -1

if cv2.waitkey(30) &0xff == ord('q'):

breakcap.release()

cv2.destroyallwindows()

return 0

read_dir = "./data"

names, x, y] = read_images(read_dir)

y = np.asarray(y, dtype=np.int32) 生成训练模型。

model = cv2.face.eigenfacerecognizer_create()

训练模型。

model.train(np.asarray(x), np.asarray(y))

face_cascade = cv2.cascadeclassifier('haarcascade_frontalface_default.xml')

if __name__ == "__main__":

while true:

zzz=face_rec()

print(zzz)

if(zzz==1):

print('识别成功')

breakif(zzz==-1) :

print('超时。 ')

continue

x=eval(input("请输入:"))

if(x==1):

continue

else:break

def wifi_connect_status():

wifi = pywifi.pywifi()

iface = wifi.interfaces()[0] #acquire the first wlan card,maybe not

if iface.status() in [const.iface_connected,const.iface_inactive]:

print("wifi connected!")

return 1

else:print("wifi not connected!")

return 0

def scan_wifi():

wifi = pywifi.pywifi()

iface = wifi.interfaces()[0]

iface.scan()

time.sleep(1)

basewifi = iface.scan_results()

for i in basewifi:

print("wifi scan result:{}".format(i.ssid))

print("wifi device mac address:{}".format(i.bssid))

return basewifi

def connect_wifi(wifiname="redmi", ssid="1234abcd"):

wifi = pywifi.pywifi()

ifaces = wifi.interfaces()[0]

print(ifaces.name()) 输出无线网卡的名称。

ifaces.disconnect()

time.sleep(3)

profile = pywifi.profile() 配置文件。

profile.SSID = WiFiName WiFi 名称。

profile.auth = const.Auth Alg Open 需要密码。

profile.akm.append(const.AKM类型WPA2PSK)。

profile.cipher = const.密码类型:CCMP加密单元。

profile.密钥 = SSID WiFi 密码。

ifaces.删除所有网络配置文件() 以删除其他配置文件。

tmp_profile = ifaces.添加网络配置文件(profile)以加载配置文件。

ifaces.connect(tmp_profile)

time.sleep(5)

isok = true

if ifaces.status() == const.iface_connected:

print("connect successfully!")

else:print("connect failed!")

time.sleep(1)

return isok

# def main():

# wifi_connect_status()

##scan_wifi()

# connect_wifi()

fromaddr = "[email protected]"发件人的QQ邮箱地址。

toaddr = "[email protected]"收件人的QQ邮箱地址。

msg = mimemultipart() 实例化一个 mimemultipart

msg['from'] = fromaddr 设置。

msg['to'] = toaddr 设置目标的地址。

msg['subject'] = "老机器人的提醒"设置邮件的主题。

def clientsend(servername , serverport, sentence):

clientsocket=socket(af_inet, sock_stream)

clientsocket.connect((servername , serverport))

clientsocket.send(sentence.encode())

clientsocket.close()

def clientrec(servername , serverport) :

clientsocket=socket(af_inet, sock_stream)

clientsocket.connect((servername , serverport))

print('连接成功')

recvsentence=clientsocket.recv(30)

print(recvsentence)

print('收到的字符串:'+recvsentence.decode('gbk'))

return recvsentence.decode('gbk')

def smtpsend()

body = '【老年人智能轮椅反馈】:检测到轮椅翻车,老人可能有危险'

msg.attach(mimetext(body, 'plain'第二个“简单”是格式化正文。

server = smtplib.smtp("smtp.qq.com",587)设置 SMTP 服务器及其对应的 SMTP 接口。

server.starttls() 中。

server.login(fromaddr ,"oowcfni**eeidefh"第二个参数是您刚刚保存的电子邮件发件人的最后一个授权代码。

text = msg.作为 string() 来转换消息的格式。

server.sendmail(fromaddr, toaddr, text)。

server.quit() 结束。

print('电子邮件已成功发送')

# x=50

## while x :

## clientsend('192.168.8.163', 2001,'rr')

## x=x-1

def accidentrec()

while 1:

# sentence='2'

# sentence=sentence.encode()

# clientsocket.send(sentence)

global clientsocket

recvsentence=clientsocket.recv(30)

print(recvsentence)

print('收到的字符串:'+recvsentence.decode('gbk'))

rec=recvsentence.decode('gbk')

if(rec.strip() =='g'):

clientsocket.close()

wifi_connect_status()

connect_wifi()

smtpsend()

connect_wifi("gl-ar150-97a", "goodlife")

clientsocket=socket(af_inet, sock_stream)

clientsocket.connect(('192.168.8.1',2001))

# clientsocket=socket(af_inet, sock_stream)

# clientsocket.connect(("192.168.8.1",2001))

# print('连接成功')

# sentence='l'

# sentence=sentence.encode()

# clientsocket.send(sentence) 通知下级计算机人脸已成功解锁。

# print('l 已发送')

# accidentrec()

# threading.thread(target=accidentrec).start()

# wifi_connect_status()

# connect_wifi()

# smtpsend()

# connect_wifi("gl-ar150-97a", "goodlife")

# clientsocket=socket(af_inet, sock_stream)

# clientsocket.connect(('192.168.8.1',2001))

# while true:

# zzz=face_rec()

# print(zzz)

# if(zzz==1):

# print('识别成功')

# break

# if(zzz==-1) :

# print('超时。 ')

# continue

## x=eval(input("请输入:"))

## if(x==1):

## continue

## else:

## break

# sentence='l'

# sentence=sentence.encode()

# clientsocket.send(sentence) 通知下级计算机人脸已成功解锁。

# print('L 已发送,下位计算机已解锁')

app_id = '27841617'

api_key = 'vnunc94dch5rqz7wggeboptk'

secret_key = 'ijtl5gcqsawqmrauioh6enppokgxiufd'

client = aipbodyanalysis(app_id, api_key, secret_key)

读**"""

def get_file_content(filepath):

with open(filepath, 'rb') as fp:

return fp.read()

cap = cv2.videocapture(1)

while 1:

ret, frame=cap.read()

cv2.imwrite('1.jpg',frame)

image = get_file_content('1.jpg')

x=client.gesture(image)

# if x==0 :

# print("none")

# else :

# y=client.gesture(image)

# print(y)

if x.get('result') :

y=x.get('result')

print(y[0]['classname'])

sentence=y[0]['classname']

sentence=sentence.encode()

#clientsocket.send(sentence)

cv2.imshow("img",frame)

if cv2.waitkey(1) == ord('q') :

breakcap.release()

cv2.destroyallwindows()

#clientsocket.close()

#clientsend('192.168.8.1',2001,'gusdfghwn')

# print('结束')

# cameraip = ""

# cap = cv2.videocapture(cameraip)

# while 1:

# ret,frame=cap.read()

# cv2.imshow("hl", frame)

# cv2.waitkey(100)

# while 1:

# rec = clientrec('10.38.201.27' , 8080 )

# if(rec.strip() == 'warning!!!') :

# smtpsend()

# else:

# print('不成功')

*详情请参阅:【S034】长者智能机器人

相似文章

    智能客服机器人公司

    随着智能客服机器人的兴起,越来越多的企业开始意识到智能客服的重要性,并会考虑在企业内部引入机器人产品。然而,在众多智能客服机器人企业中,要找到合适的合作伙伴并不容易。因此,在选择协作机器人公司时,需要牢记很多关键点。一 选择智能客服机器人公司的要点 .明确自己的需求 因为每个行业对客户服务的需求都不...

    智能温室采摘机器人

    智能温室采摘机器人的设计与应用是现代农业领域的创新成果。该机器人不仅自动化 智能化程度高,而且能够准确高效地完成采摘任务,为农业生产带来诸多效益。首先,智能采摘机器人采用先进的计算机视觉技术和深度习算法,可以识别并准确定位水果的位置和成熟度。这大大减少了传统收割方式的人力投入和时间成本,也避免了人为...

    机器人智能工作站

    外观独特,采用中空结构臂 腕 焊接电缆内置紧凑结构,可在狭小空间内焊接,重量轻,防尘防滴,安全性高,安装机身盖板,可在各种恶劣环境下使用,工作空间大,运行速度快,重复定位精度高,适用于对焊接质量要求高的焊接应用。设备配置 可选机器人 CRP RH W LR Mate ID 可选工具 焊枪RH 风冷A...

    机器人管线包 解决机器人流水线乱象的有力工具!

    机器人包 告别流水线混乱,让生产线焕然一新!在现代工业制造中,机器人已经成为生产线上的得力助手。然而,随着机器人的广泛使用,管道混乱的问题日益突出。为了解决这个问题,一个创新的产品 机器人管线包应运而生!整齐有序,提高生产效率!通过合理的设计和布局,机器人管线包可以将各种管道整齐有序地存放在一起。这...

    什么是智能AI股票交易机器人?

    智能人工智能机器人是指使用人工智能技术进行交易的自动化系统。这种类型的机器人会分析大量市场数据 财务指标和其他相关信息,以便快速做出交易决策。以下是智能 AI 机器人可能包含的一些功能和特性 数据分析 该机器人能够处理和分析大量市场数据,包括交易量 财务报表等。模型训练 通过机器学习习算法,机器人可...