使用python,通过串口ROS直接控制电机驱动器(1) 您所在的位置:网站首页 控制器如何驱动电机 使用python,通过串口ROS直接控制电机驱动器(1)

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

2024-07-09 19:25| 来源: 网络整理| 查看: 265

最近在一个公司实习,公司需要我用ROS搭建一个机器车地盘,因此我开始学习关于ROS方面的东西。通常传统的方法大家搭建机器车地盘的时候会想到用一个stm32开发板作为中间层次,对上层上位机通过ros-stm32串口的方式通讯,对下层电机驱动器通过pwm的模拟电压来控制电机。但是公司给我的驱动器的通讯方式不仅仅是模拟量的输出,还可以通过can或者串口的形式来控制驱动器。

我之前的学习基本是在上位机上进行开发,因此不是很熟悉stm32,在捣鼓一两天后我便有点放弃stm32通过pwm控制电机。电机的厂家虽然提供了can通讯的stm32工程文件。但是我测试很久后还是无法驱动电机。因此我产生了一个新的想法。为什么我们有一个这么智能的驱动器,却还需要和传统有刷电机那样用pwm的形式来控制电机呢?白白浪费驱动器的性能。因此我想到了一个新方法:

我能否能通过Python,通过调用串口或者can通讯的形式来驱动电机。于是我查了一下可行性。串口可以很方便的通过pyserial模块来通讯,而can通讯的资料就十分少了。因此我选择用串口来完成这个项目。

相对于传统的电机控制结构,上位机直接控制有以下几个优点:

通过直接驱动的方式,大大降低了stm32的开发工作量。减少学习成本和开发时间成本如果后期要新加入电机时,只需要增加串口就可以直接控制电机,而不用修改底层代码

通过与公司其他做嵌入式开发的交流,我意识到我的这种方案可能会有以下几点问题:

串口通讯的稳定性不是很好,因此要是有电磁辐射会造成丢包问题。但是我认为传统的上位机与stm32也是以串口的形式通讯,也是存在同样问题如果上位机死机后,传统的形式stm32可以关闭电机,而新方案无法实现这个功能。针对这个问题,驱动器需要上位机不停的查询驱动器当前状态,否则会锁死电机传统的方案可以做二次pid,新方案只能使用驱动器的pid,因此控制精度没有太高。

在阅读本教程之前,我先交代一下我开发环境以及需要提前掌握的内容:

本项目使用的电机为中菱机器人轮毂电机,控制器为中菱ZLAC706。如果你有自己的带串口的电机驱动器,可以参考本教程。本项目首先是在windows系统下用anaconda进行测试,然后使用pycharm进行开发。最后移植到ubuntu 16.04下的ROS Kinetic。懂Python语言以及编程能力(建议学习廖雪峰的Python,会运用到多线程等比较难的功能)知道ROS(Kinetic)系统的基本工作原理 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有