1.主界面模块
本程序的主界面如图3.5所示,在主界面上可以完成程序所带的所有功能,如参数的录入和管理,实时步态的实现,各个关节角度数据的查看等。通过参数的设置,点击相应的功能按钮,查看步态规划的结果,完成与系统程序的交互。为使得整个程序简洁、易读,本程序的界面只有一个,所有的功能都在主界面上完成。
2.步态参数录入模块
参数录入界面如图3.6所示,所需设定的步态参数共有13个,分别为:前进时间、前进距离、抬腿角度、抬腿时间、前腿落脚点x轴方向偏移、前腿落脚点y轴方向偏移、前脚掌落地点偏移角、占空比、后腿落脚点y轴方向偏移、后脚掌落地点偏移角、左后腿偏移量、左前腿偏移量、右后腿偏移量。其中落脚点x轴方向偏移就是3.3节中步态计算模型中所提及的脚掌参数lx、落脚点y轴方向偏移为ly、脚掌落地点偏移角为α,并且通过占空比的设置结合左后腿偏移量、左前腿偏移量、右后腿偏移量(设定以右前腿为基准,偏移量始终为0)的设置,可以规划出不同类型的步态,例如对角步态、三角步态等。
图3.6 参数录入界面
同时为在设置参数时,对一些参数的定义有比较直观的了解,本程序带有两个参数设置帮助按钮:前腿参数说明和后腿参数说明,如图3.7所示。
图3.7 前后腿参数说明图
(a)前腿参数说明图;(b)后腿参数说明图
运动学计算模块是本规划程序的核心,步态规划的结果就是通过本模块产生的。通过第2章的机器人运动学分析和第3章所提出的仿生步态的规划方法,在MATLAB中建立仿壁虎机器人运动学计算模型,编制M文件,通过相关参数的输入,调用相应的计算函数。
本程序中一共编制11个M文件(函数),通过这些函数的相互调用完成整个机器人运动学计算过程,其中主函数在Getangle.m文件中,它负责协调各个函数的调用,例如其中的fanjie.m文件负责进行机构运动学的逆解,其核心代码如下:
function[st1,st2]=fanjie(x,y)
%对参数的说明:x,y是脚掌末端的坐标,st1,st2是返回的两个角度值(度)
%参数设置L为腿长
L=46;
a1=L;a2=L;
%计算st2的值
M=(x^2+y^2-a1^2-a2^2)/(2*a1*a2);
st2=atan(sqrt(1-M^2)/M)*180/pi;
if st2<0
st2=180+st2;
end
%计算st1的值
C1=(a1+a2*M);
C2=a2*sqrt(1-M^2);
C3=(a1+a2*M)*(a1+a2*M)+(1-M^2)*a2*a2;
A=(y*C1-x*C2)/C3;
B=(x*C1+y*C2)/C3;
st1=atan(A/B)*180/pi;
4.实时步态显示模块
实时显示模块在主界面的右侧,在此区域内可以观察到所规划步态的动态演示效果,在机器人爬行过程中脚掌的姿态变化也可观察到,通过这样的步态演示可以对所规划的步态结果有比较直观的认识,方便参数的调整,以规划出更加合理的步态。
其显示效果如图3.8所示。
图3.8 步态演示
5.绘图模块
为方便观察所规划步态数据结果,本程序设置步态数据(身体轨迹、各关节转角等)显示区域,如图3.9所示。
从图中的界面上可以看到,在左侧区域通过选择不同的项目,中间部分可以显示某条腿三个关节的转角随时间的变化曲线,也可显示有关身体轨迹的两个参数(身体沿前进方向位移和身体转角)随时间变化的曲线。通过观察这些数据,可以初步判断规划结果是否符合要求,方便进行修改调整。
6.数据库模块
如果规划完成,而结果需要保存,以便进行下一步的仿真实验,或者方便下一次进行查看、参考,那么可通过本程序中包含的数据库模块来完成这项工作,其界面如图3.10所示。
通过“选择数据库文件”来导入数据库文件(*.mdb),并且可以对数据进行查看、导出和删除等操作。
图3.9 关节角度曲线和身体轨迹曲线
(a)关节角度曲线;(b)身体角度曲线
图3.10 数据库操作界面
使用数据库的目的是使数据的管理更加方便、有效。由于MATLAB本身并不包含数据库,所以需要与相应的数据库进行链接,本程序使用的是Microsoft的Access数据库,它具有支持ODBC(开放数据库互连,Open Data Base Connectivity)、存储方式单一、面向对象、界面友好、易操作、集成环境、能处理多种数据信息等优点。
在进行数据库操作前,首先要配置数据源,本书采用的是修改注册表,自动配置数据源的方法,通过自编的函数LinkDB.m来完成,函数运行后将产生文件regedit_DB.reg,将链接信息导入注册表中,防止丢失。其核心代码如下:
%加入数据源名称
fid=fopen(ˈregedit_DB.regˈ,ˈwtˈ);
String=ˈWindows Registry Editor Version 5.00\n\nˈ;
fprintf(fid,String);
String=ˈ[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]\nˈ;
fprintf(fid,String);
String=strcat([ˈˈˈˈDB_sourcenameˈˈˈˈ],ˈ="Microsoft Access Driver(*.mdb)"\n\nˈ);(www.daowen.com)
fprintf(fid,String);
%加入数据源路径
String=[ˈ[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ˈ,DB_sourcename,ˈ]\nˈ];
fprintf(fid,String);
String=ˈ"Driver"="C:\WINDOWS\system32\odbcjt32.dll"\nˈ;
fprintf(fid,String);
String=[ˈ"DBQ"="ˈ,DB_path,ˈ"\nˈ];
fprintf(fid,String);
String=ˈ"DriverId"=dword:00000019\nˈ;
fprintf(fid,String);
String=ˈ"FIL"="MS Access;"\nˈ;
fprintf(fid,String);
String=ˈ"SafeTransactions"=dword:00000000\nˈ;
fprintf(fid,String);
String=ˈ"UID"=""\n\nˈ;
fprintf(fid,String);
% add jet
String=[ˈ[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ˈ,DB_sourcename,ˈ\Engines]\n\nˈ];
fprintf(fid,String);
String=[ˈ[HKEY_CURRENT_USER\\Software\\ODBC\\ODBC.INI\\ˈ,DB_sourcename,ˈ\Engines\Jet]\nˈ];
fprintf(fid,String);
String=ˈ"ImplicitCommitSync"=""\nˈ;
fprintf(fid,String);
String=ˈ"MaxBufferSize"=dword:00000800\nˈ;
fprintf(fid,String);
String=ˈ"PageTimeout"=dword:00000005\nˈ;
fprintf(fid,String);
String=ˈ"Threads"=dword:00000003\nˈ;
fprintf(fid,String);
String=ˈ"UserCommitSync"="Yes"\nˈ;
fprintf(fid,String);
fclose(fid);
%打开regedit_DB.reg文件,将链接信息导入注册表中
dos(ˈregedit_DB.regˈ);
if Index==1
delete(ˈregedit_DB.regˈ);
end
配置好数据源后还要进行一些基本的操作才能把数据从数据库文件中读到MATLAB中:
1.建立链接对象——Database函数
调用格式:
conna=database(ˈdatasourcenameˈ,ˈusernameˈ,ˈpasswordˈ);
如conna=database(ˈSampleDBˈ,",");其中SampleDB为创建的数据源名称,在默认情况下,数据库文件的username和password为空。
2.建立并打开游标——Exec函数
调用格式:
curs=exec(conna,ˈsqlqueryˈ);
如curs=exec(conna,ˈselect*from databaseˈ);其中conna为链接对象,select*from database表示从表database中选择所有的数据。
3.把数据库中的数据读取到MATLAB中——Fetch函数
调用格式:
curs=fetch(curs,RowLimit);
Data=curs.Data;%把读取到的数据用变量Data保存
如curs=fetch(curs);%把所有的数据一次全部读取到MATLAB中,Row-Limit为每次读取的数据参数的行数,默认为全部读取,但是全部读取会很费时间(和计算机性能有很大关系)。
每次进行数据库的操作都要进行以上四个步骤。从数据库中读取数据到MATLAB中有三种数据类型,分别为元胞类型(Cellarray)、数字型(Numeric)、结构型(Structure),其中元胞类型为默认类型。可以在链接数据库之前通过Setdbprefs函数来进行设置。
对数据库中的数据的添加、修改主要是通过几个函数进行的:添加数据到表中使用Insert函数,更新数据库中的数据使用Update函数,删除数据直接使用数据库语言。
部分步态设置参数在数据库中保存,如图3.11所示:
图3.11 数据库中的部分数据存储
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。