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内置的小案例,采用的通信机制为话题通信.本文介绍 ...
最新文章
- like模糊查询是否走索引
- 别再用 kill -9 了,这才是微服务上下线的正确姿势!
- 面试题----寻找比一个N位数大的“下”一个数
- python合并多个excel为一个_Python合并多个Excel数据
- 大学生如何进化到程序猿
- 产品经理学PMP,有必要吗?
- PHP设计模式 -- 策略模式
- 手游开发者交流会议暨OGEngine新版发布
- bat批处理教程 24
- 开发pc页面_干货分享:2020年Web前端开发学习路线图
- MYSQL 碎片查询
- 转四种常见的post请求
- 在官网下载最新版Java
- 计算机网络课后作业习题1
- win10 C盘优化清理
- 阿里云服务器ECS和VPS主机的区别在哪里
- 教你一个免费白嫖域名的方法
- python直方图教程_Matplotlib绘制直方图
- sqlserver排序规则介绍以及修改
- PHP修改图片像素大小