四自由度步行机器人结构设计

该步行机器人整体结构由3mm厚铝合金板构成,铝合金经裁剪、钻孔、弯曲成所需零件。机器人由4个舵机提供双腿的4个自由度,可简单模拟人的步行。

装配过程为,首先将两个装好舵盘的舵机安装在身体框架上,再用身体腹部钣金件锁紧身体框架。

四自由度步行机器人装配图

接着调整腹部两个舵机至中心角度位置,将两个腿部框架分别用螺丝安装在腹部舵机上,然后将另外两个装好舵盘的舵机安装在腿部框架上。

四自由度步行机器人装配图

最后调整腿部两个舵机至中心角度位置,安装脚踝和脚底板,脚踝前部直接与舵盘连接,后部使用类似套筒的轴承连接。

四自由度步行机器人装配图

上面图片均省略了螺丝,电路板、电池和配线等也没有添加。实际制作时,电路板安装在机器人背部,电池放置在机器人腹腔内。

该四自由度步行机器人的步行姿态如下:

四自由度步行机器人步行姿态模拟动画

参考:浅草ギ研. 双足步行机器人制作入门. 科学出版社. 2011

用MATLAB对PID控制做简单的仿真

PID控制是目前工程上应用最广的一种控制方法,其结构简单,且不依赖被控对象模型,控制所需的信息量也很少,因而易于工程实现,同时也可获得较好的控制效果。

PID控制是将误差信号e(t)的比例(P),积分(I)和微分(D)通过线性组合构成控制量进行控制,其输出信号为:

\[u(t) = {K_P}[e(t) + \frac{1}{{{T_I}}}\int_0^t {e(t)dt + {T_D}\frac{{de(t)}}{{dt}}} ]\]

下面用MATLAB软件对PID控制做简单的仿真描述。

1. 建立二阶负反馈控制系统,其开环传递函数为:

\[{G_O}(s) = \frac{1}{{(2s + 1)(5s + 1)}}\]

clc; clear all; close all;
Go = tf(1,conv([2,1],[5,1]));

2. 比例控制,输出与输入偏差成比例,即直接将误差信号放大或缩小。比例控制的传递函数为:

\[{G_C}(s) = {K_P}\]

取不同的比例系数,绘制系统的单位阶跃响应曲线:

Kp = [0.5,2,5,10];
for m = 1:4
  sys = feedback(Kp(m)*Go,1);
  step(sys); hold on;
end

比例控制的单位阶跃响应曲线

随着KP值的增大,系统响应速度加快,但系统的超调也随着增加,调节时间也随着增长。当KP增大到一定值后,闭环系统将趋于不稳定。

比例控制具有抗干扰能力强、控制及时、过渡时间短的优点,但存在稳态误差,增大比例系数可提高系统的开环增益,减小系统的稳态误差,从而提高系统的控制精度,但这会降低系统的相对稳定性,甚至可能造成闭环系统的不稳定,因此,在系统校正和设计中,比例控制一般不单独使用。

3. 微分控制,输出与输入偏差的微分成比例,即与偏差的变化速度成比例。微分控制(与比例控制同时使用)的传递函数为:

\[{G_C}(s) = {K_P}(1 + {T_D}s)\]

取不同的微分系数,绘制系统的单位阶跃响应曲线:

Kp = 10;
Td = [0,0.4,1,4];
for m = 1:4
  G1 = tf([Kp*Td(m),Kp],[0,1]);
  sys = feedback(G1*Go,1);
  step(sys); hold on;
end

微分控制的单位阶跃响应曲线

随着TD值的增大,系统超调量逐渐减小,动态特征有改善。

自动控制系统在克服误差的调节过程中可能会出现振荡甚至不稳定,原因是存在有较大惯性或有滞后的组件,具有抑制误差的作用,其变化总是落后于误差的变化,在控制器质中仅引入比例项是不够的,比例项的作用仅是放大误差的幅值,而微分项能预测误差的变化趋势,这样,具有比例+微分的控制器,就能提前使抑制误差的控制作用等于零,甚至为负值,从而避免被控量的严重超调,改善动态特性。

微分控制反映误差的变化率,只有当误差随时间变化时,微分控制才会对系统起作用,而对无变化或缓慢变化的对象不起作用。另外,微分控制对纯滞后环节不能起到改善控制品质的作用,反而具有放大高频噪声信号的缺点。

4. 积分控制,输出与输入偏差的积分成比例,即与误差的积累成比例。积分控制(与比例控制同时使用)的传递函数为:

\[{G_C}(s) = {K_P}(1 + \frac{1}{{{T_I}}} \cdot \frac{1}{s})\]

取不同的积分系数,绘制系统的单位阶跃响应曲线:

Kp = 2;
Ti = [3,6,12,24];
for m = 1:4
  G1 = tf([Kp,Kp/Ti(m)],[1,0]);
  sys = feedback(G1*Go,1);
  step(sys); hold on;
end

积分控制的单位阶跃响应曲线

加入积分控制后,消除了系统稳态误差,但随着TI值的增大,达到稳态的过渡时间也逐渐加长。

积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即使误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大,使稳态误差进一步减小,直到等于零,但会使系统稳定性降低,过渡时间也加长。

5. 比例积分微分控制,即PID控制的传递函数为:

\[{G_C}(s) = {K_P}(1 + \frac{1}{{{T_I}}} \cdot \frac{1}{s} + {T_D}s)\]

取适当的比例、积分、微分系数,绘制系统的单位阶跃响应曲线:

Kp = 100;
Ti = 2.2;
Td = 7;
G1 = tf([Kp(m)*Td(m),Kp(m),Kp(m)/Ti(m)],[0,1,0]); 
sys = feedback(G1*Go,1);
step(sys);

PID控制的单位阶跃响应曲线

PID控制通过积分作用消除误差,而微分控制可缩小超调量、加快系统响应,是综合了PI控制和PD控制长处并去除其短处的控制。

基于切比雪夫连杆机构的机器人腿部设计

可以用作机器人腿部的机构有埃万斯连杆机构、切比雪夫连杆机构等,这里简要描述基于切比雪夫连杆机构的机器人腿部设计及其运动仿真。

如下运动简图左侧,由静止节、原动节、从动节、中间节和延长中间节组成的四杆机构即为切比雪夫连杆机构,实现机器人腿部的抬腿、迈步、蹬地、前行的周期性动作。其余未标注名称的杆件与部分切比雪夫连杆组成平行四边形机构,用来保持机器人脚面与地面的平行。

切比雪夫连杆机构运动简图

其中,切比雪夫连杆机构各杆件的长度比须符合:
静止节 : 原动节 : 从动节 : 中间节 : 延长中间节 = 2 : 1 : 2.5 : 2.5 : 2.5

使用Pro/E软件建模,并对机器人腿部步态做运动仿真:

切比雪夫连杆机构机器人腿部运动仿真

机器人腿部位置如下图所示,上半部分为水平方向位置,下半部分为竖直方向位置:

切比雪夫连杆机构机器人腿部运动仿真

参考:坂本范行. 双足步行机器人DIY. 科学出版社. 2010

新安装Pro/E后的常用配置

菜单“工具” – “选项”命令,添加/更改下表选项,然后把工作目录下生成的current_session.pro改名为config.pro。

选项 说明
trail_dir D:\proe4\trail 设置轨迹文件trail.txt的生成目录
web_browser_homepage about:blank 设置浏览器主页为空白页面
drawing_setup_file D:\proe4\work\drw.dtl 设置工程图配置文件
pdf_use_pentable yes 导出PDF图纸时使用系统线宽设置
pen_table_file D:\proe4\work\table.pnt 设置打印线宽配置文件
pro_unit_sys mmns 缺省单位
template_solidpart mmns_part_solid.prt 缺省零件模板
template_sheetmetalpart mmns_part_sheetmetal.prt 缺省钣金零件模板
template_designasm mmns_asm_design.asm 缺省装配体模板

打印线宽配置文件table.pnt中设置为:

pen 1 color 0.0 0.0 0.0; thickness 0.03 cm
pen 2 color 0.0 0.0 0.0; thickness 0.013 cm
pen 3 color 0.0 0.0 0.0; thickness 0.01 cm
pen 4 color 0.0 0.0 0.0; thickness 0.01 cm
pen 5 color 0.0 0.0 0.0; thickness 0.01 cm
pen 6 color 0.0 0.0 0.0; thickness 0.01 cm
pen 7 color 0.0 0.0 0.0; thickness 0.01 cm
pen 8 color 0.0 0.0 0.0; thickness 0.01 cm

工程图配置文件生成方法为:进入绘图模块,菜单“文件” – “属性” – “绘图选项”命令,添加/更改需要选项,然后把文件保存为drw.dtl。

何为JSON

JSON即JavaScript Object Notation,JavaScript对象表示法,是一种流行的数据交换方式,易于程序员阅读和编写、程序解析和生成。JSON是JavaScript原生数据格式,可以轻松用于AJAX应用中。

JSON规范如下:

  1. 对象:包含在“{”和“}”之间的一个键-值对集合,每个键-值对之间以逗号分隔。键和值本身用冒号“:”分隔。键是简单的字符串,值可以是数组、字符串、数字、布尔值或为空;
  2. 数组:有序数据对,数组的值以逗号分隔并包含在“[”和“]”之间;
  3. 字符串:必须包含在双引号之间。

JSON实例:

最简单的JSON

{
  "name":"Yophee", "address":"Beijing"
}

使用数组的JSON

{
  "name":"bank", "phoneNumbers":["95588", "95533", "95559"]
}

复杂的JSON

{
  "people":
  [
    {
    "name":"Zhang San",
    "age": 29,
    "isAdult":true
    },
    {
    "name":"Li si",
    "age": 15,
    "isAdult":false
    }
  ]
}

需要注意的是:

  1. 对象的键和字符串类型的值必须包含在双引号中,不允许使用单引号
  2. JSON要求数据编码为UTF-8格式