基于 Python 开发使用
XGO V2 内置了运动控制库文件 xgolib.py,教育库 xgoedu.py 和高级库 xgoadvance.py,开发者可以直接调用相关接口函数来控制机器狗。
运动库下载:xgolib.py(26 KB)
初始化
以下为初始化代码:
#导入 xgolib
from xgolib import XGO
#实例化 dog
dog = XGO(port='/dev/ttyAMA0',version="xgolite")
判断机器狗的类型
由于 xgolite 与 xgomini 在运动性能和参数上有差异,为了准确控制机器狗的运动,可通过:
dog.read_firmware() 函数检测机器狗的类型
示例代码:
from xgolib import XGO
dog = XGO(port='/dev/ttyAMA0',version="xgolite")
version=dog.read_firmware()
if version[0]=='M':
print('XGO-MINI')
dog = XGO(port='/dev/ttyAMA0',version="xgomini")
dog_type='M'
else:
print('XGO-LITE')
dog_type='L'
通过此段代码可以判断狗的类型,若变量 dog_type 为'M'则狗的类型为 XGOMINI,若为'L'则类型为 XGOLITE。
运动控制库介绍
移动相关方法
前后左右平移
move(direction, step)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
direction | 字符 | 'x'、'X'、'y'、'Y' | 'x'或'X'使机器狗前进或后退,'y'或'Y'使机器狗左移或者右移 |
step | 数字 | x:[-25,25],y:[-18,18] | 该参数代表平移步长,根据方向,正值代表前进或左移,负值代表后退或右移。输入值超过范围时,按照极限值移动。 |
旋转
turn(step)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
step | 数字 | [-150,150] | 该参数代表旋转速度,单位为°/s,正值为左转,负值为右转。 |
原地踏步
mark_time(data)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
data | 数字 | [10,35] | 该参数代表原地踏步抬腿高度,单位为mm,输入为0时停止原地踏步 |
改变迈步频率
pace(mode) 速度 = 步频 x 步幅
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
mode | 字符串 | ['normal','slow','high'] | 该参数代表迈步频率,normal为默认步频,low为慢速步频,high为高速步频 |
停止移动
stop()
移动相关方法示例
#机器狗以18mm步长前进
dog.move('x',18)
#机器狗以5mm步长右移
dog.move('y',-5)
#下句代码可以正常执行,会以18mm左移
dog.move('Y',30)
#机器狗以60°/s的速度左转
dog.turn(60)
#机器狗以高速步频进行运动
dog.pace('high')
#机器狗以25mm的抬腿高度进行原地踏步
dog.mark_time(25)
#机器狗停止原地踏步
dog.mark_time(0)
#机器狗停止移动
dog.stop()
库中基于这些方法封装了一系列方法以便于使用。
方法名 | 说明 |
---|---|
move_x(step) | 前后移动,相当于move('x', step) |
move_y(step) | 左右移动,相当于move('y', step) |
forward(step) | 前进,相当于move('x', abs(step)) |
back(step) | 后退,相当于move('x', -abs(step)) |
left(step) | 左移,相当于move('y', abs(step)) |
right(step) | 右移,相当于move('y', -abs(step)) |
turnleft(step) | 左转,相当于turn(abs(step)) |
turnright(step) | 右转,相当于turn(-abs(step)) |
位姿相关方法
调节位姿时,机器狗四条腿足端位置不发生改变,机身的位置或角度发生变化。
机身位置平移
translation(direction, data)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
direction | 单字符或字符列表 | 'x'、'y'、'z'或包含以上值的列表 | 'x'代表前后平移,'y'代表左右平移,'z'代表身高 |
data | 数字 | x:[-35,35],y:[-18,18],z:[75,115] | 该参数代表机身位置平移距离,单位为mm |
机身姿态调整
attitude(direction, data)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
direction | 单字符或字符列表 | 'r'、'p'、'y'或包含以上值的列表 | 'r'代表滚转角,'p'代表俯仰角,'y'代表偏航角 |
data | 数字 | r:[-20,20],p:[-15,15],y:[11,11] | 该参数代表机身姿态调节幅度,单位为° |
机身周期平移
periodic_tran(direction, period)
机器狗机身将以指定周期和方向进行往复平移,幅度为位置平移极限值的一半,可以同时进行多个方向的周期运动。机身周期运动和整机运动不可同时进行。
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
direction | 单字符或字符列表 | 'x'、'y'、'z'或包含以上值的列表 | 'x'代表前后平移,'y'代表左右平移,'z'代表身高 |
period | 数字 | [1.5,8] | 该参数代表运动周期,单位为s;输入0时代表停止运动 |
机身周期旋转
periodic_rot(direction, period)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
direction | 单字符或字符列表 | 'r'、'p'、'y'或包含以上值的列表 | 'r'代表滚转角,'p'代表俯仰角,'y'代表偏航角 |
period | 数字 | [1.5,8] | 该参数代表运动周期,单位为s;输入0时代表停止运动 |
位姿相关方法示例
#机身向前平移18mm
dog.translation('x',18)
#机身向右平移10mm,身高设置为100mm
#既可以输入单个值,也可以输入列表以控制多个方向的移动
dog.translation(['y','z'],[-10,100])
#机身俯仰角设置为10°,偏航角设置为-4°,滚转角设置为8°
dog.attitude(['p','y','r'],[10,-4,8])
#机身以3s的周期,进行前后往复平移
dog.periodic_tran('x',3)
#机身以3s的周期进行滚转角往复转动,以7.4s周期进行偏航角往复转动
dog.periodic_rot(['r','y'],[3,7.4])
#停止偏航角的往复转动
dog.periodic_rot('y',0)
机械臂相关方法
设置机械臂末端位置
arm( arm_x, arm_z)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
arm_x | float | [-80, 155] | 单位为mm |
arm_z | float | [-95, 155] | 单位为mm |
此处的 x 和 z 是相对于机械臂的基座的坐标,单位为毫米。
设定超过机械臂工作空间的值时,机械臂会保持最后一个有效值对应的姿态,比如(155,0)对应的姿态是向前伸到最大,(0,155)对应向上伸到最大,(155,155)是斜向上最大,但是机械臂达不到这个位置,就会保持上一次发送的有效位置。
设置机械臂夹爪开合
claw(pos)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
pos | uint_8 | 0-255 | 0对应完全张开,255对应完全闭合 |
设置机械臂是否开启稳定模式
arm_mode(mode)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
mode | bool | 0\1 | 0不开启,1开启 |
开启之后机械臂末端会不随着身体的平移而平移(平移指四脚站定躯干运动,而非前后左右迈步平移)。
其余方法
恢复初始状态
reset()
停止所有运动,所有状态全部恢复到初始状态
设置自稳状态
imu(mode)
自稳状态下,机器狗将自动调节姿态角以保持背部处于水平位置,不可在开启时手动设定姿态角。
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
mode | 整数 | 0、1 | 0代表关闭、1代表开启 |
perform(mode)
表演模式,机器狗将循环执行预设的动作。
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
mode | 整数 | 0、1 | 0代表关闭、1代表开启 |
单腿控制
leg(leg_id, data)
控制指定腿的足端位置
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
leg_id | 整数 | 1、2、3、4 | 分别代表左前腿、右前腿、右后腿、左后腿 |
data | 长度为3的数字列表 | x:[-35,35],y:[-18,18],z:[75,115] | 该参数代表足端位置,单位为mm |
其余方法示例
#设置右前腿足端坐标为(10mm,-12mm,90mm)
dog.leg(2,[10,-12,90])
舵机控制
motor(motor_id, data)
控制舵机旋转角度
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
motor_id | 整数或整数列表 | [11,12,13,21,22,23,31,32,33,41,42,43] | 第一位数字代表舵机所在的腿,第二位数字代表在该腿上的位置,从下到上依次是1,2,3 |
data | 数字或数字列表 | 下:[-65, 73],中:[-66, 93],上:[-31, 31] | 该参数代表足端位置,单位为° |
舵机示例
#设置右前腿中舵机转动角度为30°
dog.motor(22,30)
#设置右前腿上舵机转动角度为10°,左后腿下舵机转动角度为-20°
dog.motor([23,41],[10,-20])
单腿舵机卸载
unload_motor(leg_id)
使一条腿上的三个舵机卸载,不输出力矩,之后可以随意用手转动,一般用于编写动作
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
leg_id | 整数 | 1,2,3,4 | 分别代表左前腿、右前腿、右后腿、左后腿 |
所有舵机卸载
unload_allmotor()
使所有舵机卸载,不输出力矩,可以随意用手转动
单腿舵机加载
load_motor(leg_id)
使一条腿上的三个舵机保持当前位置加载,输出力矩,之后不可以用手转动,一般用于编写动作
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
leg_id | 整数 | 1,2,3,4 | 分别代表左前腿、右前腿、右后腿、左后腿 |
所有舵机加载
load_allmotor()
使所有舵机保持当前位置加载,输出力矩,之后不可以用手转动
设置舵机转动速度
motor_speed(speed)
调节舵机转动速度,适用于单独控制舵机的情况
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
speed | 整数 | [0,255] | 0为最低速,255为最高速 |
修改蓝牙名称
bt_rename(name)
重新修改蓝牙名称,调用该函数后蓝牙会断开链接
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
name | 字符串 | 长度不大于10 | 机器狗的蓝牙名称格式为XGO_xxx,xxx为可修改部分,仅支持ascii码中的字符。 |
执行预设动作
action(action_id)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
action_id | 整数 | [1,255] | ID与动作对应关系见下表 |
ID | 动作 | ID | 动作 | ID | 动作 |
---|---|---|---|---|---|
1 | 趴下 | 2 | 站起 | 3 | 匍匐前进 |
4 | 转圈 | 5 | 原地踏步 | 6 | 蹲起 |
7 | 转动Roll | 8 | 转动Pitch | 9 | 转动Yaw |
10 | 三轴转动 | 11 | 撒尿 | 12 | 坐下 |
13 | 招手 | 14 | 伸懒腰 | 15 | 波浪 |
16 | 左右摇摆 | 17 | 求食 | 18 | 找食物 |
19 | 握手 | 20 | 拜年 |
标定舵机位置
calibration(state)
如果开机后,某些关节出现了明显的位置偏差,可以调用该功能进行标定。其他情况请谨慎使用
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
state | 整数 | [0,1] | 1 进入标定状态,此时舵机卸力,然后将机器狗摆至标定状态,小腿与地面平行,大腿与躯干呈90°,躯干与地面平行;0 完成标定 |
读取相关方法
读取舵机角度
read_motor()
读取12个舵机的角度, 读取成功则返回长度为12的列表,对应编号[11,12,13,21,22,23,31,32,33,41,42,43]的舵机角度, 读取失败则返回空列表
读取电池电量
read_battery()
读取当前电池电量, 读取成功则返回1-100的整数,代表电池剩余电量百分比, 读取失败则返回0。
读取姿态角度
read_roll()
read_pitch()
read_yaw()
读取当前姿态角度,读取成功则浮点数,读取失败则返回0
教育库介绍
XGO-lite V2 内置了教育库文件 xgoedu.py,可以直接导入使用。
也可以在此下载:https://github.com/Xgorobot/XGO-PythonLib
初始化
以下为初始化代码:
#导入 xgoedu
from xgoedu import XGOEDU
#实例化 edu
edu = XGOEDU()
屏幕绘图
需要先杀掉自启动 main.py 进程,否则会屏幕刷新冲突
画直线
lcd_line(x1,y1,x2,y2,color=(r,g,b),width=width)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
x1,y1,x2,y2 | 数字 | x1 x2:[0,320] y1 y2:[0,240] | x1,y1为初始点标 x2,y2为终止点坐标 |
color(可缺省) 默认为白色 | rgb元组 | r g b:[0,255] | color为线颜色 |
width(可缺省) 默认为2 | 数字 | width为线宽 |
画圆弧
lcd_circle(x1,y1,x2,y2,angle0,angle1,color=(255,255,255),width=2)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
x1,y1,x2,y2 | 数字 | x1 x2:[0,320] y1 y2:[0,240] | x1,y1,x2,y2为定义给定边框的两个点 |
angle0,angle1 | 数字 | angle0 angle1:[0,360] | angle0为初始度 angle1为终止角度 |
color(可缺省) 默认为白色 | rgb元组 | r g b:[0,255] | color为圆弧颜色 |
width(可缺省) 默认为2 | 数字 | width为圆弧宽 |
画矩形
lcd_rectangle(x1,y1,x2,y2,fill=None,outline=(255,255,255),width=2)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
x1,y1,x2,y2 | 数字 | x1 x2:[0,320] y1 y2:[0,240] | x1,y1为初始点标 x2,y2为终止点坐标 |
fill(可缺省) 默认为None | rgb元组 | r g b:[0,255] | fill为填充颜色 None则为不填充 |
outline(可缺省) 默认为白色 | rgb元组 | r g b:[0,255] | width为线颜色 |
width(可缺省) 默认为2 | 数字 | width为线宽 |
显示文字
可显示中文与英文使用微软雅黑字体,字体大小可调节
lcd_text(x,y,content,color=(255,255,255),,fontsize=15)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
x,y | 数字 | x y:[0,320] | x,y为初始点标 |
content | 字符串 | content为显示内容 | |
color(可缺省) 默认为白色 | rgb元组 | r g b:[0,255] | color为线颜色 |
fontsize(可缺省) 默认为15 | 数字 | fontsize为字体大小 |
显示图片
lcd_picture(filename,x=0,y=0)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
filename | 字符串 | 图片文件路径,请使用jpg图片 | |
x,y(可缺省) 默认x,y为0 | 数字 | x y:[0,320] | x,y为初始点标 |
清除屏幕
lcd_clear()
按键检测
xgoButton(button)
参数名 | 格式 | 输入范围 | 返回值 |
---|---|---|---|
button | 指定字符串 | ["a","b","c","d"] | False未按下 True按下 |
音频功能
播放音频
xgoSpeaker(filename)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
filename | 字符串 | 音频文件路径 |
录制音频
xgoAudioRecord(filename="record.wav",seconds=5)
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
filename(可缺省) 默认"record.wav" | 字符串 | 录制音频的文件名 | |
seconds(可缺省) 默认为5 | 数字 | 录制文件的长度(秒) |
摄像头功能
开启摄像头
cameraOn(filename="camera")
调用api后会进入相机模式,按a键为照相,按b键为开始录像,再次按b键停止,按c键为退出
参数名 | 格式 | 输入范围 | 说明 |
---|---|---|---|
filename(可缺省) 默认"camera" | 字符串 | 拍摄照片、视频的文件名 照片保存为jpg格式 视频保存为mp4格式 |
AI 功能
此系列的 api 核心功能是调取一帧图像进行分析并返回结果,可在参数传入图片的路径,实现对单张图片的检测。如需实时分析摄像头画面,请配合while使用,下面为示例代码:
手势识别单张图片:
#导入xgoedu
from xgoedu import XGOEDU
#实例化edu
edu = XGOEDU()
#对同级目录下的camera.jpg进行手势识别
result=edu.gestureRecognition("camera.jpg")
#打印识别结果
print(result)
实时通过摄像头进行手势识别:
#导入xgoedu
from xgoedu import XGOEDU
#实例化edu
edu = XGOEDU()
#循环进行摄像头识别,按c键退出
while True:
result=edu.gestureRecognition() #缺省参数,默认使用摄像头识别
print(result)
if dog.xgoButton("c"): #c键按下退出循环
break
手势识别
gestureRecognition(target="camera")
参数名 | 格式 | 说明 | 返回值 |
---|---|---|---|
target(可缺省) 默认"camera" 即使用摄像头捕捉图像 | 字符串 | target为图像文件的路径 | (ges,(x,y)) ges为手势识别结果 目前包括的手势有: ["1","2","3","4","5","Good","Ok","Rock","Stone"] 坐标值xy |
YOLO识别
yoloFast(target="camera")
参数名 | 格式 | 说明 | 返回值 |
---|---|---|---|
target(可缺省) 默认"camera" 即使用摄像头捕捉图像 | 字符串 | target为图像文件的路径 | (object,(x,y)) object为YOLO识别结果 目前包括的物体有: ['person','bicycle','car','motorbike','aeroplane','bus','train','truck','boat','trafficlight','firehydrant','stopsign','parkingmeter','bench','bird','cat','dog','horse','sheep','cow','elephant','bear','zebra','giraffe','backpack','umbrella','handbag','tie','suitcase','frisbee','skis','snowboard','sportsball','kite','baseballbat','baseballglove','skateboard','surfboard','tennisracket','bottle','wineglass','cup','fork','knife','spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hotdog','pizza','donut','cake','chair','sofa','pottedplant','bed','diningtable','toilet','tvmonitor','laptop','mouse','remote','keyboard','cell phone','microwave','oven','toaster','sink','refrigerator','book','clock','vase','scissors','teddy bear','hair drier','toothbrush'] 坐标值xy |
人脸识别
face_detect(target="camera")
参数名 | 格式 | 说明 | 返回值 |
---|---|---|---|
target(可缺省) 默认"camera" 即使用摄像头捕捉图像 | 字符串 | target为图像文件的路径 | [x,y,w,h] 人脸识别框的 x坐标,y坐标,宽度,高度 |
情绪识别
emotion(target="camera")
参数名 | 格式 | 说明 | 返回值 |
---|---|---|---|
target(可缺省) 默认"camera" 即使用摄像头捕捉图像 | 字符串 | target为图像文件的路径 | (emotion,(x,y)) emotion包括: ['Angry','Happy','Neutral','Sad','Surprise'] 坐标值xy |
年龄性别识别
agesex(target="camera")
参数名 | 格式 | 说明 | 返回值 |
---|---|---|---|
target(可缺省) 默认"camera" 即使用摄像头捕捉图像 | 字符串 | target为图像文件的路径 | (gender,age,(x,y)) gender包括['Male', 'Female'] age包括['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)'] 坐标值 x,y |