60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
||
|
||
import sys
|
||
import os
|
||
import time
|
||
import keyboard
|
||
import grpc
|
||
import numpy as np
|
||
|
||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||
|
||
from generated.cmvr.api import biohead_command_pb2
|
||
from cmvr import CMVRGrpcClient, CMVRErrorCode, FacialExpressionState, JointCmd, Pose3D, RobotCartesian, RobotJointIndexDirection
|
||
|
||
def test_humanoid_robot():
|
||
"""循环获取所有电机状态,按q退出,每个电机信息单独一行并按指定格式打印"""
|
||
print("电机状态监控 (按q退出)\n")
|
||
client = CMVRGrpcClient("192.168.0.222:50052")
|
||
|
||
if not client.is_connected():
|
||
print("连接服务器失败")
|
||
return
|
||
|
||
humanoidRobot = client.get_humanoid_robot("hc01")
|
||
if humanoidRobot is None:
|
||
print("获取机器人失败")
|
||
return
|
||
|
||
try:
|
||
while True:
|
||
if keyboard.is_pressed('q'):
|
||
print("\n退出程序...")
|
||
break
|
||
|
||
# 获取所有关节状态
|
||
result, joint_states = humanoidRobot.get_joint_states()
|
||
if result == CMVRErrorCode.CMVR_SUCCESS and joint_states:
|
||
# 遍历所有状态组和电机
|
||
for status in joint_states:
|
||
for j, name in enumerate(status.name):
|
||
pos = status.position[j] if j < len(status.position) else 0.0
|
||
# 每个电机信息单独一行,按指定格式打印并以逗号结尾
|
||
print(f'{{"{name}", {pos:.6f}}},')
|
||
|
||
time.sleep(0.5)
|
||
# 如需每次刷新屏幕可取消下面一行注释
|
||
# os.system('cls' if os.name == 'nt' else 'clear')
|
||
|
||
except Exception as e:
|
||
print(f"\n错误: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
finally:
|
||
print("监控结束")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
test_humanoid_robot()
|