树莓派+Jupyter玩转Yanshee机器人:从零搭建到人脸识别实战

张开发
2026/4/7 16:20:47 15 分钟阅读

分享文章

树莓派+Jupyter玩转Yanshee机器人:从零搭建到人脸识别实战
树莓派Jupyter玩转Yanshee机器人从零搭建到人脸识别实战当教育机器人遇上树莓派的强大计算能力和Jupyter Notebook的交互式编程体验会碰撞出怎样的火花Yanshee作为一款开源人形机器人平台正成为编程教学和创客项目的热门选择。本文将带你从零开始用最直观的方式掌握机器人开发的完整流程。1. 开发环境搭建连接机器人与编程世界Yanshee机器人的核心是一块树莓派计算模块这为开发者提供了熟悉的Linux环境和丰富的Python生态支持。与传统机器人开发不同我们推荐使用Jupyter Notebook作为主要开发工具它的交互式特性特别适合教学和快速原型验证。1.1 网络连接配置确保所有设备处于同一局域网是开发的第一步。Yanshee提供了两种连接方式基础模式通过机器人内置的2.4GHz WiFi热点连接开机后等待30秒让系统完成启动在设备WiFi列表中选择Yanshee-开头的热点默认密码通常为yanshee123不同批次可能不同高级模式接入现有路由器网络# 通过SSH修改网络配置 ssh pi机器人IP # 默认密码raspberry sudo nano /etc/wpa_supplicant/wpa_supplicant.conf添加以下配置后重启network{ ssid你的WiFi名称 psk你的WiFi密码 }1.2 Jupyter环境访问成功连接网络后通过浏览器访问Jupyter服务获取机器人IP地址短按胸前按钮说出IP地址机器人会语音播报当前IP或在路由器管理界面查看已连接设备浏览器访问http://机器人IP:8888默认密码通常为yanshee首次登录建议立即修改创建新笔记本点击New → Python3重命名为有意义的名称如face_detection.ipynb提示如果遇到连接问题尝试关闭电脑防火墙或更换浏览器。Chrome和Firefox兼容性最佳。2. YanAPI基础让机器人动起来YanAPI是Yanshee的专用控制库封装了机器人各项功能的Python接口。我们先从最简单的语音交互开始体验。2.1 初始化与语音控制在Jupyter单元格中输入以下代码并执行import YanAPI from time import sleep # 初始化API连接 YanAPI.yan_api_init() # 自动检测本地机器人 # 文本转语音 YanAPI.start_voice_tts(你好我是Yanshee机器人, waitTrue) sleep(1) # 给语音完成留出时间 # 控制头部运动 YanAPI.set_servo_angle(head_yaw, 30, 1) # 头部左右转动 YanAPI.set_servo_angle(head_pitch, -15, 1) # 头部上下点头常见伺服电机名称对照表部件参数名运动范围单位头部左右head_yaw-90~90度头部上下head_pitch-30~45度右肩r_shoulder-90~90度右肘r_elbow0~150度2.2 动作组编程机器人动作通常需要多个关节协同工作。YanAPI提供了动作组功能来简化这一过程# 定义跳舞动作序列 dance_moves [ {servo:r_shoulder, angle:45, time:0.5}, {servo:l_shoulder, angle:-45, time:0.5}, {servo:head_yaw, angle:30, time:0.3}, {servo:head_yaw, angle:-30, time:0.3}, {servo:r_elbow, angle:90, time:0.4} ] # 执行动作组 YanAPI.set_servos_angle(dance_moves) # 保存为预设动作 YanAPI.save_servos_angles(my_dance, dance_moves) # 后续调用 YanAPI.play_servos_angles(my_dance)3. 视觉能力开发OpenCV实战Yanshee配备了500万像素摄像头结合预装的OpenCV环境可以实现丰富的计算机视觉应用。3.1 摄像头基础使用首先测试摄像头采集功能import cv2 import numpy as np from matplotlib import pyplot as plt %matplotlib inline # 初始化摄像头 cap cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) # 捕获一帧 ret, frame cap.read() if ret: # 转换为RGB格式显示 plt.imshow(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) plt.axis(off) plt.show() cap.release()3.2 人脸检测实现利用OpenCV的预训练模型实现实时人脸检测# 加载Haar级联分类器 face_cascade cv2.CascadeClassifier(cv2.data.haarcascades haarcascade_frontalface_default.xml) def detect_faces(): cap cv2.VideoCapture(0) while True: ret, frame cap.read() if not ret: break gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces face_cascade.detectMultiScale(gray, 1.3, 5) # 绘制检测框 for (x,y,w,h) in faces: cv2.rectangle(frame, (x,y), (xw,yh), (255,0,0), 2) YanAPI.set_servo_angle(head_yaw, x/6.4-50, 0.2) # 头部跟随 cv2.imshow(Face Detection, frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows() # 启动检测 detect_faces()人脸检测参数优化建议scaleFactor1.05-1.3控制图像金字塔缩放minNeighbors3-6越高检测越严格minSize(30,30)可过滤太小误检4. 项目实战智能迎宾机器人综合运用所学知识我们开发一个能识别访客并打招呼的完整应用。4.1 系统架构设计摄像头采集 → 人脸检测 → 语音问候 → 动作响应 ↘ 表情识别 → 个性化回应4.2 核心代码实现import YanAPI import cv2 import time class GreetingBot: def __init__(self): self.face_cascade cv2.CascadeClassifier( cv2.data.haarcascades haarcascade_frontalface_default.xml) self.cap cv2.VideoCapture(0) self.last_greet_time 0 def run(self): while True: ret, frame self.cap.read() if not ret: continue gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces self.face_cascade.detectMultiScale(gray, 1.2, 5) if len(faces) 0 and time.time() - self.last_greet_time 10: self.greet_visitor() self.last_greet_time time.time() cv2.imshow(Visitor Detection, frame) if cv2.waitKey(1) 0xFF ord(q): break self.cap.release() cv2.destroyAllWindows() def greet_visitor(self): YanAPI.start_voice_tts(欢迎光临我是Yanshee, waitTrue) YanAPI.set_servo_angle(head_pitch, -10, 0.5) YanAPI.set_servo_angle(r_arm, 30, 0.3) time.sleep(0.5) YanAPI.set_servo_angle(r_arm, -30, 0.3) # 启动机器人 bot GreetingBot() bot.run()4.3 功能扩展建议增加人脸识别库记录常客信息集成情感分析API实现更智能的互动添加MQTT协议支持远程控制使用MediaPipe实现更精确的姿态估计在项目开发过程中我发现机器人伺服电机的响应速度会显著影响用户体验。通过实测将动作间隔控制在300-500ms之间最为自然过快的连续指令可能导致动作丢失。另外视觉处理最好保持在15FPS以上这需要在算法复杂度和实时性之间做好平衡。

更多文章