这段时间从底层软硬件搭好了一辆差速磁导寻迹小车,鉴于一些场地无法铺设磁道,需要别的控制设备给车轮电机驱动器发送运动指令,恰好实验室闲置一个罗技F710游戏手柄,而且该手柄在ROS环境下有相关的包可以调用。后来参考CSDN上两位博主的文章,终于实现小车的遥控控制。具体实现步骤如下:

<1> 安装ROS的joy包 和joystick_driver包,操作码如下:

sudo apt-get install ros-kinetic-joy
sudo apt-get install ros-kinetic-joystick-drivers

<2> 在电脑上插上手柄的USB信号接收器,使用ctr+alt+t打开一个cmd控制台窗口,使用roscore指令激活一个节点管理器master,再打开另一个窗口,输入如下代码,打开joy包的joy节点。

rosrun joy joy_node

  可以看到,打开节点后会报一些错误,但是并不影响使用。

<3> 使用rostopic echo指令打印joy话题的实时数据,手柄的按钮和遥杆每次被操作都会更新数据。

rostopic echo /joy

  从上图可以看出,手柄的按钮和摇杆数据被存储在两个数组中:12个元素的buttons数组(int类型)和6个元素的axes数组(float类型),那各数组位对应在手柄上的实际按钮或摇杆位置在哪里呢?经过一番测试,现把正确的按钮和摇杆序号展示如下(注意:网上一些标识是错误的,这个坑我栽过,你们就别再栽进去了)。

特别说明一下:

① 蓝色箭头和数字表示按钮(buttons),红色箭头和数字表示摇杆(axes);

② 按钮按下输出1,不按输出0。蓝色序号10和11按下是按钮,推动是摇杆;

③ 摇杆正推到位输出+1,反推到位输出-1。

④ 摇杆<2>和<3>可以在+1和-1之间无极调节(精确到小数点后18位),如下图,而其他摇杆只有三种状态输出:+1.0,0.0,-1.0。

<3> 写程序订阅“joy”话题,获取相关buttons和axes的数据,即可将手柄作为控制源,控制小车前行、后退、左转和右转,如果驱动器支持速度模式,还能实现小车的无极调速。如下,附上本项目的手柄控制源码:

#include<ros/ros.h>
#include<geometry_msgs/Twist.h>
#include <sensor_msgs/Joy.h>
#include<iostream>
using namespace std;class Teleop
{
public:Teleop();private:/* data */void callback(const sensor_msgs::Joy::ConstPtr& Joy);ros::NodeHandle n;ros::Subscriber sub ;ros::Publisher pub ;double vlinear,vangular;int axis_ang,axis_lin,ton;
};Teleop::Teleop()
{n.param<int>("axis_linear",axis_lin,3);n.param<int>("axis_angular",axis_ang,2);n.param<double>("vel_linear",vlinear,0.08);n.param<double>("vel_angular",vangular,0.15);n.param<int>("button",ton,5);pub = n.advertise<geometry_msgs::Twist>("/velocity_controller/cmd_vel",1);sub = n.subscribe<sensor_msgs::Joy>("joy",10,&Teleop::callback,this);
}void Teleop::callback(const sensor_msgs::Joy::ConstPtr& Joy)
{geometry_msgs::Twist v;if(Joy->buttons[ton]){v.linear.x =(Joy->axes[axis_lin])*vlinear;v.angular.z = - (Joy->axes[axis_ang])*vangular;ROS_INFO("linear:%.3lf   angular:%.3lf",v.linear.x,v.angular.z);pub.publish(v);}
}int main(int argc,char** argv)
{ros::init(argc, argv, "joy");Teleop telelog;ros::spin();return 0;
}

  "/velocity_controller/cmd_vel"是本项目小车驱动器的速度接收话题,速度指令经过计算后 pub到这个话题中,驱动器接收指令就可以驱动电机运动。

  编译后,先运行joy包的joy_node节点,然后启动如上源码编译后的节点,就可以遥控小车了。但需要说明一下,这里做了一个防误操作设定,需要先按下5号按钮,然后再摇动2和3号摇杆,才能控制小车运动。

  最后,感谢这两位博主的文章,帮我解决了这个实际控制中遇到的问题。

  https://blog.csdn.net/u014587147/article/details/75673110

  https://blog.csdn.net/p942005405/article/details/86560145

[002] ROS+罗技F710游戏手柄,实现小车遥控控制相关推荐

  1. 罗技F710手柄描述符数据抓包 - 以及stm32读取usb-hid数据程序

    硬件: 罗技F710游戏手柄.一台笔记本电脑 软件: USBlyzer分析仪(下载地址) 大家都知道,罗技F710上有D模式和X模式,D模式是普通模式,每帧数据传输8个字节:X模式是xbox手柄模式, ...

  2. 传感器的使用_手柄_3、ros使用罗技f710无线控制手柄

    罗技F710无线控制手柄ROS下使用说明 1.安装手柄相关的包和驱动 sudo apt-get install ros-indigo-joy(ROS相关项,Jetson TK1只安装这一个)sudo ...

  3. ROS下的罗技F710通信

    1.实验环境:ubuntu16.04 ROS-kinetic 2.实验器材:罗技f710 3.操控手柄发出数据,控制小乌龟 #include <ros/ros.h> #include &l ...

  4. 罗技F710手柄使用教程-ROS

    罗技F710手柄使用教程 列出手柄的设备号,一般以joy开头 ls /dev/input/ 2. 查看手柄输入数据 安装joy包: sudo apt-get install ros-kinetic-j ...

  5. ROS 罗技手柄控制机器人(仿真和实体机器人)

    20210615更新 测试的时候发现一个问题,之前代码的逻辑是每次按一下摇柄就发一个命令,但是如果一直按着摇柄往一个方向,也是发送一次命令,摇柄转到其他方向,信号发生变化才再次发送一个速度命令,这点其 ...

  6. 罗技F710使用笔记

    罗技F710使用笔记 引言 ROS中使用手柄 查看手柄按键的定义 引言 移动机器人仿真或者实物控制中,经常要使用手柄来控制机器人,发布速度指令或其它的命令.以前用的时候会遇到过一些小问题,最近回忆记录 ...

  7. 解决windows 10 Pro无法识别罗技F710无线手柄的问题

    友链 微信搜索我吃你家米了关注公众号 使用windows自带的设备管理器,找到罗技F710手柄,右键更新驱动程序,然后选择手动浏览,自己选择,最后选择xbox360外设就行了

  8. 关于ros仿真智能避障小车

    ros仿真智能避障小车 软件:gazebo rviz https://www.bilibili.com/video/BV1Eg4y1q7Am?from=search&seid=12536238 ...

  9. 游戏手柄之自定义按钮控制海龟

    该文为基础上https://blog.csdn.net/qq_34935373/article/details/87905784 想通过游戏手柄自定义话题,自定义按键实现对海龟的控制.于是有了本文 新 ...

最新文章

  1. 剑指offer:包含min函数的栈 python实现
  2. 华为:憧憬6G,共同定义6G
  3. Python 实现循环的最快方式(for、while 等速度对比)
  4. Java如何根据IP获取当前定位
  5. android 代码 shape,Android Shape控件美化实现代码
  6. elementUI 分页组件Bug ,为什么会 infinity ?
  7. C#LeetCode刷题之#111-二叉树的最小深度​​​​​​​(Minimum Depth of Binary Tree)
  8. 开发者的福利,报名即可领取代金券,赢运动手环
  9. 【elasticsearch】如何部分更新文档 (partial update的使用)
  10. php如何增加字段,php如何增加字段
  11. html 显示文本字段,HTML文本框和文本字段样式_五五站长网
  12. 检查计算机无法更新,Win7提示Windows Update当前无法检查更新,因为未运行服务解决方法...
  13. 日拱一卒.操作系统基础知识点梳理
  14. 奥林匹克计算机竞赛保送,奥数再见!清北保送生为什么都选信息学奥赛
  15. 2014年4月清明节厦门之旅
  16. 第006天:APP的数据存储技术
  17. java实现bitmap签到,BITMAP实现签到
  18. Vicor PI3741 DC-DC电源转换模块让旅行电动自行车行更远
  19. 推荐系统冷启动问题及解决
  20. “百思不得姐,满满的干货

热门文章

  1. 1.0 HCIA回顾——数据通信原理
  2. 一篇文章带你搞定 SpringBoot 上传文件(单文件/多文件/Ajax上传)
  3. 播音主持初学者正确练声方法
  4. 关于Google AdWords的网站链接的10个特点
  5. python:pyecharts地图功能,并解决显示不全或只显示南海诸岛问题解决,其实很简单
  6. note_35:Image Asset和mipmap-anydpi-v26
  7. Directional Shadow Details 平行光阴影细节
  8. 创建steam账户反复人机验证_您必须先通过人机验证才能创建steam帐户怎么办
  9. Meta for Mac(专业的音乐标签编辑器)
  10. (附源码)计算机毕业设计JavaJava毕设项目珠宝首饰进销存管理系统