跳到主要内容

基于 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_xfloat[-80, 155]单位为mm
arm_zfloat[-95, 155]单位为mm

此处的 x 和 z 是相对于机械臂的基座的坐标,单位为毫米。

设定超过机械臂工作空间的值时,机械臂会保持最后一个有效值对应的姿态,比如(155,0)对应的姿态是向前伸到最大,(0,155)对应向上伸到最大,(155,155)是斜向上最大,但是机械臂达不到这个位置,就会保持上一次发送的有效位置。

设置机械臂夹爪开合

claw(pos)

参数名格式输入范围说明
posuint_80-2550对应完全张开,255对应完全闭合

设置机械臂是否开启稳定模式

arm_mode(mode)

参数名格式输入范围说明
modebool0\10不开启,1开启

开启之后机械臂末端会不随着身体的平移而平移(平移指四脚站定躯干运动,而非前后左右迈步平移)。

其余方法

恢复初始状态

reset()

停止所有运动,所有状态全部恢复到初始状态

设置自稳状态

imu(mode)

自稳状态下,机器狗将自动调节姿态角以保持背部处于水平位置,不可在开启时手动设定姿态角。

参数名格式输入范围说明
mode整数0、10代表关闭、1代表开启

perform(mode)

表演模式,机器狗将循环执行预设的动作。

参数名格式输入范围说明
mode整数0、10代表关闭、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转动Roll8转动Pitch9转动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