dll file from repository
主要有以下几个函数:
lib.CreateElectronLowLevel()
lib.myConnect()
lib.myDisconnect()
lib.myGetJointAngles()
lib.mySetImageSrc()
lib.mySetJointAngles()
lib.mySync()
-
lib.CreateElectronLowLevel()
: 创建一个electronbot对象robot = lib.CreateElectronLowLevel()
-
lib.myConnect()
: 连接electronbot,成功返回True
r = lib.myConnect(robot)
-
lib.myDisconnect()
: 断开electronbot连接;若直接终止程序会卡死,重新上电即可。 -
lib.myGetJointAngles()
: 读取当前6个舵机的角度 -
lib.mySetImageSrc()
: 设置想要显示的图片。注意,这一步不会直接显示,需要等待lib.mySync()
-
lib.mySetJointAngles()
:设置想要的姿态。注意,这一步不会直接调整,需要等待lib.mySync()
- 第一个参数是六个舵机的角度,第二参数是舵机的使能。在掰舵机时要先设置其使能为0。为了安全考虑,在后面所有实现的函数中,都要在函数的最后设置使能为0.
-
lib.mySync()
:将设置的图片和姿态同步至electronbot。
在这些之上实现其他功能。
convert_type()
: 将python变量转成c变量
通过读取electronbot头部角度来控制电脑音量。
set_volume()
: 设置系统音量。
read_angles()
: 读取electronbot当前姿态play_action()
: 执行指定的动作序列。- 执行动作耗时150ms左右,所以相邻的两个动作之间最好相隔时间大于200ms,避免线程抢占。
play_action_keep_head()
: 执行指定的动作序列,最后恢复electronbot头部位置
play_img()
: 播放一张图片play_video()
: 播放一个mp4视频play_img_with_action()
: 保持播放某张图片的状态下执行一个动作序列play_emoji_with_weather()
: 播放emoji时将天气的logo也添加在上面方便浏览当前天气play_emoji_with_action()
: 在播放emoji时同时进行动作执行,二者同步进行- 在普通情景下比较难实现,因为dll函数
lib.mySync()
会同时更新electronbot的显示屏和姿态,也就是说更新到下一个动作的时候同时也只会更新到下一帧图像;执行完整的动作序列也只会顺带着播放几帧emoji,而一套完整的emoji有一百多帧,只显示几帧根本看不出来emoji。所以要进行改进。 - 看别人有一种做法,就是异步抽帧播放emoji,比如一个动作序列有16个动作,emoji有160帧,则在第i个动作同步播放第10×i帧emoji,但这样也有缺点,即emoji播放起来是卡顿的。
- 最后
play_emoji_with_action()
选择插帧来播放emoji,比如一个动作序列有16个动作,emoji有160帧,则在相邻的两个动作之间进行线性插值,得到额外的9个插值动作,这样16个动作就通过插帧变成了160个动作,就能和emoji同步播放了。
- 在普通情景下比较难实现,因为dll函数
通过schedule来将各个任务(比如调节音量,播放表情,执行动作···)当作线程来在指定时间执行。