最近在做一个四自由度的机械臂,要实现的功能是,通过输入XYZ三轴的坐标值,让机械臂自动导航到坐标位置。
原理一句话可以概括:输入三个坐标值,通过计算得到底部步进电机的旋转角度和剩余三个舵机的旋转角度。

底座是步进电机,往上依次是三个舵机,用的是180度的舵机,因此有一些限制,到底有什么限制自己想象。每个舵机连接一个连杆,从下到上依次称为舵机5 ,4 ,3 ,由它们控制的杆称为L1,L2,L3。从图片可以看出来,三个舵机是完全在一个竖直平面上的,这个平面与底座平面垂直,那么就以底座平面为基准,建立X ,Y轴, Z轴就垂直于底座向上。
现在可以思考一下如何导航到空间中的任何一个点?空间中任何一个点都可以用两个角度表示,一个叫**横偏角**,另外一个叫**俯仰角**,任何三维坐标都可以用这两个角表示。
想象一下,第一步,底座步进电机可以让三舵机机械臂平面旋转任意角度,这个角度就是上面说的横偏角,第二步,三舵机的三杆通过运动可以让机械臂头部到达它们所在平面的任何一个位置(力所能及的位置,不对 ,是臂所能及!),这个目标位置与XOY平面的夹角就是上面说的俯仰角,那么就达到了目的,现在空间中整个球体的任何位置都可以通过 1 底座步进电机旋转 一个横偏角度 2 三杆运动之后一个头部与XOY平面俯仰角。道理就是这么个道理。
现在,已知条件是:目标点的X,Y,Z值,还有机械臂L1, L2, L3,的长度,通过上面的分析知道,第一步要做的就是让步进电机转过一个横偏角,计算这个横偏角很简单,这个角就是:目标点在XOY平面上的投影点与X轴的夹角对吧,现在这个变量名为
target_angle.Last_AngleStep
(我定义了一个结构体,里面包含最终计算出来的三舵机角度以及步进电机横偏角)


3564

被折叠的 条评论
为什么被折叠?



