Arduino使用ROS通过键盘控制单个直流电机
我这边需要使用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通过键盘控制单个直流电机相关推荐
- [转]基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动
原文出处: https://blog.csdn.net/Forrest_Z/article/details/55002484 准备工作 1.下载串口通信的ROS包 (1)cd ~/catkin_ws/ ...
- ROS中键盘控制节点功能包下载(下载过程中git时出现拒绝连接的最终处理办法)
在ros中运行sudo teleop_twist_keyboard teleop_twist_keyboard.py时,出现找不到功能包错误,如下 解决问题过程: 1.首先,我现在文件中搜一下这个功能 ...
- ROS小车打造(12)--Arduino订阅cmd_vel实现差速控制
基本思路: 上一篇已经能实现arduino对ROS节点的订阅与发布,所以只要订阅到ROS的移动控制消息,并把它转换为小车的移动命令即可实现ROS对小车的移动驱动. ROS小车打造(十一)--ardui ...
- ROS键盘控制机器人
目录 前言&&过程分析 第一步 第二步 第三步 第四步 PC端(上位机)代码 远程机器人(下位机)代码 前言&&过程分析 当我们需要使用键盘控制机器人的时候,通常,分为 ...
- ROS探索总结(七)(八)(九)——smartcar源码上传 键盘控制 操作杆控制
ROS探索总结(七)--smartcar源码上传 看到前面写的博客还是帮助了很多ROS的学习者,我感到非常荣幸.其实我也是一名ROS的新手,ROS的相关资料少,上手难度大,我现在也在摸索着学习,还希望 ...
- 多车调度问题(大疆Robot Master)——ROS键盘控制失灵,小车无法收敛定位,路径规划出错
问题1 ROS键盘控制小车失灵 具体就是:用键盘左右转小车,速度贼快,而且方向不正确,检查发现是控制模块失灵,有可能是内部测量元件(陀螺仪等)烧了,换了个控制模块解决. 问题2 小车无法收敛定位 具体 ...
- 关于ROS+Gazebo通过cmd_vel或键盘控制节点发布速度消息时,仿真小车运动速度相反问题
本人初学ros,在做仿真小车的时候,通过soildworks2018建立四轮小车模型,并通过插件soildworks to urdf导出urdf文件. 将该文件移入虚拟机中,并将urdf修改为xacr ...
- ROS机器人控制 —— 键盘方向控制
文章目录 1. 键盘控制C++实现(x.y.z.theta) 2. 键盘控制Python实现(x.y.z.theta) 代码1 代码2 3.键盘笛卡尔方向控制(x.y.z) 4. 总结 通常情况下,对 ...
- ROS通信机制--键盘控制乌龟运动线速度角速度XYZ值的解释
目录 前言 案例实现 线速度角速度X.Y.Z值的取值和作用 (END) 前言 在学习ros之初,想必大家运行的第一个案例就是键盘控制乌龟运动.这是ros内置的小案例,采用的通信机制为话题通信.本文介绍 ...
最新文章
- Ubuntu系统查看mongo得慢日志,及一些操作
- springboot 注解动态赋值_java springboot动态给注解属性参数赋值
- jzoj6313-Maja【dp】
- Python简介及环境搭建
- 日历控件如何切换语言 vant_看看甘特图控件VARCHART XGantt的亮点
- Windows Server 2008 R2 Server Core文件操作命令
- Flurry 统计(国际版)
- 伺服电机的工作原理是什么
- java神经网络该怎么训练_浅谈训练神经网络的五大算法
- 思科模拟器中配置单区域OSPF
- 有三顶红帽子和两顶蓝帽子逻辑推理
- python数据分析董付国ppt_Python数据分析、挖掘与可视化(慕课版) 董付国 著 / 人民邮电出版社...
- 【高等数学】-积分再现公式
- 青少年等级考试【Python通关干货】(一级)
- 阅文集团副总裁傅徐军:最佳技术架构选型方法论 1
- 【xml】xml命名空间的作用(为何mybatis的xml没有命名空间)
- C#中使用 HttpWebRequest 向网站提交数据
- 专访普林斯顿大学贡三元教授:做 AI 研究要有价值观,数学更是「制胜法宝」
- 跨链协议LayerZero和Gh0stly Gh0sts幽灵NFT技术原理分析
- docker安装tomcat8并实现目录映射端口映射
热门文章
- 郁金香delphi外挂编程(翻录版) 种子发布
- nopCommerce 介绍其它
- android toast 一直显示,android中toast无法显示问题
- 【数据库】01_sql语句
- 电机控制(2)直流电机的simulink仿真
- 在Linux系统如何识别和打开摄像头
- Win32的入口函数WinMain前面的WINAPI有什么意义?
- mac 破解百度网盘下载限速
- 网络共享 指定的服务器无法运行请求的操作,局域网共享访问故障及解决方案...
- AS第一次作业:实现APP门户界面框架设计