教学型六自由度模块化手臂参考手册.docx
《教学型六自由度模块化手臂参考手册.docx》由会员分享,可在线阅读,更多相关《教学型六自由度模块化手臂参考手册.docx(17页珍藏版)》请在冰豆网上搜索。
![教学型六自由度模块化手臂参考手册.docx](https://file1.bdocx.com/fileroot1/2023-6/7/b77f83c9-edaa-41ff-8793-2c56bfd8d245/b77f83c9-edaa-41ff-8793-2c56bfd8d2451.gif)
教学型六自由度模块化手臂参考手册
教学型六自由度模块化手臂开发手册
一、主要技术参数
1)六自由度小型模块化手臂:
●六自由度;
●夹持力:
120g;
●手爪:
±45度;
●独立驱动电源/电池供电;
●聚合物可充电动力锂电池:
7.2V,2000mAH;
●专用充电器,自动检测充电状态,过流过热保护;
●臂长:
270mm;
●控制方式:
独立控制芯片,最多可达8自由度控制;
●通讯方式:
串口控制(UART),可直接与MT-U机器人通讯;
●安装方式:
可以直接装配在大学版机器人MT-U上。
2)小型模块化手臂与PC机通讯专用接口模块:
●采用RS232通讯方式;
●光电隔离;
●独立电源供电。
3)小型模块化手臂配套专用PC机控制软件
●可以通过PC机直接控制各个关节;
●开放PC机控制的函数接口及控制协议;
●可以通过编程实现运动规划设计。
4)伺服电机技术指标
●Type:
MT-SERVO-20
Dimension:
66x30x64mm;
Stalltorque:
20kg/cm;
Operatingspeed:
0.20sec/60degree(4.8v);
Operatingvoltage:
4.8-7.2V;
Temperaturerange:
0℃_55℃;
Deadbandwidth:
10us.
●Type:
MT-SERVO-10
Dimension:
40x20x42mm
Stalltorque:
10kg/cm
Operatingspeed:
0.20sec/60degree
Operatingvoltage:
4.8-7.2V
Temperaturerange:
0℃_55℃
Deadbandwidth:
10us
●Type:
MT-SERVO-6
Dimension:
40x20x42mm
Stalltorque:
5kg/cm
Operatingspeed:
0.20sec/60degree
Operatingvoltage:
4.8-7.2V
Temperaturerange:
0℃_55℃
Deadbandwidth:
10us
二、装配方式
(1)总体装配效果图
(2)主要部件拆解图
三、系统控制原理及接线图
(3)系统控制原理
1)伺服舵机连接插头引脚定义:
2)伺服舵机控制器端口定义:
8路输出端口定义(Servo1~Servo8):
输出端口与伺服舵机连接插头对应方式,如下图:
3)控制端口及通讯端口:
4)PC专用串行通讯模块:
(4)PC机串行通讯电缆接口(5)串行通讯模块电源输入接口
5)其它配件:
(6)聚合物动力锂电池充电器/外接电源
(7)PC机串行通讯电缆
五、伺服舵机控制器通讯协议
1)接收数据:
每一帧控制指令:
4个字节;
第一个字节:
0xAF----数据帧起始字节;
第二个字节:
0x00~0x08----舵机序号(Servo1~Servo8);
第三个字节:
0x00~0xB4----旋转角度设定(-90°~+90°);
第四个字节:
0xFA----数据帧结束字节。
2)返回数据:
当正确接收一帧数据之后,伺服舵机控制器会返回一个字节数据做为接收确认信息。
返回数据为:
大写字母‘R’的ASCII码。
六、详细使用方法
当机器运行时,请远离机器,以免被机器撞伤。
1)接线操作步骤:
●将PC机串行通讯电缆一端接在pc机的串口上,另一端接在手臂的USB口上。
●分别将两个电源的一端接在100V~240V插座上,另一端接在手臂相应接口,如图所示:
(8)控制器电源输入接口(9)串行通讯模块电源输入接口
●拨动手臂底座上的开关,手臂上电,注意上电后手臂会自动找到机械零点位置。
2)Demo软件操作方法:
●打开ArmControl文件夹,双击Tools文件夹内的Reg.bat文件。
●双击Bin文件夹内的ArmControl.exe。
控制界面如下图所示:
(10)软件运行界面
●选择port,注意port号可通过查看PC机设备管理器得到,如图所示:
选择要控制的通道,程序中共有六个通道,Pan为通道1,Tilt为通道2,依次类推,单击“OpenComm”。
(1)相对零点标定:
各关节实际运行时的角度范围都在0~180度之间,但由于机械安装上的限制,有的关节可能达不到0或180度时就会卡住,因此在首次运行时需要对各关节设置最大角度和最小角度及相对零度点,并通过按钮“Save”将其保存到c:
\\ServoControl.ini内,下面详细介绍标定方法:
●选中“SetZero?
”,如图所示:
●以第一个通道为例,如图所示:
●设定最小值:
鼠标左键向左拖动Pan对应的Slider滚动条,angle/(deg)内可看到此时的角度值,假如拖动到45度,单击“SetZero”按钮,第一通道对应的关节将运行到45度,如果舵机没有卡住,继续向左拖动滚动条,直到关节运行到最小的角度后,单击“MinAngle”,设定最小值完成。
●设定最大值:
鼠标左键向右拖动滚动条,直到关节运行到最大的角度后,单击“MaxAngle”,
●设定零点:
鼠标左键向左拖动滚动条,直到关节1运行到所需的位置,单击“Save”按钮,关节1标定完成,依次类推同样方法标定其他关节。
●单击“Reset”按钮,手臂运行到设置的零位(该零点与手臂上电时的零点不同,即为相对零点),如图所示:
●注:
如果有偏差,请重新设置零点。
(2)单自由度模块运动控制:
滑动滚动条设置各自由度角度值,单击“Drive”按钮可驱动各自由度模块运动,并可在speed内分别设定每个自由度的速度值,如图所示:
注:
每个自由度模块运行角度的定义,均相对于前面标定的相对零点。
(3)复位操作:
单击“Reset”按钮,手臂复位至相对零点状态。
(4)演示
图1
单击“OpenFile”按钮,会弹出如图2对话框,
(1)选择已有文件,单击“Browse…”,到Bin里找Angle.mdb文件,
图2
图3
单击“Teach”按钮,手臂会按上面的序列值往复运动,按“Stop”按钮停止运动。
假如鼠标左键单击图3中sn为2号序列,相应的angle值也都变成相应的值,如图4:
图4
单击“Drive”按钮,手臂会运行到相应的角度。
改变图4中的角度值,可单击“Insert”按钮将该组值插入到序列中,单击“Modify”可修改已有的序列,单击“Delete”删除已有序列。
(2)新建文件
单击“OpenFile”按钮,单击“Browse…”,将图2中*.mdb中的*改成文件名。
其他与
(1)相同。
接口函数说明:
ServoControl.h函数说明:
(1)bool__stdcallInit(intnPort,DWORDdwBaud);
参数说明:
nPort:
串口号
dwBaud:
波特率9600
函数说明:
打开串口
(2)void__stdcallSetPostionCallback(SERVO_POSITION_CALLBACK*cbPosition,void*pParam);
函数说明:
设定事件处理过程(接收到数据)
参数说明:
SERVO_POSITION_CALLBACK:
传入一个函数指针,该函数接收到事件后,交由该指针指向的函数处理
函数原形为:
typedefvoidSERVO_POSITION_CALLBACK(void*pParam,inttype,float*value,intnum);
value为返回接收到的确认值‘R’;num为value下标值
pParam:
SERVO_POSITION_CALLBACK指向的函数所需的参数,一般为一个类或结构的指针
(3)voiddrive(intJointID,intAngle);
函数说明:
控制各关节相对零点运动,运动范围在(MinAngle-ZeroAngle,MaxAngle-ZeroAngle)之间。
参数说明:
JointID:
通道号
Angle:
相对角度
(4)voidSetZero(intJointID,intAngle);
函数说明:
控制各关节绝对运动,运动范围在(MinAngle,MaxAngle)之间。
参数说明:
JointID:
通道号
Angle:
绝对角度
(5)voidInitialize(intJointID,intAngle);
函数说明:
初始化各关节的零点值。
参数说明:
JointID:
通道号
Angle:
零点角度
调用接口函数库方法:
解决方案-〉右键单击ArmControl-〉属性
输出目录:
../bin,因为bin文件夹有该可执行文件所需要用的MTServoControl.dll
C\C++常规-〉附加包含目录../include,该文件夹内有需要用到的头文件ServoControl.h;
链接器常规-〉附加库目录../lib,该文件夹内有需要用到的静态链接库。
链接器输入-〉附加依赖项内输入MTServoControl.lib
简单介绍程序的编写:
首先按上面的方法修改属性,添加头文件#include"ServoControl.h",添加成员变量CServoControlm_ServoControl;首先要获得保存好的各关节的最大值最小值及零点位置,
m_bOpen=m_ServoControl.Init(m_Port,9600);//打开串口,如果打开成功返回值为true,反之为false
for(inti=0;i<6;i++)
{
m_ServoControl.Initialize(i+1,m_ZeroArray[i]);//注意在控制之前必须先初始化零点角度
}
m_ServoControl.SetPostionCallback(ServoPositionCallback,this);//设定事件处理过程
在源文件开始位置定义voidServoPositionCallback(void*pParam,inttype,float*value,intnum);
此时就可以编写控制各关节的函数了,如m_ServoControl.drive(num,m_Angle);控制各关节运动,注意要加设定条件:
intm_Min,m_Max;
m_Min=m_MinAngle[num-1]-m_ZeroArray[num-1];
m_Max=m_MaxAngle[num-1]-m_ZeroArray[num-1];
if(m_Angle>m_Max)
{
m_Angle=m_Max;
}
if(m_Angle{
m_Angle=m_Min;
}
设定零点:
m_ServoControl.SetZero(num,m_Angle);
注意:
向下位机发送运动控制指令时,假如关节1处于0度要运行到45度,实验证明45毫秒发送一度手臂运行平滑