宇树机器人G1二次开发:人脸识别与交互完整示例
引言
宇树机器人G1是一款功能强大的通用人形机器人,其开放的SDK和API为开发者提供了广阔的二次开发空间。其中,人脸识别与交互是机器人实现智能化、拟人化交互的核心功能之一。本文将提供一个完整的示例,展示如何利用宇树G1的视觉和运动能力,实现一个从人脸检测、识别到主动交互的完整流程。
环境准备
硬件要求
- 宇树机器人G1一台
- 机器人已开机并连接至同一局域网
- 开发用计算机(Windows/Linux/macOS)
软件依赖
# Python 环境(推荐3.8+)pipinstallunitree_robotics_sdk# 宇树官方SDKpipinstallopencv-python# 图像处理pipinstallnumpy# 数值计算pipinstallface_recognition# 人脸识别库(可选,用于本地识别)网络配置
确保开发机与机器人IP可达,通常机器人默认IP为192.168.123.xx,可通过路由器或直连方式配置。
核心代码实现
1. 初始化机器人连接与视觉模块
importcv2importnumpyasnpimporttimefromunitree_robotics_sdkimportUnitreeRobot,CameraStreamclassG1FaceInteraction:def__init__(self,robot_ip="192.168.123.161"):""" 初始化机器人连接与视觉流 :param robot_ip: 宇树G1机器人IP地址 """# 初始化机器人控制接口self.robot=UnitreeRobot(robot_ip)# 初始化头部摄像头流(G1头部配备高清摄像头)self.camera=CameraStream(robot_ip,camera_id=0)# 0: 头部主摄像头# 人脸识别相关变量self.known_face_encodings=[]# 已知人脸编码self.known_face_names=[]# 对应人名# 交互状态self.last_interaction_time=0self.interaction_cooldown=3.0# 交互冷却时间(秒)print(f"[INFO] 已连接到机器人:{robot_ip}")defload_known_faces(self,face_data_dir="./known_faces"):""" 加载已知人脸数据(用于识别特定人员) :param face_data_dir: 已知人脸图片目录 """importosimportface_recognitionforfilenameinos.listdir(face_data_dir):iffilename.endswith(('.jpg','.png','.jpeg')):# 加载图片image_path=os.path.join(face_data_dir,filename)image=face_recognition.load_image_file(image_path)# 提取人脸编码encodings=face_recognition.face_encodings(image)iflen(encodings)>0:self.known_face_encodings.append(encodings[0])self.known_face_names.append(os.path.splitext(filename)[0])print(f"[INFO] 已加载{len