通过ROS控制真实机械臂(1)—-硬件测试

165
1
2020年12月30日 09时10分

控制机械臂的电机有三种:

 

  1. 伺服电机
  2. 步进电机
  3. 舵机

 

1.   本次实验所使用的舵机有两种:

 

LD_1501MG舵机和 ES3005舵机;

控制板选择的是Beaglebone black,由于ES3005舵机的供电电压是5V,可以直接使用Beaglebone控制,手动测试流程如下:

 

接线:   暗灰: GND
        红色: VCC 4.8-7.2V
        橙黄线: 脉冲输入
        PWM 口为 BBB1 板的 P9_21 口。
        period:20000000 舵机的期望周期是20ms,所以给定period为20000000
        通过控制占空比duty,即可控制舵机的转角,对应关系如下:

 

微信图片_20201223225449

 

   $ echo 0 > run
   $ echo 0 > polarity         这步是必须的,要不然没反应
   $ echo 20000000 > period
   $ echo 500000 > duty    闭合
   $ echo 1 > run
   $ echo 2500000 > duty    初始
   $ echo 1 > run

 

2.    LD_1501MG舵机 :控制的电源是6~7.4V供电,使用beaglebne5v供电的时候操作不当会导致beaglebone重启,使用3.3V控制的话不会导致板子重启,但是由于供电电压不足,需要手动扭一下,舵机才会旋转。这都是不当操作,且注意脉冲的电压和供电电压要匹配(单独给舵机6~7.4V供电,而pwm继续使用beaglebone的3.3V输出,则是不匹配,舵机完全不转)。所以最终方法是使用beaglebone的pwm输出结合逻辑电平转换,用7.4V的电源给电平转换器和舵机供电,将板子的pwm输出从3.3V映射到7.4V,这样电压就匹配了。

 

加载pwm设备树,测试所用pwm口为p9_16,红黑线分别接电源正负极,第三跟白线接p9_16。手动控制测试同上述舵机的控制方法。

 

微信图片_20201223225514

 

3. 步进电机:由于机械臂目前安装的都是步进电机,每个关节的转矩和转速也不同,所以电机的型号也不同,但是控制的原理都是一样的。

 

微信图片_20201223225548

 

以DM542步进电机驱动器举例:通过驱动器上面的细分调节,设置成3200rec/Table,也就是步进电机每接受3200个脉冲周期,就会旋转360°,所以通过控制发送给步进电机的脉冲数就可以控制步进电机的转角。例如:需要电机旋转 a 弧度,pwm给定的周期为T(beaglebone的周期单位为ns,占空比只改变pwm的输出电压大小,对角度控制没有影响):

 

则发给步进电机的脉冲为    (a×180/π) × (3200/360),

延时的时间为:time =  (a×180/π) × (3200/360) × (T×10^-6) ms,

通过usleep(time ×10^3)即可转到指定的角度。

 

当然这种方法有一定的误差,误差主要是延时不够准确,步进电机没有闭环导致的。所以需要后面的伺服电机加编码器的组合来升级硬件。

 

4 .伺服电机+编码器

 

实验室使用的主要是elmo的伺服电机和驱动器,控制方式和步进电机类似,都是通过pwm控制电机,不同之处在于伺服电机没有步距角的概念,无法通过发送的脉冲数来控制电机旋转的角度,所以要结合编码器的数据来进行角度控制。

 

5. 手柄

 

工作环境为ubuntu14.04 + ros-indigo ,安装手柄调试工具。

 

通过 $ sudo apt-get install jstest-gtk

 

微信图片_20201223225616

发表评论

后才能评论

评论列表(1条)

  • hfut_19控制_zhanzhan 2020年12月30日 下午2:18

    博主,打扰您一下,我是工大电气这边的,我最近在用ros导入外部特有格式模型的时候出现问题,想请教您一下,可以加您扣扣吗