使用python,通过串口ROS直接控制电机驱动器(2)

第一节:运用测试程序测试电机是否正常工作

在第一节中,我们需要测试一下用Python串口控制电机的可行性。请确保自己安装好anaconda。

第一步:安装pyserial模块(遇到问题百度解决)

打开命令行输入:

pip install pyserial

第二步,参考驱动器使用手册,了解驱动器串口(RS232)通讯协议:

使用python,通过串口ROS直接控制电机驱动器(2)_第1张图片

第三步:根据通讯协议写测试代码:

import serial

import time



motor_enable_date=b'\x00\x00\x01\x01'

motor_speed_mode=b'\x02\x00\xC4\xC6'

motor_accdec_set=b'\x0A\x14\x14\x32'

motor_speed_set=b'\x06\x00\x88\x8E'

motor_status=b'\x80\x00\x80'

#设置速度模式02 00 C4 C6

#设置加减速时间0A 14 14 32

#设置转速06 00 88 8E

#使能电机00 00 01 01

#停机电机 00 00 00 00



s=serial.Serial('com4',57600)

s.bytesize = 8

s.stopbits = 1

s.parity = "N"

motor_enable(s)

time.sleep(1)

n=s.readline()

if n:

    data= [hex(x) for x in bytes(n)]

     print(data)

s.flush()

#print('ok')

# 关闭 串口

if s.isOpen():

    s.close()

def motor_enable(serial):

    try:

        serial.write(motor_speed_mode)

        serial.write(motor_accdec_set)

        time.sleep(0.1)

        serial.write(motor_speed_set)

        time.sleep(0.1)

        serial.write(motor_enable_date)

        time.sleep(0.1)

        serial.write(motor_status)

        time.sleep(1)

        serial.write(motor_status)

        time.sleep(1)

        serial.write(motor_status)

        time.sleep(1)

        serial.write(motor_status)

        time.sleep(1)

        print('send ok')

    except:

        print('cant write motor_enable')

在使用卖家提供的软件测试电路没有问题后,便可以开始测试编写程序了;一下是我给我使用的电机编写的测试程序。

        代码介绍:

首先在查看电脑设备管理器中查看电机所对应的串口名字,我的串口名字为com4,因此我通过使用s=serial.Serial('com4',57600),创建串口对象为com4,波特率为57600

接着的是串口的一些参数配置,接下来我调用了一个我创建的motor_enable函数,根据使用手册发送速度控制步骤。

注意我在每个步骤中间加入了一个time.sleep()函数,开始我没加入这个函数时,我这么设置也无法让电机工作。后来觉得是不是每个信息发送太快了,于是在每个步骤中间加入延迟函数,最后能正常工作。在起动电机后,根据使用手册可得需要不停的发送状态查询指令,电机才不会锁轴。最终关闭串口。

本节总结:

万事开头难,虽然只是短短的几步控制。作为初学者的我也遇到了很多的坑。例如用卖家软件直接控制驱动器的时候怎么也连接不上,后来问别人才知道我用的线是另一款电机的线,引脚不同无法测试成功。接下来是与驱动器通讯的过程中要用十六进制进行通讯。其他教程中都要用到一个bytes.fromhex()的函数,把字符转为十六进制的数。但是这个函数只能在python3才能提供,而ROS上搭载的python2是无法运行这个程序的,因此又得重新改程序。初期调试成功对后期的开发有很大的帮助,同时对python的理解能够更深一步!!!!!!

 

 

 

 

你可能感兴趣的:(ROS)