shr-8s 机器人 调试说明书 - dfrobot

142
SHR-8S 机器人 调试说明书 研发部 北京森汉科技有限公司

Upload: others

Post on 11-Jun-2022

13 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S机器人

调试说明书

研发部

北京森汉科技有限公司

Page 2: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 1 页

目录

一.舵机 PWM 信号介绍 ............................................................................................................... 1

1.PWM 信号的定义 .............................................................................................................. 1

2.PWM 信号控制精度制定 .................................................................................................. 2

1 DWT = 8uS ; 250DWT=2mS ........................................................................................................ 2

PWM 上升沿函数: 0.5mS + N×DWT ......................................................................................... 2

二.单舵机拖动及调速算法 ........................................................................................................... 3

1.舵机为随动机构 ................................................................................................................. 3

(1)SH14-M 舵机的位置控制方法 .............................................................................. 3

(2)SH14-M 舵机的运动协议 ...................................................................................... 4

2.目标规划系统的特征 ......................................................................................................... 5

(1)舵机的追随特性 ..................................................................................................... 5

(2)舵机ω值测定 ......................................................................................................... 6

(3)舵机ω值计算 ......................................................................................................... 6

(4)采用双摆试验验证 ................................................................................................. 6

3.DWA 的定义....................................................................................................................... 7

4.DWT 的定义....................................................................................................................... 7

5.单舵机调速算法 ................................................................................................................. 8

(1)舵机转动时的极限下降沿 PWM 脉宽 ................................................................. 8

三.8 舵机联动单周期 PWM 指令算法 ...................................................................................... 10

1.控制要求 ........................................................................................................................... 10

2.注意事项 ........................................................................................................................... 10

3.8 路 PWM 信号发生算法解析 ........................................................................................ 11

4.N 排序子程序 RAM 的制定 ............................................................................................ 12

四.SHR-5S 左腿机械结构 .......................................................................................................... 13

1.左腿部侧面轴关节介绍 ................................................................................................... 13

2.舵机转动正方向制定 ....................................................................................................... 14

3.左腿半周期运动程序分析 ............................................................................................... 15

五.SHR-5S 右腿机械结构 .......................................................................................................... 16

1.右腿部侧面轴关节介绍 ................................................................................................... 16

2.舵机转动正方向制定 ....................................................................................................... 17

3.右腿半周期运动程序分析 ............................................................................................... 18

六.双腿蹲起动作解析 ................................................................................................................. 19

1.双腿蹲起动作程序特点 ................................................................................................... 19

2.积分首末位置与过程 ....................................................................................................... 20

3.积分中间位置 ................................................................................................................... 21

七.P 平面动作舵机 ..................................................................................................................... 22

八.变速及变加速运动解析 ......................................................................................................... 23

1.变加速运动定义 ............................................................................................................... 23

2.扫尾系数 ........................................................................................................................... 24

3.积分步数系数 ................................................................................................................... 24

九.基础动作子程序解析 ............................................................................................................. 25

1.P1 口 8 路单周期子程序 ................................................................................................. 25

Page 3: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 2 页

2.P2 口 8 路单周期子程序 ................................................................................................. 26

3.单目标位置输出方法 ....................................................................................................... 27

十.双腿侧身动作解析 ................................................................................................................. 28

1.动作过程中各舵机的方向制定 ....................................................................................... 28

2.速度与加速度解析 ........................................................................................................... 29

十一.变速及变加速运动解析 ..................................................................................................... 30

1.变加速运动定义 ............................................................................................................... 30

2.扫尾系数 ........................................................................................................................... 31

3.积分步数系数 ................................................................................................................... 31

十二.基础动作子程序解析 ......................................................................................................... 32

1.P1 口 8 路单周期子程序 ................................................................................................. 32

2.P2 口 8 路单周期子程序 ................................................................................................. 33

3.单目标位置输出方法 ....................................................................................................... 34

十三.单一动作变速运动子程序解析 ......................................................................................... 35

1.双腿下蹲动作变速子程序解析 ....................................................................................... 35

(1)下蹲第 1 族子程序 ............................................................................................... 36

(2)下蹲第 2 族子程序 ............................................................................................... 38

2.双腿起立动作变速子程序解析 ....................................................................................... 40

(1)起立第 1 族子程序 ............................................................................................... 41

(2)起立第 2 族子程序 ............................................................................................... 43

3.双腿侧身动作变速子程序解析 ....................................................................................... 45

(1)向左侧身第 1 族子程序 ....................................................................................... 45

(2)向左侧身第 2 族子程序 ....................................................................................... 48

(3)向右侧身第 1 族子程序 ....................................................................................... 51

(4)向右侧身第 2 族子程序 ....................................................................................... 54

4.单腿运动变速子程序解析 ............................................................................................... 57

(1)左腿抬起第 1 族子程序 ....................................................................................... 57

(2)左腿抬起第 2 族子程序 ....................................................................................... 59

(3)右腿抬起第 1 族子程序 ....................................................................................... 61

(4)右腿抬起第 2 族子程序 ....................................................................................... 63

(5)左腿落下第 1 族子程序 ....................................................................................... 65

(6)左腿落下第 2 族子程序 ....................................................................................... 67

(7)右腿落下第 1 族子程序 ....................................................................................... 69

(8)右腿落下第 2 族子程序 ....................................................................................... 71

十四.Z、P 面分立原地踏步动作解析 ....................................................................................... 73

1.舵机方向制定 ................................................................................................................... 73

2.动作解析 ........................................................................................................................... 74

(1)动作条件 ............................................................................................................... 74

(2)动作时序分析 ....................................................................................................... 74

(3)动作算法及程序 ................................................................................................... 76

十五.Z、P 面分立带断点前进步伐解析 ................................................................................... 78

1.舵机方向制定 ................................................................................................................... 78

(1)双腿直立,各 90 度; ......................................................................................................... 78

2.前进第 1 族步伐解析 ....................................................................................................... 79

Page 4: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 3 页

(1)动作条件 ............................................................................................................... 79

(2)动作时序分析 ....................................................................................................... 79

3.中间带速度断点的前进方法 ........................................................................................... 80

(1)运动特征说明 ....................................................................................................... 80

(2)舵机实际转动方向及角度 ................................................................................... 81

4.新增专用子程序解析 ....................................................................................................... 83

(1)前进中右腿抬起第 1 族子程序 ........................................................................... 83

(2)前进中右腿落下第 2 族子程序 ........................................................................... 84

(3)前进中左腿抬起第 1 族子程序 ........................................................................... 85

(4)前进中左腿落下第 2 族子程序 ........................................................................... 86

5.前进第 1 族子程序解析 ................................................................................................... 87

(1)程序内容及算法 ................................................................................................... 87

(2)相关技术拓展 ....................................................................................................... 88

十六.Z、P 面分立无断点前进步伐解析 ................................................................................... 89

1.舵机方向制定 ................................................................................................................... 89

2.动作时序分析 ................................................................................................................... 90

3.中间无速度断点的前进方法 ........................................................................................... 91

(1)运动特征说明 ....................................................................................................... 91

(2)舵机实际转动方向及角度 ................................................................................... 92

4.新增专用子程序解析 ....................................................................................................... 94

(1)前进中右腿抬起第 2 族子程序 ........................................................................... 94

(2)前进中右腿落下第 1 族子程序 ........................................................................... 95

(3)前进中左腿抬起第 2 族子程序 ........................................................................... 96

(4)前进中左腿落下第 1 族子程序 ........................................................................... 97

5.前进第 2 族子程序解析 ................................................................................................... 98

(1)程序内容及算法(分立无断点步伐) ............................................................... 98

(2)相关技术拓展 ....................................................................................................... 99

十七.第 1 类交互式前进步伐解析 ........................................................................................... 100

1.舵机方向制定 ................................................................................................................. 100

2.第 1 类交互前进步伐特点 ............................................................................................. 101

(1)动作条件 ............................................................................................................. 101

(2)动作时序分析 ..................................................................................................... 101

3.新增的 4 个子程序 ......................................................................................................... 102

(1)左侧身+抬右腿子程序(第 2 族) ................................................................... 102

(2)右侧身+落右腿子程序(第 1 族) ................................................................... 104

(3)右侧身+抬左腿子程序(第 2 族) ................................................................... 105

(4)左侧身+落左腿子程序(第 1 族) ................................................................... 106

3.交互后 PWM_8P1 与 PWM_8P2 子程序的合成 ......................................................... 107

4.PWM_16P 子程序解析 .................................................................................................. 107

5.第 1 类交互式前进步伐子程序指令 ............................................................................. 109

十八.第 2 类交互式前进步伐解析 ........................................................................................... 110

1.舵机方向制定 ................................................................................................................. 110

2.第 2 类交互前进步伐特点 ............................................................................................. 111

(1)动作条件 ............................................................................................................. 111

Page 5: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 4 页

(2)动作时序分析 ..................................................................................................... 111

3.改动的 4 个运动子程序 ................................................................................................. 113

(1)抬右腿前进第 2 族子程序 ................................................................................. 113

(2)落右腿前进第 1 族子程序 ................................................................................. 114

(3)抬左腿前进子程序第 2 族 ................................................................................. 115

(4)落左腿前进子程序第 1 族 ................................................................................. 116

4.第 2 类交互式前进步伐子程序指令 ............................................................................. 117

十九.开发软件介绍 ...................................................................................................................... 119

1.KEIL C ............................................................................................................................... 119

2.STC_ISP_V3.9.4 ................................................................................................................ 120

二十.语言程序架构解析 .............................................................................................................. 122

1.C 语言嵌入汇编 ................................................................................................................ 122

2.汇编语言被嵌入的说明 .................................................................................................... 122

3.KEIL C 下的具体操作步骤 .............................................................................................. 122

4.在 KEIL C 下建立工程(project) .................................................................................. 122

5.选择开发芯片类型 ............................................................................................................ 123

6.添加程序文件到工程 ........................................................................................................ 124

7.设置工程属性 .................................................................................................................... 125

8.KEIL C 的安装 .................................................................................................................. 128

Page 6: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 1 页

一.舵机 PWM 信号介绍

1.PWM 信号的定义

PWM信号为脉宽调制信号,其特点在于他的上升沿与下降沿之间的时间宽度。具体的时

间宽窄协议参考下列讲述。我们目前使用的舵机主要依赖于模型行业的标准协议,随着机器

人行业的渐渐独立,有些厂商已经推出全新的舵机协议,这些舵机只能应用于机器人行业,

已经不能够应用于传统的模型上面了。

目前,北京森汉的 SH14-M 舵机可能是这个过渡时期的产物,它采用传统的 PWM 协议,

优缺点一目了然。优点是已经产业化,成本低,旋转角度大(目前所生产的都可达到 185

度);缺点是控制比较复杂,毕竟采用 PWM格式。

但是它是一款数字型的舵机,其对 PWM信号的要求较低:

(1) 不用随时接收指令,减少 CPU的疲劳程度;

(2) 可以位置自锁、位置跟踪,这方面超越了普通的步进电机;

其 PWM格式注意的几个要点:

(1) 上升沿最少为 0.5mS,为 0.5mS---2.5mS之间;

(2) SH14-M数字舵机下降沿时间没要求,目前采用 0.5Ms就行;也就是说 PWM波形

可以是一个周期 1mS的标准方波;

(3) SH0680为塑料齿轮模拟舵机,其要求连续供给 PWM信号;它也可以输入一个周

期为 1mS 的标准方波,这时表现出来的跟随性能很好、很紧密。

图 1-1

Page 7: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 2 页

2.PWM 信号控制精度制定

1 DWT = 8uS ; 250DWT=2mS

时基寄存器内的数值为:(#01H)01 ----(#0FAH)250。

共 185 度,分为 250 个位置,每个位置叫 1DWT。

则:185÷250 = 0.74 度 / DWT

PWM 上升沿函数: 0.5mS + N×DWT

0uS ≤ N×DWT ≤ 2mS

0.5mS ≤ 0.5Ms+N×DWT ≤ 2.5mS

图 1-2

我 们 采 用 的 是 8 位

STC12C5410ADCPU,其数据分

辨率为 256,那么经过舵机极限

参数实验,得到应该将其划分为

250 份。

那么 0.5mS---2.5Ms的宽度

为 2mS = 2000uS。

2000uS÷250=8uS

则:PWM的控制精度为 8us

我们可以以 8uS为单位递增

控制舵机转动与定位。

舵机可以转动 185度,那么

185度÷250=0.74 度,

则:舵机的控制精度为 0.74度

Page 8: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 3 页

二.单舵机拖动及调速算法

1.舵机为随动机构

(1)当其未转到目标位置时,将全速向目标位置转动。

(2)当其到达目标位置时,将自动保持该位置。

所以对于数字舵机而言,PWM信号提供的是目标位置,跟踪运动要靠舵机本身。

(3)像 SH-0680 这样的模拟舵机需要时刻供给 PWM 信号,舵机自己不能锁定目标位

置。

所以我们的控制系统是一个目标规划系统。

(1)SH14-M 舵机的位置控制方法

舵机的转角达到 185 度,由于采用 8 为 CPU 控制,所以控制精度最大为 256 份。目前

经过实际测试和规划,分了 250 份。具体划分参见《250 份划分原理》。

将 0—185 分为 250 份,每份 0.74 度。

控制所需的 PWM 宽度为 0.5ms—2.5ms,宽度 2ms。

2ms÷250=8us;

所以得出:PWM信号高电平持续的时间 =度数/8μs + 500μs;

角度 0 45 90 135 180

N 0 62 125 187 250

PWM 0.5ms 1ms 1.5ms 2ms 2.5ms

0.5ms-30ms

0.5ms-2.5ms

舵机角度= 0.74×N

PWM = 0.5 + N × DWT ;

(DWT=8us)

Page 9: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 4 页

(2)SH14-M 舵机的运动协议

运动时可以外接较大的转动负载,舵机输出扭矩较大,而且抗抖动性很好,电位器的线

性度较高,达到极限位置时也不会偏离目标。

Φ

Φ对应 N值

N=0, Φ=0 度

N=245,Φ=180度

舵机的转动方向为:

逆时针为正转

1 ≤ N ≤ 245

Φ

Page 10: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 5 页

2.目标规划系统的特征

(1)舵机的追随特性

① 舵机稳定在 A点不动;

② CPU发出 B点位置坐标的 PWM信号;

③ 舵机全速由 A点转向 B点;

④ CPU发出 B点 PWM 信号后,应该等待一段时间,利用此时间舵机才能转动至 B点。

那么,具体的保持(等待)时间如何来计算,如下讲解:

令:保持时间为 Tw

当 Tw≥△T 时,舵机能够到达目标,并有剩余时间;

当 Tw≤△T 时,舵机不能到达目标;

理论上:当 Tw=△T 时,系统最连贯,而且舵机运动的最快。

实际过程中由于 2 个因素:

① 1 个机器人身上有多个舵机,负载个不相同,所以ω不同;

② 某个舵机在不同时刻的外界环境负载也不同,所以ω不同;

则连贯运动时的极限△T 难以计算出来。

目前采取的方法是经验选取ω值。

△ф = фB - фA △T = △ф÷ω

时间

角度

фA

фB

△ф

△T

舵机的转速为ω

Page 11: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 6 页

(2)舵机ω值测定

舵机的ω值随时变化,所以只能测定一个平均值,或称出现概率最高的点。

依据 ① 厂商的经验值;

② 采用 SH14-M 具体进行测试;

测试实验:① 将 CPU 开通,并开始延时 Tw;

② 当延时 Tw到达后,观察舵机是否到达目标;

测定时采用一段双摆程序,伴随示波器用肉眼观察 Tw与△T 的关系。

(3)舵机ω值计算

一般舵机定为 0.16--0.22 秒/60 度;

取 0.2 秒/60 度 >> 1.2 秒/360 度 >> 0.617 秒/185 度

则ω为 360 度/1.2 秒,2Π/1.2 秒

ω=300度/秒

那么 185 度转动的时间为 185 度÷360 度/1.2 秒 = 0.6167 秒。

(4)采用双摆试验验证

观察实验过程中的 Tw与△T 的关系

发现:当 Tw定在 0.618 秒时,利用示波器观察到舵

机能够运动至 2 个目标点。

则:Tw=△T= 0.618 秒

实验过程中,设定舵机运转的目

标角度查为 185 度。

最终:ω=0.2秒/60度

Page 12: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 7 页

3.DWA 的定义

将 185 度的转角分为 250 个平均小份。

则:每小份为 0.74 度。

定义如下:DWA = 0.74 度

由于:ω = 0.2秒/60 度

则:运行 1 DWA所需时间为:0.72度÷0.2秒/60度 = 2.4 mS;

4.DWT 的定义

舵机电路支持的 PWM 信号为 0.5mS—2.5mS,总间隔为 2mS。

若分为 250 小份,则 2mS÷250 = 0.008 mS = 8uS

定义如下:DWT = 8uS

那么 1 DWA(0.74 度)对应的△T为:0.74度÷60度/0.2秒 =2.4 67mS.。

时间

角度

фA

фB

ф

ф = фB - фA

△T

△T = ф÷ω

Page 13: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 8 页

5.单舵机调速算法

测试内容:将后部下降沿的时间拉至 30ms 没有问题,舵机照样工作。

将后部下降沿的时间拉至 10ms 没有问题,舵机照样工作。

将后部下降沿的时间拉至 2.6ms 没有问题,舵机照样工作。

将后部下降沿的时间拉至 500us 没有问题,舵机照样工作。

实践检验出:下降沿时间参数可以做的很小。目前实验降至 500uS,依然工作正常。

原因是:(1)舵机电路自动检测上升沿,遇上升沿就触发,以此监测 PWM 脉宽“头”。

(2)舵机电路自动检测下降沿,遇下降沿就触发,以此监测 PWM 脉宽“尾”。

(1)舵机转动时的极限下降沿 PWM 脉宽

△T:舵机运转 1DWA(7.4 度)所需要的最小时间,目前计算出的数值为 2.467mS;

△T 前面的 20 mS 等待时间可以省略,舵机依然工作;而且得出舵机跟随的最快驱动方式。

0.5ms-30ms

20ms △T

Tw

极限转动方式

实验得出 1.1ms ≤Tw≤ 50ms;

具体实验数据参照下表

跟随算法

Page 14: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 9 页

舵机 Tw数据实验表格

Tw值 舵机运转特性 Tw与△T 关系 该程序可行度 备注

500us 不能跟随 Tw< △T 不可行

800us 不能跟随 Tw< △T 不可行

1ms 不能跟随 Tw< △T 不可行

1.1ms 跟随 Tw≈ △T 可行 最快、平滑

1.2ms 跟随 Tw> △T 可行 最快、平滑

1.6ms 跟随 Tw> △T 可行 最快、平滑

2ms 跟随 Tw> △T 可行 最快、平滑

2.6ms 跟随 Tw> △T 可行 最快、平滑

10ms 跟随 Tw>> △T 可行 较慢、平滑

20ms 跟随 Tw>> △T 可行 较慢、平滑

30ms 跟随 Tw>> △T 可行 较慢、平滑

40ms 跟随 Tw>> △T 可以 较慢、微抖

50ms 跟随 Tw>> △T 可以 很慢、微抖

70ms 跟随 Tw>> △T 不可以 很慢、较抖

100ms 跟随 Tw>> △T 不可以 很慢、较抖

令人质疑的地方为 1.1ms 时的表现,得出的 Tw≈ △T;

也就是说 1.1ms = 2.467ms,显然存在问题。

经过考虑重新观察 PWM 波形图发现,电机真正的启动点如下图:

实际上由 A 到 B 的运动时间为:△T = Tw +(B 点的)PWM

Tw

极限转动方式

启动点 A 启动点 B

B 点的 PWM

Page 15: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 10 页

三.8 舵机联动单周期 PWM 指令算法

1.控制要求

要求同时发给 8 个舵机位置目标值,该指令的执行周期尽量短,目的有 2 个:

其一,是为了将来扩充至 24 舵机;其二,目标越快,舵机的转动速度越快;

我们以 8 路为 1 组或称 1 个单位,连续发出目标位置,形成连续的目标规划曲线,电机

在跟随过程中自然形成了位置与速度的双指标曲线,实现 8 路舵机联动。

2.注意事项

从 24 个端口,P0.0、P1.0 到 P2.0,单 DWT 循环的最小时间只有 8us,所以串行运算是

不行的,那么就采用并行运算。

目前采用的并行算法是 P0.0—P0.7 为一个基本单位,8 位一并。

实际案例:P1 口的 8 个位置个不相同;

端口 N 寄存器 目标位置(度) N 数值(整数) PWM 宽度(ms)

P1.0 position[0] 0 0 0.500

P1.1 position[1] 0.74 1 0.508

P1.2 position[2] 45 62.5 1.000

P1.3 position[3] 50 67.6 1.041

P1.4 position[4] 60 81.1 1.148

P1.5 position[5] 90 125 1.500

P1.6 position[6] 135 187.5 2.000

P1.7 position[7] 180 250 2.500

注意:N 为整数,依照上表看出,由于整数原因,定位不能实现的有 45 度、60 度等。

时间 T T 为一个周期,分为 2 部分

1. PWM 宽

2. 延时等待

Tw PWM

Page 16: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 11 页

3.8 路 PWM 信号发生算法解析

我们预计将整个周期控制在 3.5-5ms 内;

由上图得知:P1 口的 8 个端在不同时间产生下降沿。

那么由上例如:我们的 P1.5 口,他的 N 为 125

那么就需要它在 125 个 DWT 后产生下降沿,时间为(125*8us=1000us)。

我们在其中发现 2 个关键参数:①时间参数 N=125

②逻辑参数 P1.5=#0DFH

逻辑参数的定义:如下,采用&指令,操作 P1 口。

例如:将 P1.5 口产生下降沿,就将# 0DFH 去“&” P1 口。

逻辑“&”指令,冯“0”得“0”,不影响其他位。

具体的程序操作如下:

① 开 3.5ms定时中断

② 取出 8个端(P1.0-P1.7)的位置值,也就是 8个 N值;并赋予相应的端逻辑参数;

③ 将这 8个值由大到小排列,相应端的逻辑参数值也随着 N的顺序排列,一一对应;

④ 将 N值做减法,求得:

⑤ 取出 M1,延时 M1*DWT,& 相应的逻辑参数;

取出 M2,延时 M2*DWT,& 相应的逻辑参数;

取出 M3,延时 M3*DWT,& 相应的逻辑参数;

取出 M4,延时 M4*DWT,& 相应的逻辑参数;

取出 M5,延时 M5*DWT,& 相应的逻辑参数;

取出 M6,延时 M6*DWT,& 相应的逻辑参数;

取出 M7,延时 M7*DWT,& 相应的逻辑参数;

取出 M8,延时 M8*DWT,& 相应的逻辑参数;

P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 备注

P1.0= # FEH 1 1 1 1 1 1 1 0

P1.1= # FDH 1 1 1 1 1 1 0 1

P1.2= # FBH 1 1 1 1 1 0 1 1

P1.3= # F7H 1 1 1 1 0 1 1 1

P1.4= # EFH 1 1 1 0 1 1 1 1

P1.5= # DFH 1 1 0 1 1 1 1 1

P1.6= # BFH 1 0 1 1 1 1 1 1

P1.7= # 7FH 0 1 1 1 1 1 1 1

M1=N1

M2=N2-N1

M3=N3-N2

M4=N4-N3

M5=N5-N4

M6=N6-N5

M7=N7-N6

M8=N8-N7

Page 17: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 12 页

⑥ 8个端的下降沿全部产生完毕,等待一定的 Tw 值,或等待 3.5ms 中断的到来;

⑦ 中断到来后,清理中断标志,然后结束该程序。

注意事项:当进行逐个排序延时的过程中,CPU 要取出 M1、M2、M3….M8,那么会有 1

个取数指令周期,当 CPU 采用 12MHz 时为 1us。最终应该在第 8 个延时,即

M8 时扣除掉,具体指令参见指令集。

4.N 排序子程序 RAM 的制定

入口处

端口 N 值寄存器地址 &逻辑数寄存器地址 &逻辑数值

P1.0 position[0] kouchu[0] #FEH

P1.1 position[1] kouchu[1] #FDH

P1.2 position[2] kouchu[2] #FBH

P1.3 position[3] kouchu[3] #F7H

P1.4 position[4] kouchu[4] #EFH

P1.5 position[5] kouchu[5] #DFH

P1.6 position[6] kouchu[6] #BFH

P1.7 position[7] kouchu[7] #7FH

备注:position[7]寄存器内存放的是 P1.7 端口的 N 值;kouchu[7]寄存器内存放的是 P1.7

端口的&逻辑参数值;

出口处

从左到右为 N 值从大到小排列 (大 > N值 > 小)

N 值寄存器地址 &逻辑数寄存器地址 &逻辑数值

paixu_ncha[0] kouchu[0] 未知

paixu_ncha[1] kouchu[1] 未知

paixu_ncha[2] kouchu[2] 未知

paixu_ncha[3] kouchu[3] 未知

paixu_ncha[4] kouchu[4] 未知

paixu_ncha[5] kouchu[5] 未知

paixu_ncha[6] kouchu[6] 未知

paixu_ncha[7] kouchu[7] 未知

所谓的“未知”:由于排列按照大到小顺序,“未知”内存放的为端口信息要根据排序

做相应的调整。

备注:paixu_ncha[0]内存放的是某位的 N 值,其值最大;

paixu_ncha[7]内存放的是某位的 N 值,其值最小;

kouchu[0]—kouchu[7]内存放数,可以根据其数值判断出是具体那个端口的下降沿。

例如:其值为“0xFB”那么它就是 P1.2;

Page 18: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 13 页

四.SHR-5S 左腿机械结构

1.左腿部侧面轴关节介绍

双足机器人行走和它的机械结构有至关重要的联系。

自从 1986年以来,一直延用的日本加藤一郎结构,

其腿部侧面就如右图所示:它有 3个自由度,每个自

由度采用 1个舵机构成。图中用 1、2、3表示这 3

个舵机。

其中包含几个重要的几何关系:

一般的机器人,腿上半部与下半部长短相近,我们

在研究机器人步伐的时候可以令其为相等长度。这

是 1个十分关键的地方。在国内,之所以大多的机

器人不能行走,其中的一个原因就是将腿上半部与

下半部加工成不同长度。导致 CPU的计算量剧增,

国内的数控技术本来就落后,缺少这方面的人才,其

他稍微会些软件就自命不凡的人站出来就搞,结果连

最基本的第一关都不能过,根本不能进行下面的研究。

原地踏步动作时:

∵L12=L23

∴△α=△β

∴△γ=△α+△β=2△α

(如此简单的函数关系,可以骤减 CPU的计算量)

今后在做一般性研究时,可以将 L12和 L23做成任意长度。

如此描述一个简单的微分函数(原地踏步函数):

∵dα=dβ

∴dγ= dα+dβ(一般 CPU就用此式进行积分运算)

取△α为 1DWA,则△β=1DWA,△γ=2DWA

即:舵机 1的|△N|=1

舵机 2的|△N|=2

舵机 3的|△N|=1

CPU一边进行积分运算,一边将数据发送给舵机,令其执行。

∴∫dγ=∫(dα+ dβ)=∫dα+∫dβ

∴Kγ+△γ=(Kα+△α)+(Kβ+△β)

Kγ、Kα、Kβ为积分原始初始值,在机器人中表现为初始位置坐标。

注意:1-2 和 2-3 的长短要一致

会骤减 CPU 的计算量!

1

2

3

α

β

γ

Page 19: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 14 页

2.舵机转动正方向制定

(1)高位到低位为上半周;影响微分函数

(2)低位到高位为下半周;影响微分函数

初始位置

α= 121

γ= 91

β= 112

(注意:这

些值根据

实际情况

而定,并非

一定)

我们研究腿部运动时,按

照从初始位置(即最高站

立姿式)起向最低站立姿

势过渡时的舵机转动方

向为正方向。那么图中标

出了 3 个舵的正方向。

由于舵机规定的正方向

为逆时针方向,则:

1.方向 1 与舵机反向

2.方向 2 与舵机同向

3.方向 3 与舵机同向

上半周:舵机 1的 △N = -

舵机 2的 △N = +

舵机 3的 △N = +

下半周:舵机 1的 △N = +

舵机 2的 △N = -

舵机 3的 △N = -

α

β

γ

1

2

3

Page 20: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 15 页

3.左腿半周期运动程序分析

依照上面所讲述的 2 个几何特点,① L12=L23;

② 1、3 点始终垂直共线;

∴ 舵机 1的|△N|=1

舵机 2的|△N|=2

舵机 3的|△N|=1

CPU一边进行积分运算,一边将数据发送给舵机。

初始时刻

α= 121

γ= 91

β= 112

(注意:这些

值根据实际

情况而定,

并非一定)

上半周:舵机 1的 △N = -1

舵机 2的 △N = +2

舵机 3的 △N = +1

下半周:舵机 1的 △N = +1

舵机 2的 △N = -2

舵机 3的 △N = -1

CPU 进行上半周积分时,腿部逐渐下蹲;

CPU 进行下半周积分时,腿部逐渐上抬;

积分始:①α=121

②γ=91

③β=112

积分末:①α=45

②γ=243

③β=188

至积分末,发现α先出现极限值 45,那么

积分步数为:121-45=76步。

76DWA=76×0.74度=56.24度

∴△α=56.24度

△γ=112.48度

△β=56.24度

以上介绍的是积分上半周的动作系数

α

γ

β

α

β γ

Page 21: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 16 页

五.SHR-5S 右腿机械结构

1.右腿部侧面轴关节介绍

如同左腿一样,右腿的机械结构与其形成平面对称

结构。属于日本加藤一郎结构。

其腿部侧面就如右图所示:它有 3个自由度,每个自

由度采用 1个舵机构成。图中用 4、5、6表示这 3

个舵机。

同样包含几个重要的几何关系:

一般的机器人,腿上半部与下半部长短相近,我们

在研究机器人步伐的时候可以令其为相等长度。这

是 1个十分关键的地方。

在计算过程中,令腿的上半部与下半部长度相等。

原地踏步动作时:

∵L45=L56

∴△α=△β

∴△γ=△α+△β=2△α

(如此简单的函数关系,可以骤减 CPU的计算量)

今后在做一般性研究时,可以将 L45和 L56做成任意长度。

如此描述一个简单的微分函数(原地踏步函数):

∵dα=dβ

∴dγ= dα+dβ(一般 CPU就用此式进行积分运算)

取△α为 1DWA,则△β=1DWA,△γ=2DWA

即:舵机 4的|△N|=1

舵机 5的|△N|=2

舵机 6的|△N|=1

CPU一边进行积分运算,一边将数据发送给舵机,令其执行。

∴∫dγ=∫(dα+ dβ)=∫dα+∫dβ

∴Kγ+△γ=(Kα+△α)+(Kβ+△β)

Kγ、Kα、Kβ为积分原始初始值,在机器人中表现为初

注意:4-5 和 5-6 的长短要一致

会骤减 CPU 的计算量!

4

5

6

α

β

γ

Page 22: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 17 页

2.舵机转动正方向制定

(1)高位到低位为上半周;影响微分函数

(2)低位到高位为下半周;影响微分函数

初始位置

α= 80

γ= 201

β= 128

(注意:这

些值根据

实际情况

而定,并非

一定)

我们研究腿部运动时,按

照从初始位置(即最高站

立姿式)起向最低站立姿

势过渡时的舵机转动方

向为正方向。那么图中标

出了 3 个舵的正方向。

由于舵机规定的正方向

为逆时针方向,则:

1.方向 4 与舵机同向

2.方向 5 与舵机反向

3.方向 6 与舵机反向

上半周:舵机 4的 △N = +

舵机 5的 △N = -

舵机 6的 △N = -

下半周:舵机 4的 △N = -

舵机 5的 △N = +

舵机 6的 △N = +

α

β

γ

4

5

6

Page 23: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 18 页

3.右腿半周期运动程序分析

依照上面所讲述的 2 个几何特点,① L45=L56;

② 4、6 点始终垂直共线;

∴ 舵机 4的|△N|=1

舵机 5的|△N|=2

舵机 6的|△N|=1

CPU一边进行积分运算,一边将数据发送给舵机。

初始时刻

α= 80

γ= 201

β= 128

上半周:舵机 4的 △N = +1

舵机 5的 △N = -2

舵机 6的 △N = -1

下半周:舵机 4的 △N = -1

舵机 5的 △N = +2

舵机 6的 △N = +1

CPU 进行上半周积分时,腿部逐渐下蹲;

CPU 进行下半周积分时,腿部逐渐上抬;

积分始:①α=80

②γ=201

③β=128

积分末:①α=156

②γ=49

③β=52

至积分末,发现α先出现极限值 156,那么

积分步数为:156-80=76步。

76DWA=76×0.74度=56.24度

∴△α=56.24度

△γ=112.48度

△β=56.24度

以上介绍的是积分上半周的动作系数

α

β

γ

α

γ β

Page 24: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 19 页

六.双腿蹲起动作解析

1.双腿蹲起动作程序特点

相对其他程序,蹲起程序较为简单,但恰恰是最基础的程序,所以在所有程序中处于中

流砥柱的位置。在机器人蹲起过程中

有以下 4个特点:①双腿着地;

②同起同落;

③脚、肩保持平行;

④胸平面轴不动;

根据这 4个特点,我们采用积分程序将双腿的运动过程中的各个关节位置计算出来,并

实时输送给舵机。共控制 6个运动轴,分别为左腿的 1、2、3和右腿的 4、5、6。

其中:△α=△1=△4

△γ=△2=△5

△β=△3=△6

△α=△β

△γ=2△α

规定蹲为动作的上半周期

规定起为动作的下半周期

1

2

3

4

5

6

Page 25: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 20 页

2.积分首末位置与过程

我们将积分过程分为上下 2个半周期,则每条腿有 4个初始位置。

即: A积分至 B

B 积分至 A

上半周:

下半周:

最多可以积分 76步,关节 1、4会到达极限值。

起始位置公式:

结束位置公式:

1. 121 45

2. 91 # 243

3. 112 188

4. 80 156

5. 201 49

6. 128 52

1. 121 45

2. 91 243

3. 112 188

4. 80 156

5. 201 49

6. 128 52

积分起始位置可以改变(条件 1、2、3;4、5、6遵守肩、脚平行)

积分结束位置可以改变(条件 1、2、3;4、5、6遵守肩、脚平行)

1= 121 - △N 4= 80 + △N

2= 91 + 2△N 5=201 - 2△N

3=112 + △N 6=128 - △N

1= 45 +△N 4= 156- △N

2= 243- 2△N 5=49 + 2△N

3=188 - △N 6=52 + △N

Page 26: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 21 页

3.积分中间位置

积分的中间位置是个特殊位置,在这点上双腿的运动幅度占总幅度的一半,那么就对将

来的原地踏步动作起着关键作用。根据几何关系得出在踏步运动中,积分中点是左、右脚的

换脚位置,顾十分重要;另外,在随时调节踏步的幅度时,中点的漂移与控制是个值得关注

的技术,以下逐步分析中点坐标的计算方法。

例:当 1的起始值为 121,1的结束值为 45时,

积分全过程 △N=76步

积分半过程 1/2△N=38步

则中点坐标为: 1=159

2=167

3=150

当 4的起始值为 80,1的结束值为 156 时,

积分全过程 △N=76步

积分半过程 1/2△N=38步

则中点坐标为: 4=118

5=125

6=90

中点坐标公式为

M1 = 1 起始 - 1/2△N

M2 = 2起始 + △N

M3 = 3起始 + 1/2△N

M4 = 4 起始 + 1/2△N

M5 = 5 起始 - △N

M6 = 6 起始 - 1/2△N

Page 27: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 22 页

七.P 平面动作舵机

新增的胸平面舵机有 4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不倾

斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,当形成周期运动,且保持

肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3△P4

初始位置:

P1=98

P2=197

P3=200

P4=97

该位置参数来自 1

台 SHR-5S 实验

机,其他机器人参

数根据各自舵机

初始位置而定

P1

P2

P3

P4

Page 28: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 23 页

八.变速及变加速运动解析

1.变加速运动定义

所谓的变加速运动,是在匀加速运动的基础上将加速度改变的运动。

图中可以看出,匀加速运动过程中,加速度为常数。这样就会给系统带来长时间的最终

外力,系统会不稳定。

如果需要系统稳定,可以构造一个变加速系统:起初加速度为“0”,加速度逐渐变大,

达到最大值后再逐渐减小至“0”,此时,系统停止运动。在整个过程中,加速度由生至灭,

逐步过渡,属于开口向下的抛物线。

我们将加速度 a积分,可以得到速度 v函数;再将速度 v积分可以得到位移 s函数;

如下图:

匀加速 变加速

2 次曲线

3 次曲线

1 次曲线

2 次曲线

1 次曲线

常数

Page 29: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 24 页

2.扫尾系数

程序调速过程中,调用 PWM_16 程序后,依靠变化的延时程序拖延下次位置数据发送

的时间,以此进行调速控制。

令扫尾时间系数为 Sa

则:5ms ≤扫尾时间≤ 25ms ;△扫尾时间=20ms;

若:以 0.5 ms 为 1 个时间单位,

则:△Sa= 20ms÷0.5ms = 40

则:1≤△Sa≤40

在进行系统调速控制时,改变系统速度有 2 个方法:

(1)舵机控制分辨率不变,改变下一个目标位置的发出时间,使 Sa 变化;

(2)Sa 不变(即每个控制周期均保持 20ms 左右),改变系统的分辨率;

由于好的数控系统,忌讳变更分辨率。我们每时每刻希望得到系统的最高分辨率,所以

我们采用改变 Sa 数的方法,控制舵机速度。

扫尾系数 Sa 十分重要,在后面的速度与加速度的控制算法中会针对每种运动方式具体

给出 Sa 的函数,而这些也是微分元函数表达式的重要组成部分。

3.积分步数系数

数控系统大量采用积分程序,那么系统进行计算时采用连续的积分运算,所以系统的积

分步数很重要,根据积分步数可以时刻计算出具体的舵机位置。

令:积分步数为 Ea

则:Ea 是正数、整数,并根据具体的动作有不同的界。

一般的,腿部运动过程中 Z 平面,1≤△Ea≤76;

Page 30: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 25 页

九.基础动作子程序解析

1.P1 口 8 路单周期子程序

程序入口:position[0]-- position[7].

void PWM_8p1( )

{ uchar i=0,j=0;

for(i=0;i<=7;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P1=0xff; //使口 P1全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P1(八路)

{

for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P1=P1&kouchu[7-i];

}

}

程序作用:在 1 个标准周期内,

将 P1 口 8 个端的位置数据转换

成 PWM 信号输送出去。

PWM 信号:0.5ms—2.5ms

最短扫尾:5ms;

Page 31: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 26 页

2.P2 口 8 路单周期子程序

程序入口:position[8]-- position[15].

P2口 8路单周期子程序

void PWM_8p2( )

{ uchar i=0,j=0;

for(i=0;i<8;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i+8];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P2=0xff; //使口 P2全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P2(八路)

{ for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P2=P2&kouchu[7-i];

}

}

注:在实际应用中,我们将 PWM_8p1、PWM_8p2 统一成一个子程序,命名为 PWM_16,详情

请见源代码手册。

程序作用:在 1 个标准周期内,

将 P2 口 8 个端的位置数据转换

成 PWM 信号输送出去。

PWM 信号:0.5ms—2.5ms

最短扫尾:5ms;

Page 32: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 27 页

3.单目标位置输出方法

主要依靠 PWM_8P1()和 PWM_8P2()子程序实现,方法如下:

将目标位置数放入position[0]-- position[7]寄存器内。 然后调用PWM_8P1()子程序,

即可输出 P1口的目标位置。

同理,将目标位置数放入 position[8]-- position[15]寄存器内,然后调用 PWM_8P2()

子程序,即可输出 P2 口的目标位置。

若想同时输出 P1 口和 P2口的信号,可以依次执行,也可并行执行。

P1 位 置 数

position[0]—position[7]

调用 PMW_8P1();

P2 位 置 数

position[8]—position[15]

调用 PMW_8P2();

放 数 position[0]--

position[7]

PWM_8P1();

放 数 position[8]--

position[15]

PWM_8P2();

依次

时间间隙长

放 数 position[0]--

position[7]

放 数 position[8]--

position[15]

PWM_8P1();

PWM_8P2();

并行

时间间隙短

1 个周期一般为

3 ms -20ms,2 个端

口依次执行,要考

虑周期时间对扫

尾时间的影响,即

影响调速。

Page 33: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 28 页

十.双腿侧身动作解析

1.动作过程中各舵机的方向制定

舵机号 P1 P2 P3 P4

位置寄存器 Position[8] Position[9] Position[10] Position[11]

端口 P2.0 P2.1 P2.2 P2.3

上极限 120 120 162 162

中间态 104 104 146 146

下极限 88 88 130 130

由于机器人逐渐进行侧身动作

时的运动方向为正方向,那么

侧身动作的 4 个关节上半周方

向为 2 正 2 反,相应的 4 个舵

机的转动方向为:

上半周:P1= + P3= +

P2= + P4= +

上半周:P1= - P3= -

P2= - P4= -

P1

P2

P3

P4

Page 34: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 29 页

2.速度与加速度解析

侧身动作是双足机器人行走的必要动作。由于双足机器人要求重心始终落在脚面边缘以

内,而且行走过程中需要交替换腿,所以只有侧身动作才能将重心来回调整至 2个脚的边缘

以里。中间换脚过程存在一个过渡区域,双脚挨得近,区域较小;反之,双脚离得远,区域

较大,具体计算在后面的章节讲述。

侧身过程,是为后面紧接的踏步动作做准备。那么,就存在一个衔接的问题。系统处于

稳定状态,在机械上表现为机器人平稳动作即不抖动。那么,根据牛顿定律,机器人加速度

为“0”, 不受外力或称合力为“0”。那么,机器人运动至左、右两侧最大角度时,速度为

“0”,即瞬间停止。根据左、右侧身动作的整体对称性与周期性,我们可以归纳出,中间位

置时的速度最大,两端最小或为“0”,属于余弦函数或周期性循环的 2个指数函数。

机器人的侧身要求:①侧身后双脚站立,不倾倒、不倾斜、不抖动;

②侧身后单脚站立,不倾倒、不倾斜、不抖动;

显然,单脚站立要比双脚站立难于实现。

引入系统速度平均值概念。由于系统时刻处于变速运动过程,其速度存在最大值与最小

值,并在其间过渡。我们控制其最大与最小值即可控制整个系统的平均速度。

那么当 Sa最大时,速度最小。

向左侧身第 1族子程序中,Sa=1/2*Ea+psax;其中 psax内存放速度平均值修正系数。

程序调用时可以预先放入初始值;

一般的,侧身运动的速度不能太快,所以取值范围 26--48

P1

P2

P3

P4

影响机器人站立稳定性的因素

主要有:

① 每个关节舵机的自抖动;

②(身+手+头)质量总和与双

腿质量的比值;

③(身+头)与双手的质量比;

④ 头的质量分配;

⑤ 身的质量分配

Page 35: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 30 页

十一.变速及变加速运动解析

1.变加速运动定义

所谓的变加速运动,是在匀加速运动的基础上将加速度改变的运动。

图中可以看出,匀加速运动过程中,加速度为常数。这样就会给系统带来长时间的最终

外力,系统会不稳定。

如果需要系统稳定,可以构造一个变加速系统:起初加速度为“0”,加速度逐渐变大,

达到最大值后再逐渐减小至“0”,此时,系统停止运动。在整个过程中,加速度由生至灭,

逐步过渡,属于开口向下的抛物线。

我们将加速度 a积分,可以得到速度 v函数;再将速度 v积分可以得到位移 s函数;

如下图:

匀加速 变加速

2 次曲线

3 次曲线

1 次曲线

2 次曲线

1 次曲线

常数

Page 36: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 31 页

2.扫尾系数

程序调速过程中,调用 PWM_8 程序后,依靠变化的延时程序拖延下次位置数据发送的

时间,以此进行调速控制。

令扫尾时间系数为 Sa

则:5ms ≤扫尾时间≤ 25ms ;△扫尾时间=20ms;

若:以 0.5 ms 为 1 个时间单位,

则:△Sa= 20ms÷0.5ms = 40

则:1≤△Sa≤40

在进行系统调速控制时,改变系统速度有 2 个方法:

(1)舵机控制分辨率不变,改变下一个目标位置的发出时间,使 Sa 变化;

(2)Sa 不变(即每个控制周期均保持 20ms 左右),改变系统的分辨率;

由于好的数控系统,忌讳变更分辨率。我们每时每刻希望得到系统的最高分辨率,所以

我们采用改变 Sa 数的方法,控制舵机速度。

扫尾系数 Sa 十分重要,在后面的速度与加速度的控制算法中会针对每种运动方式具体

给出 Sa 的函数,而这些也是微分元函数表达式的重要组成部分。

3.积分步数系数

数控系统大量采用积分程序,那么系统进行计算时采用连续的积分运算,所以系统的积

分步数很重要,根据积分步数可以时刻计算出具体的舵机位置。

令:积分步数为 Ea

则:Ea 是正数、整数,并根据具体的动作有不同的界。

一般的,腿部运动过程中 Z 平面,1≤△Ea≤76;

Page 37: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 32 页

十二.基础动作子程序解析

1.P1 口 8 路单周期子程序

程序入口:position[0]-- position[7].

void PWM_8p1( )

{ uchar i=0,j=0;

for(i=0;i<=7;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P1=0xff; //使口 P1全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P1(八路)

{

for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P1=P1&kouchu[7-i];

}

}

程序作用:在 1 个标准周期内,

将 P1 口 8 个端的位置数据转换

成 PWM 信号输送出去。

PWM 信号:0.5ms—2.5ms

最短扫尾:5ms;

Page 38: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 33 页

2.P2 口 8 路单周期子程序

程序入口:position[8]-- position[15].

P2口 8路单周期子程序

void PWM_8p2( )

{ uchar i=0,j=0;

for(i=0;i<8;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i+8];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P2=0xff; //使口 P2全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P2(八路)

{ for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P2=P2&kouchu[7-i];

}

}

程序作用:在 1 个标准周期内,

将 P2 口 8 个端的位置数据转换

成 PWM 信号输送出去。

PWM 信号:0.5ms—2.5ms

最短扫尾:5ms;

Page 39: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 34 页

3.单目标位置输出方法

主要依靠 PWM_8P1()和 PWM_8P2()子程序实现,方法如下:

将目标位置数放入position[0]-- position[7]寄存器内。 然后调用PWM_8P1()子程序,

即可输出 P1口的目标位置。

同理,将目标位置数放入 position[8]-- position[15]寄存器内,然后调用 PWM_8P2()

子程序,即可输出 P2 口的目标位置。

若想同时输出 P1 口和 P2口的信号,可以依次执行,也可并行执行。

P1 位 置 数

position[0]—position[7]

调用 PMW_8P1();

P2 位 置 数

position[8]—position[15]

调用 PMW_8P2();

放 数 position[0]--

position[7]

PWM_8P1();

放 数 position[8]--

position[15]

PWM_8P2();

依次

时间间隙长

放 数 position[0]--

position[7]

放 数 position[8]--

position[15]

PWM_8P1();

PWM_8P2();

并行

时间间隙短

1 个周期一般为

3 ms -20ms,2 个端

口依次执行,要考

虑周期时间对扫

尾时间的影响,即

影响调速。

Page 40: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 35 页

十三.单一动作变速运动子程序解析

1.双腿下蹲动作变速子程序解析

下蹲动作可以自由运行出许多种轨迹,我们将其归纳成 2种,各代表 1种运动特性。

第 1种:下蹲过程中只有 1个阶段,速度逐渐增加,加速度不变或加速度逐渐减小,到达下

极限位置时机器人的腿部会产生极大的压力;优点是可以增加脚面的附着力,缺点

是系统负荷大,不宜经常采用此动作。

第 2种:下蹲过程中分为的 2个阶段,开始时速度最小,然后速度逐渐增大,运动至中点时

速度最大,加速度是逐渐减小的函数;然后速度逐渐减小,到达下极限位置时机器

人的腿部会产生最小的压力;优点是属于软着陆,平稳过渡。

其中包含 2 种分立运动,我们将其称作 2族。

第 1族:速度逐渐增大,直至最大;此过程中,加速度函数可以描述成递增或递减的函数。

第 2族:速度逐渐减小,直至最小;此过程中,加速度函数可以描述成递增或递减的函数。

Page 41: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 36 页

(1)下蹲第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(XD_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

有 1个问题摆出来了,那就是 76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

下蹲第 1族子程序算法

Page 42: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 37 页

下蹲第 1族子程序指令

程序入口:(uchar foot)放入积分运算器初值

// 函数原型:void xd_zu1(uchar foot))

// 函数名称:下蹲第 1族子程序。

// 功 能:加速下蹲,速度增加有一个过程,有利于机器人平衡稳定性

// 参 数:foot, 表示积分步数。

// 返 回 值:无

// 函数编号:一

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void xd_zu1(uchar foot)

{

uchar i,j;

j=foot/2+zsax; //z 平 面 扫 尾 值 初 始 化 计 算 公 式

for(i=0;i<foot;i++)

{

position[0]--; //z1 190+28=218 左腿下蹲

position[1]++; //z2 91+2*28=147

position[1]++;

position[2]++; //z3 133-28=105

position[3]++; //z4 101-28=73 右腿下蹲

position[4]--; //z5 158-2*28=102

position[4]--;

position[5]--; //z6 149+28=177

PWM_16();

if(j>5)

{

j--;

sao_wei(j); //调用扫尾值计算子程序,最后 zsag=5

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 43: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 38 页

(2)下蹲第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(XD_ZU2)整个过程分为 2个阶段,加速与减速阶段,积分中间点速度最大。

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,1/2* Ea=38;

有 1个问题摆出来了,那就是 76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

下蹲第 2族子程序算法

Page 44: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 39 页

下蹲第 2族子程序

程序入口:(uchar foot)放入积分运算器初值

// 函数原型:void xd_zu2(uchar foot))

// 函数名称:下蹲第 2族子程序

// 功 能:减速下蹲,减小脚板对地面的作用力,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值:无

// 函数编号:二

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void xd_zu2(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]--; //z1 218+28=246 左腿下蹲

position[1]++; //z2 147+2*28=203

position[1]++;

position[2]++; //z3 105-28=77

position[3]++; //z4 73-28=45 右腿下蹲

position[4]--; //z5 102-2*28=46

position[4]--;

position[5]--; //z6 177+28=205

PWM_16();

if(j<32)

{

j++;

sao_wei(j); //调用扫尾值计算子程序,速度减慢

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 45: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 40 页

2.双腿起立动作变速子程序解析

起立动作可以自由运行出许多种轨迹,我们将其归纳成 2种,各代表 1种运动特性。

第 1种:起立过程中只有 1个阶段,速度逐渐增加,加速度不变或加速度逐渐减小,到达下

极限位置时机器人的腿部会产生极大的压力;优点是可以增加脚面的附着力,缺点

是系统负荷大,不宜经常采用此动作。

第 2种:起立过程中分为 2个阶段,起始时速度最小,然后速度逐渐增大,运动至中点时,

速度最大,加速度是逐渐减小的函数;然后速度逐渐减慢,到达上极限位置时机器

人的速度为“0”,腿部会产生最小的压力;优点是属于软着陆,平稳过渡。

其中包含 2 种分立运动,我们将其称作 2族。

第 1族:速度逐渐增大,直至最大;此过程中,加速度函数可以描述成递增或递减的函数。

第 1族:速度逐渐减小,直至最小;此过程中,加速度函数可以描述成递增或递减的函数。

Page 46: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 41 页

(1)起立第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(QL_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

起立第 1族子程序算法

Page 47: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 42 页

起立第 1族子程序指令

程序入口:(uchar foot)放入积分运算器初值

// 函数原型: void ql_zu1(uchar foot)

// 函数名称: 起立第 1族子程序

// 功 能: 加速起立,速度增加有一个过程,有利于机器人平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 三

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ql_zu1(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[1]--; //z2

position[1]--;

position[2]--; //z3

position[3]--; //z4

position[4]++; //z5

position[4]++;

position[5]++; //z6

PWM_16();

if(j>5)

{

j--;

sao_wei(j); //调用扫尾值计算子程序,加速起立

j=zsag;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 48: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 43 页

(2)起立第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(QL_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

起立第 2族子程序算法

Page 49: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 44 页

起立第 2族子程序

程序入口:(MOV 1EH,#XXH)放入积分运算器初值

// 函数原型:void ql_zu2(uchar foot)

// 函数名称:起立第 2族子程序

// 功 能:减速下蹲,减小脚板对地面的作用力,有利于机器人的平衡稳定性

// 参 数:foot, 表示积分步数。

// 返 回 值:无

// 函数编号:四

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ql_zu2(uchar foot)

{

uchar i,j=0;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[1]--; //z2

position[1]--;

position[2]--; //z3

position[3]--; //z4

position[4]++; //z5

position[4]++;

position[5]++; //z6

PWM_16();

if(j<32)

{

j++;

sao_wei(j); //调用扫尾值计算子程序,减速起立

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 50: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 45 页

3.双腿侧身动作变速子程序解析

(1)向左侧身第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(L_CS_ZU1)

虽然腿部的胯关节可以大角度转动,但是脚踝关节只能从# H 转到# H,由于在侧身

动作中,胯骨与踝骨保持平行机构,则转动幅度受到限制。根据实际机械测量,SHR-8S 的

侧身极限参数如下:

舵机号 P1 P2 P3 P4

位置寄存器 Position[8] Position[9] Position[10] Position[11]

端口 P2.0 P2.1 P2.2 P2.3

上极限 120 120 162 162

中间态 104 104 146 146

下极限 88 88 130 130

幅度系数最大为:Ea = 160-10488=56

扫尾系数最大为:Sa = 40

同样的问题,56与 40 的换算关系。

我们发现积分步数不一定能够达到 32,过程中出现在 1/2*56的概率最大,即为 28。

那么 28<40 ,所以在算法上采取,将 Ea 的直接放入 Sa 的初值;这样的作会使实际的扫尾

数普遍便小,速度会略增大;

避免此种现象发生,我们令:实际 Sa = 计算 Sa+补偿 Sa;

具体补偿 Sa值由实际测试得出:补偿 Sa=#6H;

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

Page 51: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 46 页

向左侧身第 1 族算法

注意: 由于执行每个微分元程序时 Sa 数每次必一定“+1”或“-1”,那么就不能直接采用

“sao_wei(saowei)”的函数,要采用“+极限值”或“-极限值”,并判断“j”属性

的方法,来判断是否 Sa数到达极限值。

Page 52: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 47 页

向左侧身第 1 族子程序

程序入口:(uchar foot )放入积分运算器初值

psag P平面 Sa过渡寄存器

// 函数原型:void l_cs__zu1(uchar foot)

// 函数名称:向左侧身第 1族子程序

// 功 能:加速向左侧身,速度的增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 五

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void l_cs__zu1(uchar foot)

{

uchar i,j;

j=psag; //p平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[8]--; //p1 134-30=104 左腿

position[9]++; //p2 134-30=04

position[10]--; //p3 176-30=146 右腿

position[11]++; //p4 176-30=146

position[12]++; //p5

position[14]++; //p7

PWM_16();

if(j>5)

{

j--;

sao_wei(j); //加速向左侧身,提高反映速度

psag=j;

}

else

{

sao_wei(5);

psag=5;

}

}

}

Page 53: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 48 页

(2)向左侧身第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(L_CS_ZU2)

虽然腿部的胯关节可以大角度转动,但是脚踝关节只能从# H 转到# H,由于在侧身

动作中,胯骨与踝骨保持平行机构,则转动幅度受到限制。根据实际机械测量,SHR-8S 的

侧身极限参数如下:

舵机号 P1 P2 P3 P4

位置寄存器 Position[8] Position[9] Position[10] Position[11]

端口 P2.0 P2.1 P2.2 P2.3

上极限 120 120 162 162

中间态 104 104 146 146

下极限 88 88 130 130

幅度系数最大为:Ea = 160-104=56

扫尾系数最大为:Sa = 40

同样的问题,32与 40 的换算关系。

我们发现积分步数不一定能够达到 32,过程中出现在 1/2*56的概率最大,即为 28。

那么 28<40 ,所以在算法上采取,将 Ea 的直接放入 Sa 的初值;这样的作会使实际的扫尾

数普遍便小,速度会略增大;

避免此种现象发生,我们令:实际 Sa = 计算 Sa+补偿 Sa;

具体补偿 Sa值由实际测试得出:补偿 Sa=# H;

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐增大,速度逐渐减慢;

属于第 2族运动方式,即积分停止时速度最小或出现“0”值。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

Page 54: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 49 页

向左侧身第 2 族算法

注意: 由于执行每个微分元程序时 Sa 数每次必一定“+1”或“-1”,那么就不能直接采用

“sao_wei(saowei)”的函数,要采用“+极限值”或“-极限值”,并判断“j”属性

的方法,来判断是否 Sa数到达极限值。

Page 55: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 50 页

向左侧身第 2 族子程序

程序入口:(uchar foot)放入积分运算器初值

Psax P平面 Sa修正数寄存器

// 函数原型:void l_cs__zu2(uchar foot)

// 函数名称:向左侧身第 2族子程序

// 功 能:减速向左侧身,速度的减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 六

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void l_cs__zu2(uchar foot)

{

uchar i,j;

j=5; //p平面扫尾值初始化计算公式

for(i=0;i<foot;i++)

{

position[8]--; //p1 104-30=74 左腿

position[9]++; //p2 104-30=74

position[10]--; //p3 146-30=116 右腿

position[11]++; //p4 146-30=116

position[12]++; //p5 摆手

position[14]++; //p7

PWM_16();

if(j<32)

{

j++;

sao_wei(j); //扫尾值增大,减速向左侧身

psag=j;

}

else

{

sao_wei(32);

psag=32;

}

}

}

Page 56: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 51 页

(3)向右侧身第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(R_CS_ZU1)

虽然腿部的胯关节可以大角度转动,但是脚踝关节只能从# H 转到# H,由于在侧身

动作中,胯骨与踝骨保持平行机构,则转动幅度受到限制。根据实际机械测量,SHR-8S 的

侧身极限参数如下:

舵机号 P1 P2 P3 P4

位置寄存器 Position[8] Position[9] Position[10] Position[11]

端口 P2.0 P2.1 P2.2 P2.3

上极限 120 120 162 162

中间态 104 104 146 146

下极限 88 88 130 130

幅度系数最大为:Ea = 160-104=56

扫尾系数最大为:Sa = 40

同样的问题,32与 40 的换算关系。

我们发现积分步数不一定能够达到 56,过程中出现在 1/2*56的概率最大,即为 28。

那么 28<40 ,所以在算法上采取,将 Ea 的直接放入 Sa 的初值;这样的作会使实际的扫尾

数普遍便小,速度会略增大;

避免此种现象发生,我们令:实际 Sa = 计算 Sa+补偿 Sa;

具体补偿 Sa值由实际测试得出:补偿 Sa=# H;

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐增大;

属于第 1族运动方式,即积分停止时速度最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

Page 57: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 52 页

向右侧身第 1 族算法

注意: 由于执行每个微分元程序时 Sa 数每次必一定“+1”或“-1”,那么就不能直接采用

“sao_wei(saowei)”的函数,要采用“+极限值”或“-极限值”,并判断“j”属性

的方法,来判断是否 Sa数到达极限值。

Page 58: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 53 页

向右侧身第 1 族子程序

程序入口:(uchar foo)放入积分运算器初值

psag P平面 Sa过渡寄存器

// 函数原型:void r_cs__zu1(uchar foot)

// 函数名称:向右侧身第 1族子程序

// 功 能:加速向右侧身,速度增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 七

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void r_cs__zu1(uchar foot)

{

uchar i,j;

j=psag; //p平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[8]++; //p1

position[9]--; //p2

position[10]++; //p3

position[11]--; //p4

position[12]--; //p5

position[14]--; //p7

PWM_16();

if(j>6)

{

j--;

j--;

sao_wei(j);

psag=j;

}

else

{

sao_wei(6);

psag=6;

}

}

}

Page 59: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 54 页

(4)向右侧身第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(R_CS_ZU2)

虽然腿部的胯关节可以大角度转动,但是脚踝关节只能从# H 转到# H,由于在侧身

动作中,胯骨与踝骨保持平行机构,则转动幅度受到限制。根据实际机械测量,SHR-8S 的

侧身极限参数如下:

舵机号 P1 P2 P3 P4

位置寄存器 Position[8] Position[9] Position[10] Position[11]

端口 P2.0 P2.1 P2.2 P2.3

上极限 120 120 162 162

中间态 104 104 146 146

下极限 88 88 130 130

幅度系数最大为:Ea = 160-104=56

扫尾系数最大为:Sa = 40

同样的问题,32与 40 的换算关系。

我们发现积分步数不一定能够达到 56,过程中出现在 1/2*56的概率最大,即为 28。

那么 28<40 ,所以在算法上采取,将 Ea 的直接放入 Sa 的初值;这样的作会使实际的扫尾

数普遍便小,速度会略增大;

避免此种现象发生,我们令:实际 Sa = 计算 Sa+补偿 Sa;

具体补偿 Sa值由实际测试得出:补偿 Sa=# H;

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐增大,速度逐渐减慢;

属于第 2族运动方式,即积分停止时速度最小或出现“0”值。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

Page 60: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 55 页

向右侧身第 2 族算法

注意: 由于执行每个微分元程序时 Sa 数每次必一定“+1”或“-1”,那么就不能直接采用

“sao_wei(saowei)”的函数,要采用“+极限值”或“-极限值”,并判断“j”属性

的方法,来判断是否 Sa数到达极限值。

Page 61: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 56 页

向右侧身第 2 族子程序

程序入口:(uchar foot )放入积分运算器初值

psag P平面 Sa过渡寄存器

// 函数原型:void r_cs__zu2(uchar foot)

// 函数名称:向右侧身第 2族子程序

// 功 能:向右侧身速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 八

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void r_cs__zu2(uchar foot)

{

uchar i,j;

j=psag; //p平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[8]++; //p1 104+30=134 左腿

position[9]--; //p2 104+30=134

position[10]++; //p3 146+30=176 右腿

position[11]--; //p4 146+30=176

position[12]--; //p5 摆手

position[14]--; //p7

PWM_16();

if(j<20)

{

j++;

sao_wei(j); //扫尾值自加,向右侧身速度减小

psag=j;

}

else

{

sao_wei(20);

psag=20;

}

}

}

Page 62: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 57 页

4.单腿运动变速子程序解析

(1)左腿抬起第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(LT_UP_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

左腿抬起第 1 族算法

Page 63: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 58 页

左腿抬起第 1 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsax Z平面 Sa修正数寄存器

// 函数原型:void lt_up__zu1(uchar foot)

// 函数名称:左腿抬起第 1族子程序

// 功 能:左腿抬起速度加快,速度增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 九

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lt_up__zu1(uchar foot)

{

uchar i,j; //z平面扫尾值初始化计算公式

j=(foot/2)+zsax;

for(i=0;i<foot;i++)

{

position[0]--; //z1

position[1]++; //z2

position[1]++;

position[2]++; //z3

PWM_16();

if(j>5)

{

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 64: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 59 页

(2)左腿抬起第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(LT_UP_ZU2)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*76的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

左腿抬起第 2族子程序

Page 65: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 60 页

左腿抬起第 2 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z平面 Sa过渡数寄存器

// 函数原型:void lt_up__zu2(uchar foot)

// 函数名称:左腿抬起第 2族子程序

// 功 能:左腿抬起速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lt_up__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]--; //z1

position[1]++; //z2

position[1]++;

position[2]++; //z3

PWM_16();

if(j<32)

{

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 66: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 61 页

(3)右腿抬起第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(RT_UP_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

右腿抬起第 1 族算法

Page 67: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 62 页

右腿抬起第 1 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void rt_up__zu1(uchar foot)

// 函数名称:右腿抬起第 1族子程序

// 功 能:右腿抬起速度加快,速度增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十一

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rt_up__zu1(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[3]++; //z4

position[4]--; //z5

position[4]--;

position[5]--; //z6

PWM_16();

if(j>5)

{

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 68: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 63 页

(4)右腿抬起第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(RT_UP_ZU2)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

右腿抬起第 2 族算法

Page 69: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 64 页

右腿抬起第 2 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void rt_up__zu2(uchar foot)

// 函数名称:右腿抬起第 2族子程序

// 功 能:右腿抬起速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十二

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rt_up__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[3]++; //z4

position[4]--; //z5

position[4]--;

position[5]--; //z6

PWM_16();

if(j<32)

{

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

Page 70: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 65 页

(5)左腿落下第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(LT_DW_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

左腿落下第 1 族算法

Page 71: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 66 页

左腿落下第 1 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void lt_dw__zu1(uchar foot)

// 函数名称:左腿落下第 1族子程序

// 功 能:左腿落下速度增加,速度增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十三

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lt_dw__zu1(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[1]--; //z2

position[1]--;

position[2]--; //z3

PWM_16();

if(j>5)

{

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 72: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 67 页

(6)左腿落下第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(LT_DW_ZU2)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

左腿落下第 2 族算法

Page 73: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 68 页

左腿落下第 2 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void lt_dw__zu2(uchar foot)

// 函数名称:左腿落下第 2族子程序

// 功 能:左腿落下速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十四

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lt_dw__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[1]--; //z2

position[1]--;

position[2]--; //z3

PWM_16();

if(j<32)

{

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 74: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 69 页

(7)右腿落下第 1 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(RT_DW_ZU1)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

右腿落下第 1 族算法

Page 75: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 70 页

右腿落下第 1 族子程序

程序入口:(uchar foot )放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void rt_dw__zu1(uchar foot)

// 函数名称:右腿落下第 1族子程序

// 功 能:右腿落下速度增加,速度增加有一个起动过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十五

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rt_dw__zu1(uchar foot)

{

uchar i,j; //z 平面扫尾值过渡

j=zsag;

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[4]++; //z5

position[4]++;

position[5]++; //z6

PWM_16();

if(j>5)

{

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 76: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 71 页

(8)右腿落下第 2 族子程序

系统会自动执行每个微分元的动作位置,自动提取并装入初始位置,自动进行积分步数

合理性判断。(RT_DW_ZU2)

扫尾系数最大为:Sa=40

下蹲过程的积分步数最大为:Ea=76,

也是这个问题,76与 40的换算关系。

我们发现积分步数不一定能够达到 76,过程中出现在 1/2*67的概率最大,即为 38。

那么 38≈40 ,所以在算法上采取,将 Ea的直接放入 Sa的初值。

我们发现当积分步数 Ea 较小时,腿部转动角度也较小,则启动速度可以快些,系统能

够保持稳定,也就是说扫尾数初值可以小些,即 Sa较小。

我们还发现当积分步数 Ea 较大时,腿部转动角度也较大,则启动速度要求慢些,系统

能够保持稳定,也就是说扫尾数初值可以大些,即 Sa较大。

依据以上的机械运动特性,我们推出以下公式:

初始时 Sa = Ea ; 过程中 1≤Sa≤Ea

伴随着系统运动,积分步数 Ea逐渐减小,速度参数 Sa逐渐减小,速度逐渐加快;

属于第 1族运动方式,即积分停止时加速度反向且值最大。

用户输入:运动方式编码、积分步数(该数值可以合理也可以不合理)

程序出口:所有舵机的位置,系统稳定系数(“1”稳定,“0”不稳定)

右腿落下第 2 族算法

Page 77: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 72 页

右腿落下第 2 族子程序

程序入口:(uchar foot)放入积分运算器初值

Zsag Z 平面 Sa过渡数寄存器

// 函数原型:void rt_dw__zu2(uchar foot)

// 函数名称:右腿落下第 2族子程序

// 功 能:右腿落下速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十六

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rt_dw__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[4]++; //z5

position[4]++;

position[5]++; //z6

PWM_16();

if(j<32)

{

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 78: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 73 页

十四.Z、P 面分立原地踏步动作解析

1.舵机方向制定

注意!在实际的踏步实验过程中发现,初始站立的姿势有 2类。

(1)双腿直立,各 90 度;

(2)双腿微向外劈叉 5度-10度的幅度;“在一些相关的日本机器人资料中发现此现象”。

另外,P平面上还有 4个舵机,均属于手臂部分,我们现在把研究对象看成 2部分。它包括

上身与下身;规定上身为质量整体,而不参与计算,在后面的章节中会将手臂的惯性系数引

入,到那时,才真正是完整的动平衡方程。

P1

P2

P3

P4

踏步动作中,参与的 P 平面舵机有

4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不

倾斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,当形成周期运动,且保

持肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3=△P4

初始位置:

P1=104

P2=104

P3=146

P4=146

该位置参数来自

1 台 SHR-5S 实

验机,其他机器

人参数根据各自

舵机初始位置定

Page 79: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 74 页

2.动作解析

(1)动作条件

所谓的分解动作,即 P平面运动与 Z 平面运动分时进行。这类动作的特点是 Z、P平面

的运动交接点比较明显,我们肉眼可以看到,但是交界点的 2平面速度却都很小,几乎

为“0”。

为此要满足 2个必要条件:

①要求交接地带过渡平稳,所以需要系统在左、右摆动极限位置时的速度为最小值“0”。

②系统每个瞬间的合加速度小于规定的极限值。

(2)动作时序分析

初始位置:双脚直立,各 90度站立。

动作流程:

直立→下蹲→ 左侧身→抬右腿→落右腿→右侧身

左侧身←落左腿←抬左腿←右侧身

机器人存在转动惯量这个物理特性,并且直立时最大。随着下蹲幅度赠大,转动惯量减

小。随之,系统左右摆动的固有频率增大。此时要考虑自身的固有频率与侧脚频率相干涉的

问题。

首先执行一段下

蹲动作,注意下蹲

的角度,不宜过

大,否则会影响后

面的单腿抬起动

作的幅度。

一般的下蹲幅度

为 1-60

Page 80: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 75 页

影响系统运动流畅性的因素主要有:

实时速度 —— 由微元函数决定,由积分程序计算得出;

实时加速度——由微元函数计算得出;

Z 平面的运动速度极限值——系统经过大量实验得出,并由人为设置。

P 平面的运动速度极限值——系统经过大量实验得出,并由人为设置。

当踏步频率较小时,容易保持系统平稳,系统的固有频率特性可以不予考虑。

当踏步频率增大时,不容易保持系统平稳;系统的固有频率严重影响双脚的侧摆运动。

其表现为:当前一阶段的身体还没有达到预定摆幅的时候,双脚已经开始下一阶段的侧

摆运动。那么,此时就属于一个典型的固有频率与外加频率的机械振动问题,当外加频率的

干扰能力较强时,系统就会倾向外加频率,而破坏固有频率;此时的系统会减小转动惯量,

予以适应。那么减小的方法是改变震动的位置,从脚底移向重心,那么脚底就会打滑,机器

人会摔倒。

考虑到研究具体的踏步运动特性是项漫长的过程,在此我们进行筛选。我们将胡克定律

相关的内容放到今后的系统升级中进行分析。

Page 81: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 76 页

(3)动作算法及程序

由于前面介绍的诸多子程序包含相当大的信息计算量,并且能够高速处理舵机实时

控制所需的指令,并且具有很好的速度及加速度特性。所以在做原地踏步程序时,将它

们串接在一起即产生要求的动态效果。

我们在系统实际演算过程中,在机器人的头顶上随意放 1 块橡皮,观察它是否掉下

来。结果机器人表现得很好,橡皮稳定地放在头顶上,决不脱落。这说明,整个系统在

运行过程中的合加速度在一定的且是极小的范围内变化。

原地踏步动作程序

// ──────────────────────────────

// 函数原型:void main(void)

// 函数名称:主函数(Main Functions)

// 功 能:启动芯片,程序运行起点(Running start)

// 参 数:无

// 返 回 值:无

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void main(void)

{

SP=0x70; //堆栈指针初始化(这里的做法和汇编

//是一样的)

//这里需要特别注意!在没有调用任何

//函数前,就必须初始化堆栈指针。

//如果调用函数后做初始化工作,就会

//发生指针指向出错的问题。

initial_mcu(); //初始化单片机(Initialization MCU)

initial_position_zu1(1,1); //机器人初始位置设定第 1族

xd_zu1(24);

xd_zu2(24);

delay_200ms();

while(1)

{

l_cs__zu2(25); //调用向左侧身第 2族子程序

rt_up__zu1(8); //调用右腿抬起第 1族子程序

rt_up__zu2(8); //调用右腿抬起第 2族子程序

rt_dw__zu1(8); //调用右腿落下第 1族子程序

rt_dw__zu1(8); //调用右腿落下第 2族子程序

r_cs__zu1(25); //调用向右侧身第 1族子程序

r_cs__zu2(25); //调用向右侧身第 2族子程序

lt_up__zu1(8); //调用左腿抬起第 1族子程序

lt_up__zu2(8); //调用左腿抬起第 2族子程序

1FH--左右侧摆的幅度;

15H--P平面平均速度;

14H--Z平面平均速度;

1EH—机器人下蹲幅度;

Page 82: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 77 页

lt_dw__zu1(8); //调用左腿落下第 1族子程序

lt_dw__zu1(8); //调用左腿落下第 2族子程序

l_cs__zu1(25); //调用向左侧身第 1族子程序

}

}

Page 83: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 78 页

十五.Z、P 面分立带断点前进步伐解析

终于进行前进步伐的研究工作了,这是经过一个由量变到质变的积累过程。由于前进过

程中的步伐研究不仅包括位移曲线的研究还包括速度及加速度的研究。其中,目前我们采用

以单位位移位微分元,即速度为微分元函数。进行积分得出位移函数,进行微分得出加速度

函数;并在系统中设置了几个参数,用以限制积分后得到的极限,控制其大小,使其不得超

出界限。

1.舵机方向制定

该位置参数来自 1 台 SHR-8S 实验机,其他机器人参数根据各自舵机初始位置而定

参与运动的舵机有 10个之多,其中 Z平面 6个,P平面 4个。

注意!在实际的前进实验过程中发现,初始站立的姿势有 2类。

(1)双腿直立,各 90 度;

(2)双腿微向外劈叉 5 度-10 度的幅度;目前我们的机器人前进程序中主动采用此类方法。

另外,P平面上还有 4个舵机,均属于手臂部分,我们现在把研究对象看成 2部分。它

包括上身与下身;规定上身为质量整体,而不参与计算,在后面的章节中会将手臂的惯性系

数引入,得出完整的动平衡方程。

P1

P2

P3

P4

前进动作中,参与的 P 平面舵机有

4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不

倾斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,当形成周期运动,且保

持肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3=△P4

Z 平面初始位置:

Z1=169 Z4=80

Z2=91 Z5=158

Z3=112 Z6=128

P 平面初始位置:

P1=104

P2=104

P3=146

P4=146

Page 84: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 79 页

2.前进第 1 族步伐解析

(1)动作条件

所谓的分解动作,即 P平面运动与 Z平面运动分时进行。这类动作的特点在前面讲过,

Z、P 平面的运动交接点比较明显,我们肉眼可以看到,但是交界点的 2 平面速度却都

很小,几乎为“0”。

为此要满足 2个必要条件:

①要求交接地带过渡平稳,所以需要系统在左、右摆动极限位置时的速度为最小值“0”。

②系统每个瞬间的合加速度小于规定的极限值。

(2)动作时序分析

初始位置:双脚直立各 90度站立或设定一个向外的劈叉值。目前,我们设定向外劈叉 5度。

动作流程:

直立→下蹲→ 左侧身→抬右腿前进→落右腿前进→右侧身

左侧身←落左腿前进←抬左腿前进←右侧身

机器人存在转动惯量这个物理特性,并且直立时最大。随着下蹲幅度赠大,转动惯量减

小。随之,系统左右摆动的固有频率增大。此时要考虑自身的固有频率与侧脚频率相干涉的

问题。

首先执行一段下

蹲动作,注意下蹲

的角度,不宜过

大,否则会影响后

面的抬腿前进动

作的幅度。

一般的下蹲幅度

为 1-60

Page 85: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 80 页

3.中间带速度断点的前进方法

(1)运动特征说明

顾名思义,所谓带断点即速度存在断点的运动方式。那么这次的速度分别指的是前进过

程中抬腿和落腿这 2个阶段。那么在抬腿至最大值时开始下落,此刻将产生一个较大的加速

度。腿向下落,身体向上抬起。

在抬右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

在落右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

在抬左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

在落左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

这里产生的速度突

变会使系统产生加

速度,而产生合外

力;系统会因此产生

震动;在后面的第 2

族前进方式中会设

法去除这种现象。

脚准备落下

注意:在行走过程

中,上半身可以保持

与地面平行,也可以

交替倾斜。目前先研

究保持平行时的函

数特征。

Page 86: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 81 页

(2)舵机实际转动方向及角度

在此定义的初始位置,是将左腿向前迈进#10,右腿向后迈进#10,顾称 # -10。

右腿抬起、落下阶段

Z1(40H)= 16

Z2(41H)= 0

Z3(42H)= 16

Z4(43H)=-16

Z5(44H)= 0

Z6(45H)= -16

Z1(40H)=0

Z2(41H)= 0

Z3(42H)= 0

Z4(43H)= 16

Z5(44H)= -32

Z6(45H)= -16

Z1(40H)=-16

Z2(41H)= 0

Z3(42H)= -16

Z4(43H)= 16

Z5(44H)= 0

Z6(45H)= 16

△1 = -1

△2 = 0 不动

△3 = -1

△4 = +2

△5 = -2

△6 = 0 不动

△1 = -1

△2 = 0 不动

△3 = -1

△4 = 0 不动

△5 = +2

△6 = +2

左腿后蹬

左腿后蹬

右腿抬起

右腿落下

Page 87: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 82 页

左腿抬起、落下阶段

由整体 2 个周期构成的循环运动体系,能够控制双腿的 10 个舵机的运动,使其每个舵

机产生周期性的运动效果。

此外,还要求每个舵机在启转与停转的整个过程中都保持最小的或尽量小的加速度,避

免速度突变,尽量保持体统的动态稳定性。

Z4(43H)= 16

Z5(44H)= 0

Z6(45H)= 16

Z1(40H)= -16

Z2(41H)= 0

Z3(42H)= -16

Z4(43H)= 0

Z5(44H)= 0

Z6(45H)= 0

Z1(40H)= 16

Z2(41H)= -32

Z3(42H)= -16

Z4(43H)= -16

Z5(44H)= 0

Z6(45H)= -16

Z1(40H)= 16

Z2(41H)= 0

Z3(42H)= 16

△4 = -1

△5 = 0 不动

△6 = -1

△1 = +2

△2 = -2

△3 = 0 不动

△4 = -1

△5 = 0 不动

△6 = -1

△1 = 0 不动

△2 = +2

△3 = +2

右腿后蹬

右腿后蹬

左腿抬起

左腿落下

Page 88: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 83 页

4.新增专用子程序解析

(1)前进中右腿抬起第 1 族子程序

在抬右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

右腿的 Z4、Z5舵平行转动,Z6舵停止不动,构成独特的抬腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z2和右腿 Z6不转动。

前进中右腿抬起第 1族子程序

// 函数原型:void ft_ru__zu1(uchar foot)

// 函数名称:前进中右腿抬起第 1族子程序

// 功 能:前进中右腿抬起速度增加,速度增加有一个起动过程,有利于机器人的平衡

稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十七

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ru__zu1(uchar foot)

{

uchar i,j;

j=(foot/2)&127+zsax; //z平面扫尾值初始化计算公式 j=133

for(i=0;i<foot;i++)

{

position[0]++; //z1 246-10=236 左腿

position[2]++; //z3 77-10=67

position[3]++; //z4 45-2*10=25 右腿

position[3]++;

position[4]--; //z5 46-2*10=26

position[4]--;

PWM_16();

if(j>5)

{

j--;

j--;

sao_wei(j); // 最后 zsag=113 抖动

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

△1 = -1

△2 = 0 不动

△3 = -1

△4 = +2

△5 = -2

△6 = 0 不动

Page 89: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 84 页

(2)前进中右腿落下第 2 族子程序

在落右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

右腿的 Z5、Z6舵平行转动,Z4舵停止不动,构成独特的落腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z2和右腿 Z4不转动。

前进中右腿落下第 2族子程序

// 函数原型:void ft_rd__zu2(uchar foot)

// 函数名称:前进中右腿落下第 2族子程序

// 功 能:前进中右腿落下速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_rd__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1 216-10=206 左腿

position[2]++; //z3 47-10=37

position[4]++; //z5 26+2*10=46 右腿

position[4]++;

position[5]++; //z6 185-2*10=165

position[5]++;

PWM_16();

if(j<32)

{

j++;

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=53;

}

}

}

△1 = -1

△2 = 0 不动

△3 = -1

△4 = 0 不动

△5 = +2

△6 = +2

Page 90: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 85 页

(3)前进中左腿抬起第 1 族子程序

在抬起左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

左腿的 Z1、Z2舵平行转动,Z3舵停止不动,构成独特的抬腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z3和右腿 Z5不转动。

前进中左腿抬起第 1族子程序

// 函数原型:void ft_lu__zu1(uchar foot)

// 函数名称:前进中左腿抬起第 1族子程序

// 功 能:前进中左腿抬起速度增加,速度增加有一个起动过程,有利于机器人的平衡

稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十一

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_lu__zu1(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]--; //z1 206+20=226 左腿

position[0]--;

position[1]++; //z2 203+20=223

position[1]++;

position[3]--; //z4 5+10=15 右腿

position[5]--; //z6 165+10=175

PWM_16();

if(j>5)

{

j--;

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

△1 = +2

△2 = +2

△3 = 0 不动

△4 = -1

△5 = 0 不动

△6 = -1

Page 91: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 86 页

(4)前进中左腿落下第 2 族子程序

在落左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

左腿的 Z2、Z3舵平行转动,Z1舵停止不动,构成独特的落腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z1和右腿 Z5不转动。

前进中左腿落下第 2族子程序

// 函数原型:void ft_ld__zu2(uchar foot)

// 函数名称:前进中左腿落下第 2族子程序

// 功 能:前进中左腿落下速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十四

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ld__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z 平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[1]--; //z2 223-20=203 左腿

position[1]--;

position[2]--; //z3 57+20=77

position[2]--;

position[3]--; //z4 35+10=45 右腿

position[5]--; //z6 195+10=205

PWM_16();

if(j<53)

{

j++;

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(53);

zsag=53;

}

}

}

Page 92: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 87 页

5.前进第 1 族子程序解析

那么,研究至此我们终于可以抱着一种“即将成功”的心态去迎接最后的战斗。此时,

我们就将以上的几十种子程序连接在一起,结果和事先预想的一样,机器人在 2个分离的平

面内作正交运动,分界面的加速度由微分函数保证实现平稳过渡。

(1)程序内容及算法

// 函数原型:void main(void)

// 函数名称:主函数(Main Functions)

// 功 能:启动芯片,程序运行起点(Running start)

// 参 数:无

// 返 回 值:无

void main(void)

{

SP=0x70; //堆栈指针初始化(这里的做法和汇编

//是一样的)

//这里需要特别注意!在没有调用任何

//函数前,就必须初始化堆栈指针。

//如果调用函数后做初始化工作,就

//发生指针指向出错的问题。

initial_mcu(); //初始化单片机(Initialization MCU)

initial_position_zu1(1,50); //调用机器人初始位置设定第 1族子程序

initial_position_zu2(21); //调用机器人初始位置设定第 2族子程序

xd_zu1(28); //调用下蹲第 1族子程序

xd_zu2(28); //调用下蹲第 2族子程序

while(1)

{

l_cs__zu2(30); //调用向左侧身第 2族子程序 6

ft_ru__zu1(10); //调用前进中右腿抬起第 1族子程序 17

ft_rd__zu2(10); //调用前进中右腿落下第 2族子程序 20

r_cs__zu1(30); //调用向右侧身第 1族子程序 7

r_cs__zu2(30); //调用向右侧身第 2族子程序 8

ft_lu__zu1(10); //调用前进中左腿抬起第 1族子程序 2

ft_ld__zu2(10); //调用前进中左腿落下第 2族子程序 24

l_cs__zu1(30); //调用向左侧身第 1族子程序 5

}

}

Page 93: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 88 页

在上面的程序中所调用的子程序,已经在前面章节中作了详细介绍,可以参照程序头名

称进行查询。

关键寄存器有 2个:1FH – P平面左右侧身角度寄存器,积分使用;

1EH – Z平面角度运算寄存器,积分使用;

15H - P平面 Sa修正数寄存器;

14H - Z平面 Sa修正数寄存器;

改变 1FH和 15H的值,可以改变 P平面的摆动周期;

改变 1EH和 14H的值,可以改变 Z平面的运动周期;

此种行走方式基本属于静平衡力学方程,所以其稳定性特好,我们在实验过程中,让机

器人头部顶 1块橡皮但却掉不下来,这说明机器人本身的加速度限制十分严密。

以上程序内关键的寄存器数值是最终定型的实验数值,数值本身具有很强的参考价值!

(2)相关技术拓展

此类动作属于静态过渡动作,其运动特性与中国的太极拳有些相像。所以,即便我们马

上开展高速行走动作的研究工作,本章所采用的平稳步伐函数也不会受到冲击。

在今后的太极拳、千手观音等慢动作区域内,会被广泛采用。

Page 94: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 89 页

十六.Z、P 面分立无断点前进步伐解析

在前面章节里,我们已经让机器人缓慢前进,且非常平稳,唯独的一点遗憾是在抬腿与

落腿的交界地带产生加速度,以至于微量抖动。现在,我们就处理仅有的这一点抖动。

我们继承以前的研究方法,仍然采用微分元函数作研究载体。即速度为微分元函数,进

行积分得出位移函数,进行微分得出加速度函数;仍然在系统中设置那几个参数,用以限制

积分后得到的极限,控制其大小,使其不得超出界限。

只不过我们把原有的抬起与落下 2个过程,分为 4个过程,使其不存在断点。

1.舵机方向制定

基本继承上章节的特性,初始状态是一样的。

同样,该位置参数来自 1 台 SHR-8S 实验机,其他机器人参数根据各自舵机初始位置而

定。参与运动的舵机有 10个之多,其中 Z平面 6个,P平面 4个。

注意!在实际的前进实验过程中发现,初始站立的姿势有 2类。

(1)双腿直立,各 90 度;

(2)双腿微向外劈叉 5度-10度的幅度;目前我们的机器人前进程序中主动采用此类方法。

另外,P平面上还有 4个舵机,均属于手臂部分,我们现在把研究对象看成 2部分。它

包括上身与下身;规定上身为质量整体,而不参与计算,在后面的章节中会将手臂的惯性系

数引入,得出完整的动平衡方程。

P1

P2

P3

P4

前进动作中,参与的 P 平面舵机有

4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不

倾斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,当形成周期运动,且保

持肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3=△P4

P 平面初始位置:

P1=104

P2=104

P3=146

P4=146

Z 平面初始位置:

Z1=169 Z4=80

Z2=91 Z5=158

Z3=112 Z6=128

Page 95: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 90 页

2.动作时序分析

初始位置:双脚直立各 90度站立或设定一个向外的劈叉值。目前,我们设定向外劈叉 5度。

动作流程:

直立→下蹲→ 左侧身→抬右腿前进→抬右腿前进→落右腿前进→抬右腿前进→右侧身

左侧身←落左腿前进←落左腿前进←抬左腿前进←抬左腿前进←右侧身

机器人存在转动惯量这个物理特性,并且直立时最大。随着下蹲幅度赠大,转动惯量减

小。随之,系统左右摆动的固有频率增大。此时要考虑自身的固有频率与侧脚频率相干涉的

问题。

首先执行一段下

蹲动作,注意下蹲

的角度,不宜过

大,否则会影响后

面的抬腿前进动

作的幅度。

一般的下蹲幅度

为#01H-#3CH

第 1 族 第 2 族 第 1 族 第 2 族

第 1 族 第 1 族 第 2 族 第 2 族

Page 96: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 91 页

3.中间无速度断点的前进方法

(1)运动特征说明

顾名思义,所谓无断点即速度无断点的运动方式。那么这次的速度分别指的是前进过程

中抬腿和落腿这 2个大阶段,包含 4个小阶段。那么在抬腿至最大值时开始下落,此刻速度

应为“0”。

在抬右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

在落右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

在抬左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

在落左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

这里没有速度突变,

系统无加速度,有也

是极微的,无合外

力;系统不会产生震

动;

脚准备落下

注意:在行走过程

中,上半身可以保持

与地面平行,也可以

交替倾斜。目前先研

究保持平行时的函

数特征。

Page 97: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 92 页

(2)舵机实际转动方向及角度

在此定义的初始位置,是将左腿向前迈进#10,右腿向后迈进#10,顾称 # -10。

右腿抬起、落下阶段

Z1(40H)= 16

Z2(41H)= 0

Z3(42H)= 16

Z4(43H)=-16

Z5(44H)=0

Z6(45H)= -16

Z1(40H)= 0

Z2(41H)= 0

Z3(42H)= 0

Z4(43H)= 16

Z5(44H)= -32

Z6(45H)= -16

Z1(40H)= -16

Z2(41H)= 0

Z3(42H)= -16

Z4(43H)= 16

Z5(44H)= 0

Z6(45H)= 16

△1 = -1

△2 = 0 不动

△3 = -1

△4 = +2

△5 = -2

△6 = 0 不动

△1 = -1

△2 = 0 不动

△3 = -1

△4 = 0 不动

△5 = +2

△6 = +2

左腿后蹬

左腿后蹬

右腿抬起

右腿落下

分 2 阶段

分 2 阶段

Page 98: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 93 页

左腿抬起、落下阶段

由整体 2 个周期,4 阶段构成的循环运动体系,能够控制双腿的 10 个舵机的运动,使

其每个舵机产生位移量与速度量具备的周期性运动效果。

此外,还要求每个舵机在启转与停转的整个过程中都保持最小的或尽量小的加速度,避

免速度突变,尽量保持体统的动态稳定性。

Z4(43H)=16

Z5(44H)=0

Z6(45H)=16

Z1(40H)=-16

Z2(41H)= 0

Z3(42H)=-16

Z4(43H)= 0

Z5(44H)= 0

Z6(45H)= 0

Z1(40H)= 16

Z2(41H)= -32

Z3(42H)= -16

Z4(43H)= -16

Z5(44H)= 0

Z6(45H)= -16

Z1(40H)= 16

Z2(41H)= 0

Z3(42H)= 16

△4 = -1

△5 = 0 不动

△6 = -1

△1 = +2

△2 = -2

△3 = 0 不动

△4 = -1

△5 = 0 不动

△6 = -1

△1 = 0 不动

△2 = +2

△3 = +2

右腿后蹬

右腿后蹬

左腿抬起

左腿落下

分 2 阶段

分 2 阶段

Page 99: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 94 页

4.新增专用子程序解析

(1)前进中右腿抬起第 2 族子程序

在抬右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

右腿的 Z4、Z5舵平行转动,Z6舵停止不动,构成独特的抬腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z2和右腿 Z6不转动。

前进中右腿抬起第 2 族子程序

// 函数原型:void ft_ru__zu2(uchar foot)

// 函数名称:前进中右腿抬起第 2族子程序

// 功 能:前进中右腿抬起速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十八

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ru__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1 236-10=226 左腿

position[2]++; //z3 67-10=57

position[3]++; //z4 25-2*10=5 右腿

position[3]++;

position[4]--; //z5 26-2*10=6

position[4]--;

PWM_16();

if(j<32)

{

j++;

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 100: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 95 页

(2)前进中右腿落下第 1 族子程序

在落右腿前进过程中,左腿的 Z1、Z3舵平行运动,Z2舵停止转动,使左腿向后蹬踏;

右腿的 Z5、Z6舵平行转动,Z4舵停止不动,构成独特的落腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z2和右腿 Z4不转动。

前进中右腿落下第 1族子程序

// 函数原型:void ft_rd__zu1(uchar foot)

// 函数名称:前进中右腿落下第 1族子程序

// 功 能:前进中右腿落下速度增加,速度增加有一个起动过程,有利于机器人的平衡

稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 十九

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_rd__zu1(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]++; //z1 226-10=216 左腿

position[2]++; //z3 57-10=47

position[4]++; //z5 6+2*10=26

position[4]++;

position[5]++; //z6 205-2*10=185

position[5]++;

PWM_16();

if(j>5)

{

j--;

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 101: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 96 页

(3)前进中左腿抬起第 2 族子程序

在抬起左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

左腿的 Z1、Z2舵平行转动,Z3舵停止不动,构成独特的抬腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z3和右腿 Z5不转动。

前进中左腿抬起第 2族子程序

// 函数原型:void ft_lu__zu2(uchar foot)

// 函数名称:前进中左腿抬起第 2族子程序

// 功 能:前进中左腿抬起速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十二

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_lu__zu2(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[0]--; //z1 226+20=246 左腿

position[0]--;

position[1]++; //z2 223+20=243

position[1]++;

position[3]--; //z4 15+10=25 右腿

position[5]--; //z6 175+10=185

PWM_16();

if(j<32)

{

j++;

j++;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(32);

zsag=32;

}

}

}

Page 102: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 97 页

(4)前进中左腿落下第 1 族子程序

在落左腿前进过程中,右腿的 Z4、Z6舵平行运动,Z5舵停止转动,使右腿向后蹬踏;

左腿的 Z2、Z3舵平行转动,Z1舵停止不动,构成独特的落腿动作;

整个系统牵扯的运动舵机数量为 4个,左腿 Z1和右腿 Z5不转动。

前进中左腿落下第 1族子程序

// 函数原型:void ft_ld__zu1(uchar foot)

// 函数名称:前进中左腿落下第 1族子程序

// 功 能:前进中左腿落下速度增加,速度增加有一个起动过程,有利于机器人的平衡

稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十三

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ld__zu1(uchar foot)

{

uchar i,j;

j=zsag; //z平面扫尾值过渡

for(i=0;i<foot;i++)

{

position[1]--; //z2 243-20=223 左腿

position[1]--;

position[2]--; //z3 37+20=57

position[2]--;

position[3]--; //z4 25+10=35 右腿

position[5]--; //z6 185+10=195

PWM_16();

if(j>5)

{

j--;

j--;

sao_wei(j);

zsag=j;

}

else

{

sao_wei(5);

zsag=5;

}

}

}

Page 103: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 98 页

5.前进第 2 族子程序解析

那么,所谓第 2族,即速度平稳过渡。我们为带断点前进子程序再增添 4个子程序,将

其函数补完,力争速度做到平滑过渡。我们就将以上的 4个子程序加进去,结果和事先预想

的一样,机器人在 2个分离的平面内作正交运动,分界面的速度和加速度由连续函数保证实

现平滑过渡。在运动效果上面,与上章的那种走法相比,抬腿和落腿的时间加长,中间有明

显停顿,是过渡区减速运动所造成。

(1)程序内容及算法(分立无断点步伐)

//___________________________________________________________________________

// 函数原型:void main(void)

// 函数名称:主函数(Main Functions)

// 功 能:启动芯片,程序运行起点(Running start)

// 参 数:无

// 返 回 值:无

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void main(void)

{

SP=0x70; //堆栈指针初始化(这里的做法和汇编

//是一样的)

//这里需要特别注意!在没有调用任何

//函数前,就必须初始化堆栈指针。

//如果调用函数后做初始化工作,就

//发生指针指向出错的问题。

initial_mcu(); //初始化单片机(Initialization MCU)

initial_position_zu1(1,50); //调用机器人初始位置设定第 1族子程序

initial_position_zu2(21); //调用机器人初始位置设定第 2族子程序

xd_zu1(28); //调用下蹲第 1族子程序

xd_zu2(28); //调用下蹲第 2族子程序

while(1)

{

l_cs__zu2(30); //调用向左侧身第 2族子程序 6

ft_ru__zu1(10); //调用前进中右腿抬起第 1族子程序 17

ft_ru__zu2(10); //调用前进中右腿抬起第 2族子程序 18

ft_rd__zu1(10); //调用前进中右腿落下第 1族子程序 19

ft_rd__zu2(10); //调用前进中右腿落下第 2族子程序 20

r_cs__zu1(30); //调用向右侧身第 1族子程序 7

Page 104: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 99 页

r_cs__zu2(30); //调用向右侧身第 2族子程序 8

ft_lu__zu1(10); //调用前进中左腿抬起第 1族子程序 21

ft_lu__zu2(10); //调用前进中左腿抬起第 2族子程序 22

ft_ld__zu1(10); //调用前进中左腿落下第 1族子程序 23

ft_ld__zu2(10); //调用前进中左腿落下第 2族子程序 24

l_cs__zu1(30); //调用向左侧身第 1族子程序 5

}

}

在上面的程序中所调用的子程序,已经在前面章节中作了详细介绍,可以参照程序头名

称进行查询。

关键寄存器有 4个:1FH – P平面左右侧身角度寄存器,积分使用;

1EH – Z平面角度运算寄存器,积分使用;

15H - P平面 Sa修正数寄存器;

14H - Z平面 Sa修正数寄存器;

改变 1FH和 15H的值,可以改变 P平面的摆动周期;

改变 1EH和 14H的值,可以改变 Z平面的运动周期;

此种行走方式基本属于静平衡力学方程,所以其稳定性特好,我们在实验过程中,继续

让机器人头部顶 1块橡皮仍然掉不下来,这说明机器人本身的加速度性能没有降低。

以上程序内关键的寄存器数值是最终定型的实验数值,数值本身具有很强的参考价值!

(2)相关技术拓展

此类动作也属于静态过渡动作,其运动特性比较像中国的太极拳,但是它可以较好地展

开后面至关重要的研究工作,即“交叉周期行走步伐研究”。所以,此种步伐属于过渡步伐,

但较为偏向于动态平衡步伐。此外,本章所研究的特殊步伐函数可能会因硬件机体的改变,

而产生特殊的意想不到的效果,所以仍然有独立的深入研发潜质!

预计,在今后的太极拳、千手观音等慢动作区域内,会和前章所讲的步伐同时被广泛采

用。

Page 105: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 100 页

P1

P2

P3

P4

十七.第 1 类交互式前进步伐解析

在前面 2个章节里,我们已经让机器人缓慢前进,且非常平稳,以至于做到根本无法自

己摔倒的地步。为此,我们可以说已经成功了,并且硕果累累。那都是因为先前在子程序方

面的巨大投入,量变而产生的巨大质变。

紧接着,我们继续将研究成果扩大,全力以赴前进快速步伐的研究工作。综合前面的慢

速步伐,我们发现只有将 2 个分立的平面运动同时进行,即将 2 个周期压缩至

1.0001--1.9999周期内,才能提高机器人的步伐频率。

所以,我们称其为 Z、P 面交互式步伐,我们继承以前的研究方法,仍然采用微分元函

数作研究载体。即速度为微分元函数,进行积分得出位移函数,进行微分得出加速度函数;

仍然在系统中设置那几个参数,用以限制积分后的极限值,控制其大小,使其不超出界限。

1.舵机方向制定

基本继承上 2章节的特性,初始状态是一样的。

同样,该位置参数来自 1 台 SHR-8S 实验机,其他机器人参数根据各自舵机初始位置而

定。参与运动的舵机有 10个之多,其中 Z平面 6个,P平面 4个。

注意!在实际的前进实验过程中发现,初始站立的姿势有 2类。

(1)双腿直立,各 90 度;

(2)双腿微向外劈叉 5度-10度的幅度;目前我们的机器人前进程序中主动采用此类方法。

另外,P平面上还有 4个舵机,均属于手臂部分,我们现在把研究对象看成 2部分。它

包括上身与下身;规定上身为质量整体,而不参与计算,在后面的章节中会将手臂的惯性系

数引入,才是最终的完整的动平衡方程。

前进动作中,参与的 P 平面舵机有

4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不

倾斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,形成周期运动,且保持

肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3=△P4

P 平面初始位置:

P1=#68H

P2=#68H

P3=#92H

P4=#92H

Z 平面初始位置:

Z1=#A9H Z4=#50H

Z2=#5BH Z5=#9EH

Z3=#70H Z6=#80H

Page 106: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 101 页

2.第 1 类交互前进步伐特点

(1)动作条件

所谓的交互动作,即 P平面运动与 Z平面运动同时进行;所谓第一类,是与后面的第二

类相比较,依照 P平面与 Z平面运动幅度大小的关系而定;

P 平面幅度大于 Z平面幅度,即侧身幅度大于前进幅度为第一类;

P 平面幅度小于 Z平面幅度,即侧身幅度小于前进幅度为第二类;

这类动作的特点是 Z、P 平面的运动交接点不明显,我们肉眼很难看到。而且交界点的

2平面都具有一定速度。

为此要满足 3个必要条件:

①交接地带----侧身动作没有进行完,后面一段时间内继续侧身的动作,并开始向前迈步;

学术上讲,称其进入倒立摆阶段。

②系统周期----因为提前迈步的特点,所以周期为原有的 2周期时间,减去 2个提前切入的

时间。

③合加速度----系统这次的加速度不会为“0”或者趋向最小,但可以保证在规定的极限值

内;并且在倒立摆阶段,系统的侧身加速度与运动方向相反。

(2)动作时序分析

初始位置:双脚直立各 90度站立或设定一个向外的劈叉值。目前,我们设定向外劈叉 5度。

动作流程:

直立→下蹲→ 左侧身 → 左侧身+抬右腿 → 右侧身+落右腿 → 右侧身

左侧身 ← 左侧身+落左腿 ← 右侧身+抬左腿 ← 右侧身

与前面的程序流程不同,该流程改动了 2个旧的子程序,增添了 4个新的子程序。

首先执行一段下

蹲动作,注意下蹲

的角度,不宜过

大,否则会影响后

面的抬腿前进动

作的幅度。

一般的下蹲幅度

为#01H-#30H

第 2 族 第 2 族 第 1 族 第 1 族

第 2 族 第 1 族 第 2 族 第 1 族

速度起点

速度起点

Page 107: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 102 页

原来的“左侧身第 1族”和“右侧身第 1族”都是速度起点子程序,现在变更了速度起

点。那么就将这 2个程序改为速度继承式,目的是与前面程序连接时速度保持连贯。

另外,机器人存在转动惯量这个物理特性,并且直立时最大。随着下蹲幅度赠大,转动

惯量减小。随之,系统左右摆动的固有频率增大。此时要考虑自身的固有频率与侧脚频率相

干涉的问题。

注意:该程序舍弃 Z 平面所有 Sa寄存器,只使用 P平面 Sa寄存器!

3.新增的 4 个子程序

(1)左侧身+抬右腿子程序(第 2 族)

其中,增加调用了 PWM_16()字程序。

psag P 平面 Sa过渡寄存器;

左侧身+右腿抬起子程序

// 函数原型:void lc_ru(uchar foot)

// 函数名称:左侧身+抬右腿子程序

// 功 能:左侧身+抬右腿速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十五

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lc_ru(uchar foot)

{

uchar i,j;

j=psag; //p平面扫尾过渡值,舍弃 z平面过渡值

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[2]++; //z3

position[3]++; //z4

position[3]++;

position[4]--; //z5

position[4]--;

position[8]--; //p1

position[9]++; //p2

position[10]--; //p3

position[11]++; //p4

position[12]++; //p5

position[14]++; //p7

PWM_16();

if(j<30)

Page 108: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 103 页

{

j++;

sao_wei(j);

psag=j; //psag为 20~30

}

else

{

sao_wei(30);

psag=30;

}

}

}

Page 109: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 104 页

(2)右侧身+落右腿子程序(第 1 族)

psag P 平面 Sa过渡寄存器;

右侧身+右腿落下子程序

// 函数原型:void rc_rd(uchar foot)

// 函数名称:右侧身+落右腿子程序

// 功 能:右侧身+落右腿速度增加,速度增加有一个起动过程,有利于机器人的平衡稳

定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十六

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rc_rd(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z平面过渡值

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[2]++; //z3

position[4]++; //z5

position[4]++;

position[5]++; //z6

position[5]++;

position[8]++; //p1

position[9]--; //p2

position[10]++; //p3

position[11]--; //p4

position[12]--; //p5

position[14]--; //p7

PWM_16();

if(j>20)

{

j--;

sao_wei(j);

psag=j; //psag为 30~20

}

else

{

sao_wei(20);

psag=20;

}

}

}

Page 110: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 105 页

(3)右侧身+抬左腿子程序(第 2 族)

psaP平面 Sa过渡寄存器;

右侧身+左腿抬起子程序

// 函数原型:void rc_lu(uchar foot)

// 函数名称:右侧身+抬左腿子程序

// 功 能:右侧身+抬左腿速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十七

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void rc_lu(uchar foot)

{

uchar i,j;

j=psag; //p 平 面 扫 尾 过 渡 值

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[5]--; //z6

position[0]--; //z1

position[0]--;

position[1]++; //z2

position[1]++;

position[8]++; //p1

position[9]--; //p2

position[10]++; //p3

position[11]--; //p4

position[12]--; //p5

position[14]--; //p7

PWM_16();

if(j<30)

{

j++;

sao_wei(j);

psag=j; //psag为 20~30

}

else

{

sao_wei(30);

psag=30;

}

}

}

Page 111: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 106 页

(4)左侧身+落左腿子程序(第 1 族)

Psag P平面 Sa过渡寄存器;

左侧身+左腿落下子程序

// 函数原型:void lc_ld(uchar foot)

// 函数名称:左侧身+落左腿子程序

// 功 能:左侧身+落左腿速度增加,速度增加有一个起动过程,有利于机器人的平衡稳

定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十八

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void lc_ld(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z平面过渡值

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[5]--; //z6

position[1]--; //z2

position[1]--;

position[2]--; //z3

position[2]--;

position[8]--; //p1

position[9]++; //p2

position[10]--; //p3

position[11]++; //p4

position[12]++; //p5

position[14]++; //p7

PWM_16();

if(j>20)

{

j--;

sao_wei(j);

psag=j;

}

else

{

sao_wei(20);

psag=20;

}

}

}

Page 112: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 107 页

3.交互后 PWM_8P1 与 PWM_8P2 子程序的合成

我们最初将 PWM_8P1 和 PWM_8P2 直接串接在一起,由于 2 个程序都存在 Tw 扫尾系

数,所以最终的 Tw 是 2 个 Tw 相加的和。结果,严重影响最终的运行速度。表现为侧身和

抬腿都非常慢。我们现在就解决这个问题。

要求:①系统控制精度不变,依靠改变控制时间来改变速度;

②由于 Z、P平面同步,所以积分部数相同;

③程序要继承前面动作的速度,并能够衔接后面的动作;

我们前面所有子程序使用过的,与速度相关的寄存器有“18H 和 19H”。

其中,18H 用来衔接子程序之间的速度值;19H 用来实时控制 Tw 值;

因此,我们需要衍生出一个子程序,可以继承前面的速度参数,并且同时控制 Z、P 面舵机。

4.PWM_16P 子程序解析

由于前面提及的几个原因,我们构建出这个子程序,能够同时控制 2个平面的动作。

P1、P2 口 16 路单周期子程序

// ────────────────────────────────────

// 函数原型:void PWM_16()

// 函数名称:16 路舵机输出子程序(16 Subroutine output Servos )

// 功 能:对临近数值做差,求出相对差值,用于延时。控制端口 P1、P2

// 入口参数:foot,表示步数

// 返 回 值:无

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void PWM_16()

{ uchar i=0,j=0;

for(i=0;i<=7;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P1=0xff; //使口 P1全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P1(八路)

{

for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P1=P1&kouchu[7-i];

}

Page 113: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 108 页

for(i=0;i<8;i++) //给排序数组赋值

{

paixu_ncha[i]=position[i+8];

}

sorting( ); //调用排序函数

N_value( ); //调用 N差函数

P2=0xff; //使口 P2全部拉高

delay_500us(); //调用延时 490us函数

for(i=0;i<8;i++) //延时输出到口 P1(八路)

{ for(j=0;j<paixu_ncha[7-i];j++)

{

delay_8us();

}

P2=P2&kouchu[7-i];

}

for(i=0;i<25;i++)

delay_500us();

}

额外的 5MS延时告诉我们,此类程序还能进行扩充;在不久的将来,能够很快地并且简单地

构建 24路联动子程序,即 PWM_24P。

Page 114: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 109 页

5.第 1 类交互式前进步伐子程序指令

15H,P平面 Sa修正寄存器;17H,P平面 Sa过渡寄存器;18H,Z、P平面 Sa寄存器;

主程序初始

// ____________________________________________________________________________

// 函数原型:void main(void)

// 函数名称:主函数(Main Functions)

// 功 能:启动芯片,程序运行起点(Running start)

// 参 数:无

// 返 回 值:无

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void main(void)

{

SP=0x70; //堆栈指针初始化(这里的做法和汇编//

是一样的)

//这里需要特别注意!在没有调用任何

//函数前,就必须初始化堆栈指针。

//如果调用函数后做初始化工作,就会

//发生指针指向出错的问题。

initial_mcu(); //初始化单片机(Initialization MCU)

initial_position_zu1(1,1); //调用机器人初始位置设定第 1族子程序

initial_position_zu2(21); //调用机器人初始位置设定第 2族子程序

xd_zu1(25); //调用下蹲第 1族子程序

xd_zu2(25); //调用下蹲第 2族子程序

while(1)

{

l_cs__zu2(19); //调用向左侧身第 2族子程序 6

lc_ru(12); //调用左侧身+抬右腿子程序 25

rc_rd(12); //调用右侧身+落右腿子程序 26

r_cs__zu1(19); //调用向右侧身第 1族子程序 7

r_cs__zu2(19); //调用向右侧身第 2族子程序 8

rc_lu(12); //调用右侧身+抬左腿子程序 27

lc_ld(12); //调用左侧身+落左腿子程序 28

l_cs__zu1(19); //调用向左侧身第 1族子程序 5

}

}

Page 115: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 110 页

十八.第 2 类交互式前进步伐解析

在前面的章节里,我们已经让机器人交互前进,且非常平稳。紧接着,我们继续扩大研

究成果,全力以赴前进快速步伐的研究工作。参照前面的步伐特点,我们发现只有使 Z平面

的运动幅度大于 P平面的运动幅度,才能加快行走速度。所以在交互运动完成后加入 2个抬

腿前进和 2个落腿前进的动作。将原来 2个周期变为减去 2个交互时间,再加上 2个 Z平面

迈步时间。最终将周期压缩至 1.0001--1.9999周期内,提高机器人的步伐频率和效率。

所以,我们称其为第 2类交互式前进步伐,我们继承以前的研究方法,仍然采用微分元

函数作研究载体。即速度为微分元函数,进行积分得出位移函数,进行微分得出加速度函数;

仍然在系统中设置那几个参数,用以限制积分后的极限值,控制其大小,使其不超出界限。

1.舵机方向制定

基本继承上 2章节的特性,初始状态是一样的。

同样,该位置参数来自 1 台 SHR-8S 实验机,其他机器人参数根据各自舵机初始位置而

定。参与运动的舵机有 10个之多,其中 Z平面 6个,P平面 4个。

注意!在实际的前进实验过程中发现,初始站立的姿势有 2类。

(1)双腿直立,各 90 度;

(2)双腿微向外劈叉 5度-10度的幅度;目前我们的机器人前进程序中主动采用此类方法。

另外,P平面上还有 4个舵机,均属于手臂部分,我们现在把研究对象看成 2部分。它

包括上身与下身;规定上身为质量整体,而不参与计算,在后面的章节中会将手臂的惯性系

数引入,才是最终的完整的动平衡方程。

P1

P2

P3

P4

前进动作中,参与的 P 平面舵机有

4 个,分别为:

左腿的 P1、P2;右腿的 P3、P4。

其中如果保持肩、脚平行,身体不

倾斜,那么:

左腿的 P1、P2 为平行关系;

右腿的 P3、P4 为平行关系;

特别注意,形成周期运动,且保持

肩、脚平行,身体不倾斜,那么:

P1、P2、P3、P4 全为平行关系;

即:△P1=△P2=△P3=△P4

P 平面初始位置:

P1=104

P2=104

P3=146

P4=146

Z 平面初始位置:

Z1=169 Z4=80

Z2=91 Z5=158

Z3=112 Z6=128

Page 116: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 111 页

2.第 2 类交互前进步伐特点

(1)动作条件

所谓的交互动作,即 P平面运动与 Z平面运动同时进行;所谓第二类,是与前面的第一

类相比较,依照 P平面与 Z平面运动幅度大小的关系而定;

P 平面幅度大于 Z 平面幅度,即侧身幅度大于前进幅度为第一类;

P平面幅度小于 Z平面幅度,即侧身幅度小于前进幅度为第二类;

这类动作的特点是 Z、P 平面的运动交接点不明显,我们肉眼很难看到;而且交界点的

2平面都具有一定速度;另外此类步伐偏重于 Z 平面运动,步伐较大,前进效果明显。

为此要满足 3个必要条件:

①交接地带----侧身动作没有进行完,后面一段时间内继续侧身的动作,并开始向前迈步;

学术上讲,称其进入倒立摆阶段。

②系统周期----因为提前迈步的特点,所以周期为原有的 2周期时间,减去 2个提前切入的

时间,并加上 2个抬腿前进和 2个落腿前进的时间。

③合加速度----系统这次的加速度不会为“0”或者趋向最小,但可以保证在规定的极限值

内;并且在倒立摆阶段,系统的侧身加速度与运动方向相反。

(2)动作时序分析

初始位置:双脚直立各 90度站立或设定一个向外的劈叉值。目前,我们设定向外劈叉 5度。

动作流程:

下蹲 左侧身 →左侧身+抬右腿→抬右腿前进→落右腿前进→右侧身+落右腿→ 右侧身

左侧身 ←左侧身+落左腿←落左腿前进←抬左腿前进←右侧身+抬左腿← 右侧身

与前面的程序流程相比,该流程增加了 2个抬腿前进子程序和 2个落腿前进子程序。

首先执行一段下

蹲动作,注意下蹲

的角度,不宜过

大,否则会影响后

面的抬腿前进动

作的幅度。

一般的下蹲幅度

为 1-48

第 2 族 第 2 族 第 1 族 第 1 族

第 2 族 第 1 族 第 2 族 第 1 族

速度起点

速度起点

第 2 族 第 1 族

第 2 族 第 1 族

Page 117: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 112 页

原来的“右侧身+落右腿”和“左侧身+落左腿”都是速度起点子程序,现在变更为“落

右腿前进”和“落左腿前进”。那么就将原来的 2 个程序改为速度继承式,目的是与前面程

序连接时速度保持连贯。

另外,机器人存在转动惯量这个物理特性,并且直立时最大。随着下蹲幅度赠大,转动

惯量减小。随之,系统左右摆动的固有频率增大。此时要考虑自身的固有频率与侧脚频率相

干涉的问题。

注意:该程序舍弃 Z 平面所有 Sa寄存器,只使用 P平面 Sa寄存器!

Page 118: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 113 页

3.改动的 4 个运动子程序

(1)抬右腿前进第 2 族子程序

psag P平面 Sa过渡寄存器;

抬右腿前进第 2 族子程序

// 函数原型:void ft_ru_zu2(uchar foot)

// 函数名称:抬右腿前进第 2 族子程序

// 功 能:抬右腿前进速度减小,速度减小有一个过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 二十九

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ru_zu2(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z 平面过渡值

for(i=0;i<foot;i++)

{

position[0]++; //z1

position[2]++; //z3

position[3]++; //z4

position[3]++;

position[4]--; //z5

position[4]--;

position[6]--; //z7

position[7]--; //z8

PWM_16();

if(j<40)

{

j++;

sao_wei(j);

zsag=j; //psag=30~40

}

else

{

sao_wei(40);

zsag=40;

}

}

}

Page 119: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 114 页

(2)落右腿前进第 1 族子程序

psag P平面 Sa过渡寄存器;

落右腿前进第 1 族子程序

// 函数原型:void ft_rd_zu1(uchar foot)

// 函数名称:落右腿前进第 1 族子程序

// 功 能:落右腿前进速度增加,速度增加有一个起动过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 三十

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_rd_zu1(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z 平面过渡值

for(i=0;i<foot;i++)

{

position[0]--; //z1

position[2]--; //z3

position[4]++; //z5

position[4]++;

position[5]--; //z6

position[5]--;

PWM_16();

if(j>5)

{

j--;

j--;

sao_wei(j); //扫尾值自减,落右腿前进速度增加

psag=j;

}

else

{

sao_wei(5);

psag=5;

}

}

}

Page 120: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 115 页

(3)抬左腿前进子程序第 2 族

psag P平面 Sa过渡寄存器;

抬左腿前进第 2 族子程序

// 函数原型:void ft_lu_zu2(uchar foot)

// 函数名称:抬左腿前进第 2 族子程序

// 功 能:抬左腿前进速度减小,速度减小有一个过程,有利于机器人的平衡稳定性

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 三十一

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_lu_zu2(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z 平面过渡值

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[5]--; //z6

position[0]--; //z1

position[0]--;

position[1]++; //z2

position[1]++;

position[6]++; //z7

position[7]++; //z8

PWM_16();

if(j<40)

{

j++;

sao_wei(j);

psag=j; //psag 为 30~40

}

else

{

sao_wei(40);

psag=40;

}

}

}

Page 121: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 116 页

(4)落左腿前进子程序第 1 族

psag P平面 Sa过渡寄存器;

落左腿前进第 1 族子程序

// 函数原型:void ft_ld_zu1(uchar foot)

// 函数名称:落左腿前进第 1 族子程序

// 功 能:落左腿前进速度增加,速度增加有一个起动过程,有利于机器人的平衡稳定

// 参 数: foot, 表示积分步数。

// 返 回 值: 无

// 函数编号: 三十二

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void ft_ld_zu1(uchar foot)

{

uchar i,j;

j=psag; //p 平面扫尾过渡值,舍弃 z 平面过渡值

for(i=0;i<foot;i++)

{

position[3]--; //z4

position[5]--; //z6

position[1]--; //z2

position[1]--;

position[2]--; //z3

position[2]--;

position[6]++; //z7

position[7]++; //z8

PWM_16();

if(j>30)

{

j--;

sao_wei(j);

psag=j; //psag 为 40~30

}

else

{

sao_wei(30);

psag=30;

}

}

}

Page 122: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 117 页

4.第 2 类交互式前进步伐子程序指令

15H,P 平面 Sa 修正寄存器;

17H,P平面 Sa过渡寄存器;

18H,Z、P平面 Sa寄存器;

主程序初始

// _____________________________________________________________________________

// 函数原型:void main(void)

// 函数名称:主函数(Main Functions)

// 功 能:启动芯片,程序运行起点(Running start)

// 参 数:无

// 返 回 值:无

// ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

void main(void)

{

SP=0x70; //堆栈指针初始化(这里的做法和汇编是

//一样的)

//这里需要特别注意!在没有调用任何函

//数前,就必须初始化堆栈指针。

//如果调用函数后做初始化工作,就会

//发生指针指向出错的问题。

initial_mcu(); //初始化单片机(Initialization MCU)

initial_position_zu1(1,1); //调用机器人初始位置设定第 1 族子程序

initial_position_zu2(21); //调用机器人初始位置设定第 2 族子程序

xd_zu1(25); //调用下蹲第 1 族子程序

xd_zu2(25); //调用下蹲第 2 族子程序

while(1)

{

l_cs__zu2(16); //调用向左侧身第 2 族子程序 6

lc_ru(12); //调用左侧身+抬右腿子程序 25

ft_ru_zu2(17); //调用抬右腿前进第 2 族子程序 29

ft_rd_zu1(17); //调用落右腿前进第 2 族子程序 30

rc_rd(12); //调用右侧身+落右腿子程序 26

r_cs__zu1(16); //调用向右侧身第 1 族子程序 7

r_cs__zu2(16); //调用向右侧身第 2 族子程序 8

Page 123: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 118 页

rc_lu(12); //调用右侧身+抬左腿子程序 27

ft_lu_zu2(17); //调用抬左腿前进第 2 族子程序 31

ft_ld_zu1(17); //调用落左腿前进第 1 族子程序 32

lc_ld(12); //调用左侧身+落左腿子程序 28

l_cs__zu1(16); //调用向左侧身第 1 族子程序 5

}

}

Page 124: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 119 页

十九.开发软件介绍

STC 单片机是基于 51 控制核的高速单片机。对于程序的编译和链接,我们

可以使用 KEIL C 帮助完成。

在对芯片进行编程时,我们使用 STC公司提供的烧录软件 STC_ISP_V3.9.4。

1.KEIL C

我们使用的单片机是 STC12C5410D,是 51 的内核。指令周期都优大幅度的

缩减,运行速度自然提高。由于我们使用的是 51 内核,所以我们可以使用支持

C51的开发软件帮助编辑程序和编译链接程序。KEIL C就是这样一款软件。

KEIL C 的软件界面如下:

图 3-1

在项目中我们可以建立自己的工程,根据工程添加编辑程序文件。最终使用

“完全编译”功能完成编译。在烧录单片机之前还应该生成对应的“.HEX”INTEL

二进制文件。有了这个文件,我们才能使用 STC提供的软件进行烧写单片机的操

作。

系统信息区

编辑区 项目文件列表

功能菜单

Page 125: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 120 页

2.STC_ISP_V3.9.4

STC _ISP_V3.9.4是由 STC开发的程序烧写测试综合软件。它可以通过普通

的串口(COM)烧写单片机的程序。软件运行稳定。操作相对方便。软件的操作

界面如下:

图 3-2

1

11111

111111

11111

1111

1

2

3

4

Page 126: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 121 页

下面给出操作的具体步骤:

1. 选择芯片类型;

2. 选择要烧写的 HEX文件;

3. 设置串行端口和波特率,这里要注意端口号,波特率的选择比较任意一般为

38400;

4. 选择外部晶振;与下载无关;清 FLASH 区;

5. 点击下载按钮后,打开单片机供电电源。在上电后单片机会自动进入编程状

态。通过提示可以判断是否下载完成。

图 3-3

注意:

1. 在选择芯片时一定要看清型号,很容易选错。

2. 应选择外部晶振,如果选择内部晶振,单片可以工作,但是舵机的控制会出

现问题。

3. 一定要先点编程按钮,然后在开控制板上的电源,要不下载不会成功。

1

2

3

4

5

Page 127: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 122 页

二十.语言程序架构解析

1.C 语言嵌入汇编

由于机器人要求一个很准的时钟,并通过这个时钟做准确的延时,所以我

们需要使用 51 的汇编语言帮助。但是在一些处理不严格的地方,我们可以 C 语

言的模块化编程方法帮助完成。在这里我们使用了 C 语言嵌入汇编的技术。按

文件分类,我们一共有两个文件:一个是 ASM 文件,还有一个是 C 的文件。他

们需要包含在一个工程文件中才能编译通过。

2.汇编语言被嵌入的说明

在次机器人程序中,由于部分是使用的汇编语言编写,为了清晰和直观。我

们将汇编程序单独摘出来做成 “.asm”的文件,在工程中,我们应该将文件关

联到工程目录下,一旦关联,C 程序就可以调用汇编子函数了。我们采用模块化

编程方法,在调用汇编程序时也是按照子函数的方式直接调用的。使用十分方便。

3.KEIL C 下的具体操作步骤

4.在 KEIL C 下建立工程(project)

在“project”菜单下选择“New project”,这时会有对话框询问你将工程

保存在什么目录下,并询问工程名称,这个名称将使系统相关的文件都已这个名

字为开头,包括我们将要用到 HEX文件。如图所示:

图 4-1

Page 128: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 123 页

5.选择开发芯片类型

在设置好文件名和目录以后,系统会询问你所使用的芯片类型。我们这里只

使用标准的 AT89S52 即可。下图是我们的选择。点击“确定”完成工程向导。

图 4-2

Page 129: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 124 页

6.添加程序文件到工程

将制作好的 C 程序和汇编文件(必须以“.C”“.ASM”为后缀文件名)加入

到新的工程中去。我们可以在下图中的对应位置,点击右键并左键点击对应选项

添加文件。

这里需要说明一下,如果添加的文件只有 C 程序而没有添加汇编文件。则

在编译的时候会出错。

图 4-3

Page 130: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 125 页

7.设置工程属性

每个工程的要求不一样,在 KEIL C 中为这些属性做了一个属性选项。我们

可以设置好工程属性以方便开发。

首先在“project”菜单下选择“options for File‘xxxxx’”。如下图所

示:

图 4-4

Page 131: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 126 页

之后就会弹出工程属性对话框,在第三个“Output”选项卡下,将生成 HEX

文件的选项打上对勾,如下图所示:

图 4-5

点击确定完成工程属性的调整,这样我们在之后生成的过程中就会生成

HEX 文件。对于下面的烧录软件来说,需要的就是 HEX 文件。我们可以选择完

全编译,然后看看是否生成了 HEX 文件。如下图所示:

图 4-6

Page 132: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 127 页

这样我们就可以使用工程中的 HEX 文件通过 STC _ISP_V3.5 烧录软件烧录

STC12C5410AD了。

STC 单片机是基于 51 控制核的高速单片机。对于程序的编译和链接,我们

可以使用 KEIL C 帮助完成。

在对芯片进行编程时,我们使用 STC公司提供的烧录软件 STC_ISP_V3.5。

Page 133: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 128 页

8.KEIL C 的安装

进入找到安装文件文

件,“setup”如右图所

示:在文件夹中点击打

首先找到安装文件目

录,“keil7.2”如右图

所示:在文件夹中点击

打开

Page 134: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 129 页

进入找到安装程序文

件,“setup”如右图所

示:双击鼠标左键打开

Page 135: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 130 页

鼠 标 点 击 “ Full

Version”, 如右图所示

鼠标点击“Next”, 如

下图所示

Page 136: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 131 页

鼠标点击“Yes”, 如

下图所示

Page 137: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 132 页

鼠标点击“Next”, 如

下图所示

Page 138: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 133 页

在第一行输入序列号

“k1dzp-5iush-a01ue”

鼠标点击“Next”, 如

图所示进入下一步。

如下图所示

Page 139: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 134 页

鼠标点击“Next”, 如

图所示进入下一步。

如下图所示

Page 140: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 135 页

鼠标点击“Next”, 如

图所示进入下一步。

如下图所示

Page 141: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 136 页

鼠标点击“Next”, 如

图所示进入下一步。

如下图所示

Page 142: SHR-8S 机器人 调试说明书 - DFRobot

SHR-8S 机器人调试说明书

第 137 页

鼠标点击“Finish”, 如

图所示完成安装。