我这边需要使用ROS控制一个AGV上的升降平台,于是在花费了几天的时间作出了这个方法
电机:24V直流电机, 通电即转
驱动器:BTS7960大电流电机驱动器,H桥原理,下图这种

板子:Arduino UNO
在这里我使用的时Arduino端作为Subscriber,ubuntu端作为publisher

Arduino端代码:


#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Int8.h>ros::NodeHandle  nh;int E1 = 5;     //M1 正
int E2 = 6;     //M1 反std_msgs::String str_msg;void stop_move(void)
{                   analogWrite(E1,0);   analogWrite(E2,0);
}
void advance(void)
{analogWrite (E1,255);       analogWrite (E2,0);
}
void back_off (void)
{analogWrite (E1,0);analogWrite (E2,255);
}void ModelCb(const std_msgs::Int8& model){ //定义回调函数为ModelCb,订阅String消息里的modelif(model.data==-1){back_off();}else if(model.data==1){advance();}else if(model.data==0){stop_move();}
}ros::Subscriber<std_msgs::Int8> sub("model", ModelCb );void setup(void)
{ nh.initNode();nh.subscribe(sub);
} void loop(void)
{nh.spinOnce();delay(1);
}

这个代码中的引脚5接的是L_PWM,引脚6接的是R_PWM,L_EN跟R_EN我直接接的5V供电

ubuntu端python代码:

#!/usr/bin/env python
# coding=utf-8
import rospyimport geometry_msgs.msg from std_msgs.msg import Int8import sys, select, termios, ttycount =0
model=0
#键值对应移动方向
moveBindings = {'w':(1),'s':(0),'x':(-1),}
#获取键值函数
def getKey():tty.setraw(sys.stdin.fileno())rlist, _, _ = select.select([sys.stdin], [], [], 0.1)if rlist:key = sys.stdin.read(1)else:key = ''termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)return key#主函数
if __name__=="__main__":settings = termios.tcgetattr(sys.stdin) #获取键值初始化,读取终端相关属性rospy.init_node('up_down_plat') #创建ROS节点,节点名称为“up_down_plat"pub = rospy.Publisher('model',Int8,queue_size=5) #创建话题发布者,发布"model"为话题的消息try:while(1):key = getKey() #获取键值#判断键值是否在移动方向键值内if key in moveBindings.keys():model  = moveBindings[key]count = 0if(model==1):print("上升")elif(model==0):print("停止")elif(model==-1):print("下降")#空键值/'k',相关变量置0elif key == ' ' or key == 'k' :model=0#长期识别到不明键值,相关变量置0else:count = count + 1if count > 4:model= 0if (key == '\x03'):breakpub.publish(model) #运行出现问题则程序终止并打印相关错误信息except Exception as e:print(e)#程序结束前发布速度为0的速度话题finally:model =0pub.publish(model)#程序结束前设置终端相关属性termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)

可以实现按w上升,s下降,松开即停

Arduino使用ROS通过键盘控制单个直流电机相关推荐

  1. [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动

    原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...

  2. ROS中键盘控制节点功能包下载(下载过程中git时出现拒绝连接的最终处理办法)

    在ros中运行sudo teleop_twist_keyboard teleop_twist_keyboard.py时,出现找不到功能包错误,如下 解决问题过程: 1.首先,我现在文件中搜一下这个功能 ...

  3. ROS小车打造(12)--Arduino订阅cmd_vel实现差速控制

    基本思路: 上一篇已经能实现arduino对ROS节点的订阅与发布,所以只要订阅到ROS的移动控制消息,并把它转换为小车的移动命令即可实现ROS对小车的移动驱动. ROS小车打造(十一)--ardui ...

  4. ROS键盘控制机器人

    目录 前言&&过程分析 第一步 第二步 第三步 第四步 PC端(上位机)代码 远程机器人(下位机)代码 前言&&过程分析 当我们需要使用键盘控制机器人的时候,通常,分为 ...

  5. ROS探索总结(七)(八)(九)——smartcar源码上传 键盘控制 操作杆控制

    ROS探索总结(七)--smartcar源码上传 看到前面写的博客还是帮助了很多ROS的学习者,我感到非常荣幸.其实我也是一名ROS的新手,ROS的相关资料少,上手难度大,我现在也在摸索着学习,还希望 ...

  6. 多车调度问题(大疆Robot Master)——ROS键盘控制失灵,小车无法收敛定位,路径规划出错

    问题1 ROS键盘控制小车失灵 具体就是:用键盘左右转小车,速度贼快,而且方向不正确,检查发现是控制模块失灵,有可能是内部测量元件(陀螺仪等)烧了,换了个控制模块解决. 问题2 小车无法收敛定位 具体 ...

  7. 关于ROS+Gazebo通过cmd_vel或键盘控制节点发布速度消息时,仿真小车运动速度相反问题

    本人初学ros,在做仿真小车的时候,通过soildworks2018建立四轮小车模型,并通过插件soildworks to urdf导出urdf文件. 将该文件移入虚拟机中,并将urdf修改为xacr ...

  8. ROS机器人控制 —— 键盘方向控制

    文章目录 1. 键盘控制C++实现(x.y.z.theta) 2. 键盘控制Python实现(x.y.z.theta) 代码1 代码2 3.键盘笛卡尔方向控制(x.y.z) 4. 总结 通常情况下,对 ...

  9. ROS通信机制--键盘控制乌龟运动线速度角速度XYZ值的解释

    目录 前言 案例实现 线速度角速度X.Y.Z值的取值和作用 (END) 前言 在学习ros之初,想必大家运行的第一个案例就是键盘控制乌龟运动.这是ros内置的小案例,采用的通信机制为话题通信.本文介绍 ...

最新文章

  1. Ubuntu系统查看mongo得慢日志,及一些操作
  2. springboot 注解动态赋值_java springboot动态给注解属性参数赋值
  3. jzoj6313-Maja【dp】
  4. Python简介及环境搭建
  5. 日历控件如何切换语言 vant_看看甘特图控件VARCHART XGantt的亮点
  6. Windows Server 2008 R2 Server Core文件操作命令
  7. Flurry 统计(国际版)
  8. 伺服电机的工作原理是什么
  9. java神经网络该怎么训练_浅谈训练神经网络的五大算法
  10. 思科模拟器中配置单区域OSPF
  11. 有三顶红帽子和两顶蓝帽子逻辑推理
  12. python数据分析董付国ppt_Python数据分析、挖掘与可视化(慕课版) 董付国 著 / 人民邮电出版社...
  13. 【高等数学】-积分再现公式
  14. 青少年等级考试【Python通关干货】(一级)
  15. 阅文集团副总裁傅徐军:最佳技术架构选型方法论 1
  16. 【xml】xml命名空间的作用(为何mybatis的xml没有命名空间)
  17. C#中使用 HttpWebRequest 向网站提交数据
  18. 专访普林斯顿大学贡三元教授:做 AI 研究要有价值观,数学更是「制胜法宝」
  19. 跨链协议LayerZero和Gh0stly Gh0sts幽灵NFT技术原理分析
  20. docker安装tomcat8并实现目录映射端口映射

热门文章

  1. 郁金香delphi外挂编程(翻录版) 种子发布
  2. nopCommerce 介绍其它
  3. android toast 一直显示,android中toast无法显示问题
  4. 【数据库】01_sql语句
  5. 电机控制(2)直流电机的simulink仿真
  6. 在Linux系统如何识别和打开摄像头
  7. Win32的入口函数WinMain前面的WINAPI有什么意义?
  8. mac 破解百度网盘下载限速
  9. 网络共享 指定的服务器无法运行请求的操作,局域网共享访问故障及解决方案...
  10. AS第一次作业:实现APP门户界面框架设计