1.步进电机简介
步进电机是一种将电脉冲信号转化为转轴角位移的特殊电机,当驱动器接收到脉冲信号,它就驱动步进电机转动相应的角度。在机械臂控制过程中,我们通过调节脉冲个数来控制电机旋转角度,并与行星减速器相配合驱动机械臂关节;同时,我们也可以通过调节脉冲频率来控制关节旋转的速度与加速度,从而完成对末端执行器与各关节的轨迹规划。根据转子与定子的不同类型可将步进电机分为永磁式、反应式与混合式
永磁式步进电机的转子由永磁体制成,定子由软磁材料制成,二者周边均没有齿槽。定子线圈通电并产生与转子磁场相互排斥的固定磁场,永磁转子产生电磁转矩。永磁式步进电机的优点是成本低、转矩大,在断电时有定位转矩;缺点是步距角大、定位精度低、启动频率较低以及运行频率低。
反应式步进电机也叫磁阻式步进电机,其中又分为单段式步进电机与多段式步进电机。反应式步进电机的定子与转子均由软磁材料制成,二者周边均匀分布有齿槽,当定子绕组激磁通电,齿槽间气隙磁场发生变化,进而产生转矩带动定子旋转。反应式步进电机优点是输出转矩大、转速高且响应速度快;缺点是单步驱动时振幅大、振荡时间长,且断电后无定位转矩。
混合式步进电机将永磁式步进电机与反应式步进电机的优点相结合,即输出转矩大、精度高、运行稳定且断电后仍有定位转矩。混合式步进电机的定子由软磁材料制成,转子为两端套有软磁材料的圆柱永磁铁,且周边同样带有齿槽。混合式步进电机的爆炸图如下图所示。
2.步进电机驱动器
步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速和定位的目的。而在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置,即处于定位状态。
选择合适的步进电机驱动,可以提高步进电机运行的稳定性与精度。
#这里是手册里面针对两种坐标系
关节坐标系:以各运动关节为参照确定的坐标系。
若Dobot Magician未安装末端套件,则包含三个关节:J1、J2、J3,且均为旋转关节,逆时针为正。
若Dobot Magician安装带舵机的末端套件,如吸盘和夹爪套件,则包含四个关节:J1、J2、J3和J4,均为旋转关节,逆时针为正。
笛卡尔坐标系:以机械臂底座为参照确定的坐标系。
坐标系原点为大臂、小臂以及底座三个电机三轴的交点。
X轴方向垂直于固定底座向前。
Y轴方向垂直于固定底座向左。
Z轴符合右手定则,垂直向上为正方向。
R轴为末端舵机中心相对于原点的姿态,逆时针为正。当安装了带舵机的末端套件时,才存在R轴。R轴坐标为J1轴和J4轴坐标之和。
(2)运动模式
本款机械臂主要有括点动模式、点位模式(PTP)、圆弧运动模式(ARC)。PTP和ARC可总称为存点再现运动模式。 三种运动模式,
(1)点动模式即示教时移动机械臂的坐标系,使机械臂移动至某一点。Dobot Magician的坐标系可分为笛卡尔坐标系和关节坐标系,用户可单击笛卡尔坐标系按钮或关节坐标系按钮移动机械臂。
笛卡尔坐标系模式:
单击“X+”、“X-”,机械臂会沿X轴正负方向移动。
单击“Y+”、“Y-”,机械臂会沿Y轴正负方向移动。
单击“Z+”、“Z-”,机械臂会沿Z轴正负方向移动。
单击“R+”、“R-”,机械臂末端姿态会沿R轴正负方向旋转。
关节坐标系模式:
单击“J1+”、“J1-”,可控制底座电机正负方向旋转。
单击“J2+”、“J2-”,可控制大臂电机正负方向旋转。
单击“J3+”、“J3-”,可控制小臂电机正负方向移动。
单击“J4+”、“J4-”,可控制末端舵机正负方向旋转。
(2)点位模式即实现点到点运动,Dobot Magician的点位模式包括MOVJ、MOVL以及JUMP三种运动模式。不同的运动模式,示教后存点回放的运动轨迹不同。
MOVJ:关节运动,由A点运动到B点,各个关节从A点对应的关节角运行至B点对应的关节角。关节运动过程中,各个关节轴的运行时间需一致,且同时到达终点,如图 3.6所示。
MOVL:直线运动,A点到B点的路径为直线,如图 3.6所示。
JUMP:门型轨迹,A点到B点以MOVJ运动模式移动,如图 3.7所示。
以MOVJ运动模式上升到一定高度(Height)。
以MOVJ运动模式平移到B点上方的高度处。
以MOVJ运动模式下降到B点所在位置。
(3)圆弧模式即示教后存点回放的运动轨迹为圆弧。圆弧轨迹是空间的圆弧,由当前点、圆弧上任一点和圆弧结束点三点共同确定。圆弧总是从起点经过圆弧上任一点再到结束点,如图 3.8所示。
几种方式的运用场景:
注意后面运行python脚本的时候,要先开启机械臂的服务,直接使用一下指令即可
roslaunch dobot DobotServer.launch
(1)设置机械臂的归零状态:
SetHOMECmd.py(调用SetHOMECmd服务,编写client,这里函数接口已经通过服务方式进行封装好了我们直接可以使用)
#!/usr/bin/env python
#-*- conding:utf-8 -*-
import rospy
from dobot.srv import SetHOMECmd
if __name__ == "__main__":
rospy.init_node('testDobot')
rospy.wait_for_service('DobotServer/SetHOMECmd')
try:
client = rospy.ServiceProxy('DobotServer/SetHOMECmd',SetHOMECmd)
#服务名,name 服务类型,srv
response = client()
except rospy.ServiceException, e:
print "Service call failed: %s"%e
(2)设置机械臂末端吸取器的状态
SetEndEffectorSuctionCup.py
#!/usr/bin/env python
#-*- conding:utf-8 -*-
import rospy
from dobot.srv import SetEndEffectorSuctionCup
if __name__ == "__main__":
rospy.init_node('testDobot')
rospy.wait_for_service('DobotServer/SetEndEffectorSuctionCup')
try:
client = rospy.ServiceProxy('DobotServer/SetEndEffectorSuctionCup',SetEndEffectorSuctionCup)
response = client(1,1,True)
#response = client(0,0,True)
except rospy.ServiceException, e:
print "Service call failed: %s"%e
这里需要传递两个参数,分别表示气泵是否使能以及吹吸气状态。
(3)执行 PTP 指令
设置机械臂运动的目的坐标,这里一共需要传递五个参数,通过官方的API接口可以看到每一个参数的意思。
#!/usr/bin/env python
#-*- conding:utf-8 -*-
import rospy
from dobot.srv import SetPTPCmd
if __name__ == "__main__":
rospy.init_node('testDobot')
rospy.wait_for_service('DobotServer/SetPTPCmd')
try:
client = rospy.ServiceProxy('DobotServer/SetPTPCmd',SetPTPCmd)
response = client(1,-2.2,258,121,-10)
except rospy.ServiceException, e:
print "Service call failed: %s"%e
可以看到,第一个代表PTP模式的设置,后面四个参数主要是描述坐标系的相关量。我们这个工程主要使用模式1,MOVJ模式和笛卡尔坐标系了,这就用到了博文开头提到的坐标系和模式介绍。