GoogleChrome是由Google开发的免费网页浏览器。Chrome是化学元素“铬”的英文名称,过去也用Chrome称呼浏览器的外框。Chrome相应的开放源代码计划名为Chromium,而GoogleChrome本身是非自由软件,未开放全部源代码。
XGO使用树莓派做为机器狗的大脑,推荐使用VScode对XGO进行编程,可以通过一下步骤进行开发:
sh复制代码sshpi@192.168.1.2其中pi是默认用户名,192.168.1.2是树莓派的IP地址。
通过这些步骤,你就可以使用VScode对树莓派进行编程了。这种方法使你可以在舒适的桌面环境中编写代码,同时利用树莓派的硬件进行实际运行和测试。
通过命令安装xgo的python库
sudopipinstall--upgradexgo-pythonlibpipinstall--upgradexgo-pythonlib使用前确保\home\pi\model文件夹中包含所有的模型文件
以下为初始化代码:
#导入xgolibfromxgolibimportXGO#实例化dogdog=XGO("xgolite")判断狗的类型由于xgolite与xgomni在运动性能和参数上有差异,为了准确控制狗的运动,可通过dog.read_firmware()函数检测机器狗的类型,示例代码:
fromxgolibimportXGOdog=XGO("xgolite")version=dog.read_firmware()ifversion[0]=='M':print('XGO-MINI')dog=XGO("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)
[-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)
单字符或字符列表
'x'、'y'、'z'或包含以上值的列表
'x'代表前后平移,'y'代表左右平移,'z'代表身高
x:[-35,35],y:[-18,18],z:[75,115]
该参数代表机身位置平移距离,单位为mm
attitude(direction,data)
'r'、'p'、'y'或包含以上值的列表
'r'代表滚转角,'p'代表俯仰角,'y'代表偏航角
r:[-20,20],p:[-15,15],y:[11,11]
该参数代表机身姿态调节幅度,单位为°
periodic_tran(direction,period)机器狗机身将以指定周期和方向进行往复平移,幅度为位置平移极限值的一半,可以同时进行多个方向的周期运动。机身周期运动和整机运动不可同时进行。
'x'代表前后平移,'y'代表左右平移,'z'代表高低移动
period
[1.5,8]
该参数代表运动周期,单位为s;输入0时代表停止运动
periodic_rot(direction,period)
arm_x
float
[-80,155]
单位为mm
arm_z
[-95,155]
此处的x和z是相对于机械臂的基座的坐标,单位为毫米。
设定超过机械臂工作空间的值时,机械臂会保持最后一个有效值对应的姿态,比如(155,0)对应的姿态是向前伸到最大,(0,155)对应向上伸到最大,(155,155)是斜向上最大,但是机械臂达不到这个位置,就会保持上一次发送的有效位置。
#机械臂末端位于基座正上方100mm处dog.arm(0,100)#机械臂大臂垂直于身体,小臂水平于身体dog.arm(90,90)#机械臂末端在摄像头正前方dog.arm(100,0)#机械臂末端下探抓取dog.arm(100,-60)设置机械臂夹爪开合claw(pos)
pos
uint_8
0-255
0对应完全张开,255对应完全闭合
arm_mode(mode)
int
0\1
0不开启,1开启
开启之后机械臂末端会不随着身体的平移而平移(平移指四脚站定躯干运动,而非前后左右迈步平移)。
reset()停止所有运动,所有状态全部恢复到初始状态
imu(mode)自稳状态下,机器狗将自动调节姿态角以保持背部处于水平位置,不可在开启时手动设定姿态角。
整数
0、1
0代表关闭、1代表开启
perform(mode)表演模式,机器狗将循环执行预设的动作。
leg(leg_id,data)控制指定腿的足端位置
leg_id
1、2、3、4
分别代表左前腿、右前腿、右后腿、左后腿
长度为3的数字列表
该参数代表足端位置,单位为mm
其余方法示例
#设置右前腿足端坐标为(10mm,-12mm,90mm)dog.leg(2,[10,-12,90])四条腿以各自肩部中间点为原点,前为X轴正方向,左为Y轴正方向,下为Z轴的方向
motor(motor_id,data)控制舵机旋转角度
motor_id
整数或整数列表
[11,12,13,21,22,23,31,32,33,41,42,43,51,52,53]
第一位数字代表舵机所在的腿,第二位数字代表在该腿上的位置,从下到上依次是1,2,3
51、52、53分别是夹爪、小臂、大臂舵机
51推荐使用claw命令来控制比较直观
数字或数字列表
Mini
下:[-73,57],
中:[-66,93],
上:[-31,31]
51:[-65,65]
52:[-85,50]
53:[-75,90]
---------------
Lite
下:[-70,50],
52:[-115,70]
53:[-85,100]
该参数代表舵机角度位置,单位为°
舵机示例
#设置右前腿中舵机转动角度为30°dog.motor(22,30)#设置右前腿上舵机转动角度为10°,左后腿下舵机转动角度为-20°dog.motor([23,41],[10,-20])单腿舵机卸载unload_motor(leg_id)使一条腿上的三个舵机卸载,不输出力矩,之后可以随意用手转动,一般用于编写动作
1,2,3,4
unload_allmotor()使所有舵机卸载,不输出力矩,可以随意用手转动
load_motor(leg_id)使一条腿上的三个舵机保持当前位置加载,输出力矩,之后不可以用手转动,一般用于编写动作
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
动作
1
趴下
3
2
站起
匍匐前进
5
4
转圈
mini为踏步
6
蹲起
7
转动Roll
8
转动Pitch
9
转动Yaw
10
三轴转动
11
撒尿
12
坐下
13
招手
14
伸懒腰
15
波浪
16
摇摆
17
乞讨
18
找食物
19
握手
20
鸡头
21
俯卧撑
22
张望
23
跳舞
24
调皮
128
上抓
129
中抓
130
下抓
144
上楼梯
备注:单机模式循环执行以上所有动作组,群控模式去除匍匐前进,转圈,踏步,乞讨,找食物。
备注:microblocks中去掉踏步
calibration(state)如果开机后,某些关节出现了明显的位置偏差,可以调用该功能进行标定。其他情况请谨慎使用
state
[0,1]
1进入标定状态,此时舵机卸力,然后将机器狗摆至标定状态,小腿与地面平行,大腿与躯干呈90°,躯干与地面平行;0完成标定
read_motor()读取15个舵机的角度,读取成功则返回长度为15的列表,对应编号[11,12,13,21,22,23,31,32,33,41,42,43,51,52,53]的舵机角度,读取失败则返回空列表
read_battery()读取当前电池电量,读取成功则返回1-100的整数,代表电池剩余电量百分比,读取失败则返回0。
read_roll()read_pitch()read_yaw()读取当前姿态角度,读取成功则浮点数,读取失败则返回0
[-1.5,1.5]
单位为0.5m/s,正值为前进,负值为后退
runtime
≥0
单位为0.5m/s,如果runtime为0,则轮足会一直以该速度运行。
rider_turn(speed,runtime=0)
[-360,360]
单位为°/s,正值为逆时针,负值为顺时针
单位为s,如果runtime为0,则轮足会一直以该速度运行。
rider_height(data)
z:[75,115]
rider_roll(data)
r:[-17,17]
rider_periodic_z(period)
[2,4]
rider_periodic_roll(period)
rider_balance_roll(mode)自稳状态下,轮足将自动调节Roll以保持背部处于水平位置,不可在开启时手动设定姿态角,用于单边桥等左右两边高度不同的地形
rider_reset()停止所有运动,所有状态全部恢复到初始状态,如果是倒地状态,调用该方法后会站起。
rider_read_firmware()
读取下位机固件的版本号,返回长度最大为10的字符串,如"R-1.2.3"
rider_read_battery()读取当前电池电量,读取成功则返回1-100的整数,代表电池剩余电量百分比,读取失败则返回0。
rider_read_roll()rider_read_pitch()rider_read_yaw()读取当前姿态角度,读取成功则浮点数,读取失败则返回0
rider_read_imu_int16(direction)
读取姿态角度参数范围为["roll","pitch","yaw"],读取成功则int16类型整数角度,读取失败则返回0
rider_action(action_id,wait=False)
wait
布尔值
TRUE/FALSE
是否延时等待动作做完
左右摇摆
高低起伏
前进后退
四方蛇形
升降旋转
圆周晃动
英文命名:
1.Rocking2.Shfiting3.Altitudevary4.Zigzag5.Lift&rotate6.Trembling
rider_perform(mode)表演模式,机器狗将循环执行预设的动作。
rider_calibration(state)如果开机后,某些关节出现了明显的位置偏差,可以调用该功能进行标定。其他情况请谨慎使用
1进入标定状态,此时舵机卸力,将轮足扶正,将腿降低至最低,然后向后倚靠在地面上,然后发送0完成标定
rider_bt_rename(name)重新修改蓝牙名称,调用该函数后蓝牙会断开链接
蓝牙名称格式为XGORider_xxx,xxx为可修改部分,仅支持ascii码中的字符。
rider_led(index,color)双轮足
index
uint8
1-4
左上,左下,右下,右上分别为1、2、3、4号LED
color
[uint8,uint8,uint8]
写入三个字节数据,数值范围为0-255,代表RGB的亮度,[0,0,0]代表灭,[255,255,255]代表最亮的白光
XGO的教育库主要是给出了集成在AI模组中的摄像头,屏幕,按键,麦克风和喇叭等硬件的Python接口。以及部分AI模型调用等功能。
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()屏幕绘图需要先杀掉自启动main.py进程,否则会屏幕刷新冲突sudops-ef|grepmain.py
lcd_line(x1,y1,x2,y2,color=(r,g,b),width=width)
x1,y1,x2,y2
x1x2:[0,320]
y1y2:[0,240]
x1,y1为初始点标
x2,y2为终止点坐标
color(可缺省)
默认为白色
rgb元组
rgb:[0,255]
color为线颜色
width(可缺省)
默认为2
width为线宽
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()XGO_edu.lcd_line(80,80,150,150,color=(255,0,0),width=2)
lcd_round(center_x,center_y,radius,color=(255,255,255),width=2)
center_x
center_y
center_x:[0,320]
center_x:[0,240]
center_x,center_y为圆心坐标
raduius
raduius为半径
color为圆弧颜色
width为圆弧宽
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()XGO_edu.lcd_round(30,30,10,color=(255,0,0),width=2)画圆弧lcd_arc(x1,y1,x2,y2,angle0,angle1,color=(255,255,255),width=2)
x1,y1,x2,y2为定义边界框的两个点
angle0,angle1
angle0angle1:[0,360]
angle0为初始角度,三点钟方向为起始点,顺时针增加。
angle1为终止角度
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()XGO_edu.lcd_arc(30,30,150,150,50,100,color=(255,0,0),width=2)画矩形lcd_rectangle(x1,y1,x2,y2,fill=None,outline=(255,255,255),width=2)
fill(可缺省)
默认为None
fill为填充颜色
None则为不填充
outline(可缺省)
outline为线颜色
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()XGO_edu.lcd_rectangle(20,20,100,100,fill=None,outline=(255,0,0),width=2)显示文字可显示中文与英文使用微软雅黑字体,字体大小可调节
lcd_text(x,y,content,color=(255,255,255),fontsize=15)
x,y
xy:[0,320]
x,y为初始点标
content
content为显示内容
color为文字颜色
fontsize(可缺省)
默认为15
fontsize为字体大小
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()XGO_edu.lcd_text(50,50,'hello',color=(255,0,0),fontsize=50)显示图片lcd_picture(filename)
filename
图片文件名需要加jpg扩展名
图片文件显示路径为/home/pi/xgoPictures,图片大小为320*240
lcd_clear()
xgoButton(button)
返回值
button
指定字符串
["a","b"]
False未按下True按下
xgoSpeaker(filename)
音频文件扩展名wav,路径为/home/pi/xgoMusic
xgoVideo(filename)
视频文件扩展名mp4
路径为/home/pi/xgoVideos
xgoAudioRecord(filename="record",seconds=5)
filename(可缺省)
默认"record"
录制音频的文件名
会自动添加扩展名wav,录制的文件路径为/home/pi/xgoMusic
seconds(可缺省)
默认为5
录制文件的长度(秒)
xgoCamera(status)
status
True,False
打开和关闭摄像头,屏幕会实时显示视频流
xgoVideoRecord(filename="record",seconds=5)
录制视频的文件名
会自动添加扩展名mp4,录制的文件路径为/home/pi/xgoVideos
xgoTakePhoto(filename="photo")
默认"photo."
拍摄照片的文件名
会自动添加扩展名jpg,图片保存路径为/home/pi/xgoPictures
注意:使用此函数会自动运行xgoCamera(True),如不需要实时显示摄像头画面,请在此函数后面加上xgoCamera(False)
此系列的api核心功能是调取一帧图像进行分析并返回结果,可在参数传入图片的路径,实现对单张图片的检测。如需实时分析摄像头画面,请配合while使用,下面为示例代码:
手势识别单张图片:
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()#对同级目录下的camera.jpg进行手势识别result=XGO_edu.gestureRecognition("camera.jpg")#打印识别结果print(result)实时通过摄像头进行手势识别:
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()#循环进行摄像头识别,按c键退出whileTrue:XGO使用树莓派做为机器狗的大脑,推荐使用VScode对XGO进行编程,可以通过一下步骤进行开发:
#导入xgoedufromxgoeduimportXGOEDU#实例化eduXGO_edu=XGOEDU()#循环进行摄像头识别,按c键退出whileTrue:result=XGO_edu.gestureRecognition()#缺省参数,默认使用摄像头识别print(result)ifXGO_edu.xgoButton("c"):#c键按下退出循环break获取手势识别结果的具体内容:
fromxgoeduimportXGOEDUXGO_edu=XGOEDU()result=XGO_edu.gestureRecognition("camera.jpg")#手势识别结果格式(ges,(x,y))ifresult!=None:#先加结果是否为空的判断,否则会提示下标错误gesture=result[0]#获取手势识别结果(字符串)x=result[1][0]#获取x坐标(数值)y=result[1][1]#获取y坐标(数值)骨骼识别posenetRecognition(target="camera")
target(可缺省)
默认"camera"
即使用摄像头捕捉图像
target为图像文件的路径
[angle1,angle2,angle3,angle4]
angle1、angle2俩大臂和小臂之间的夹角
angle3、angle4俩大臂和身体之间的夹角
gestureRecognition(target="camera")
(ges,(x,y))
ges为手势识别结果
目前包括的手势有:
["1","2","3","4","5","Good","Ok","Rock","Stone"]
坐标值xy
yoloFast(target="camera")
(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','cellphone','microwave','oven','toaster','sink','refrigerator','book','clock','vase','scissors','teddybear','hairdrier','toothbrush']
face_detect(target="camera")
[x,y,w,h]人脸识别框的
x坐标,y坐标,宽度,高度
emotion(target="camera")
(emotion,(x,y))
emotion包括:
['Angry','Happy','Neutral','Sad','Surprise']
agesex(target="camera")
(gender,age,(x,y))
gender包括['Male','Female']
age包括['(0-2)','(4-6)','(8-12)','(15-20)','(25-32)','(38-43)','(48-53)','(60-100)']
SpeechRecognition(seconds=3)
默认为3
语句执行后,稍作停顿再讲话
识别结果字符串
SpeechSynthesis(texts)
texts
支持中文、英语及混用
无会自动播放合成后的语音
QRRecognition(target="camera")
二维码识别结果result
可以识别多个结果,返回值为列表
BallRecognition(color_mask,target="camera")
color为预设颜色
小球识别结果((x,y))
返回圆心坐标
color_mask
获取颜色遮罩
需要函数cap_color_mask()获得
hsv颜色范围
实时获取特定颜色的小球轮廓:
fromxgoeduimportXGOEDUXGO_edu=XGOEDU()color=XGO_edu.cap_color_mask()#通过api手动获取需要识别小球的颜色whileTrue:result=XGO_edu.BallRecognition(color)#填入获取的颜色print(result)ifXGO_edu.xgoButton("c"):#c键按下退出循环break颜色识别ColorRecognition(target="camera",mode='R')
颜色识别结果((x,y),r)
mode为预设颜色
固定值(字符串)
RGBY对应红绿蓝黄
如选黄色则填入mode='Y'
result=XGO_edu.gestureRecognition()#缺省参数,默认使用摄像头识别print(result)ifXGO_edu.xgoButton("c"):#c键按下退出循环break