环境:Ubuntu16.04 + ROS kinetic

安装joy package

joy package为通用的Linux操纵杆提供了ROS驱动,它包括了一个joy_node节点,可以让Linux操纵杆和ROS交互.这个节点发布一个”Joy”消息,包含了操纵杆每一个按钮和轴的当前状态.

安装这个joy package:

sudo apt-get install ros-kinetic-joy

配置Xbox One无线手柄
安装好后先用usb线将手柄与电脑连接,测试有线连接的情况下,Linux是否能够识别你的游戏手柄.

ls /dev/input/

你会看到所有输入设备的列表,如果出现了jsX的话(在我的电脑中显示的是js0),说明Linux成功识别了你的游戏手柄.

下面对手柄进行初步的测试:在终端输入以下命令
设备名是jx0的话,就把下面命令的X改为0

sudo jstest /dev/input/jsX

随便按一些键,会看到数据的变化和快速的刷新

在Linux下每个键对应的索引在这个可以查下:http://wiki.ros.org/joy

接下来,要让ROS的节点joy_node可以使用手柄,我们需要更改手柄的权限.

ls -l /dev/input/jsX

你会看到跟这样类似的输出:

crw-rw-XX-+ 1 root input 13, 0 9月 12 14:45 /dev/input/js0

如果XX是rw的话,说明设备配置成功,像下面这个

如果XX是–或者其他的话,说明没有配置成功,你需要在终端运行下面这个命令:

sudo chmod a+rw /dev/input/jsX

启动joy_node节点
要使手柄的数据发布在ROS上,我们需要启动joy package中的joy_node节点.首先,我们需要将设备名这个参数设置为当前的设备名,默认为js0.

roscore
rosparam set joy_node/dev "/dev/input/jsX"

然后可以启动joy_node这个节点:

rosrun joy joy_node

终端的输出如下:

然后在新的终端用rostopic echo查看joy这个话题的数据:

rostopic echo joy

没按一次按键便刷新一次,大概如下图所示:

蓝牙无线连接
毕竟这个手柄是可以蓝牙的,我们再讲解一下蓝牙连接方式
打开Ubuntu16.04的蓝牙,找到Xbox Wireless Controller连接.

如果蓝牙连上之后马上掉线的话,可以尝试一下步骤,在终端输入:

sudo apt-get update
sudo apt-get install build-essential linux-headers-generic

在这里下载zip文件并解压到桌面
将终端的当前工作目录更改为解压的目录
在终端运行以下命令

make
sudo make install
sudo cp -r ~/Desktop/rtbth-dkms /usr/src/rtbth-3.9.3
sudo apt-get install dkms
sudo dkms install rtbth/3.9.3
sudo nano /etc/modules

修改/etc/modules文件,添加这一行后退出、重启

rtbth

测试和校准
jstest-gtk是一个可以测试手柄的工具,可以显示哪个按钮和轴被按下,可以校准和重新为手柄设置每个按钮的索引

  • 安装jstest-gtk:
sudo apt-get install jstest-gtk
  • 在终端输入以下命令,打开jstest-gtk的GUI:
jstest-gtk

点击属性按钮,可以进行测试

下面到了我们的小乌龟吉祥物示例

Xbox One手柄无线控制turtlesim中的小龟

创建工作空间,,然后运行ROS的工作空间初始化命令即可完成创建过程:
别忘了设置环境变量:

mkdir -p ~/catkin_handle/srccd ~/catkin_handle/srccatkin_init_workspace

在catkin工作空间创建一个package

cd ~/catkin_handle/src
catkin_create_pkg learning_joy roscpp turtlesim joy
cd ~/catkin_handle/
catkin_make

写一个节点
在learning_joy/src/下创建一个文件turtle_teleop_joy.cpp.

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
#include <sensor_msgs/Joy.h>// create the TeleopTurtle class and define the joyCallback function that will take a joy msg
class TeleopTurtle
{public:TeleopTurtle();private:void joyCallback(const sensor_msgs::Joy::ConstPtr& joy);ros::NodeHandle nh_;int linear_, angular_;   // used to define which axes of the joystick will control our turtledouble l_scale_, a_scale_;ros::Publisher vel_pub_;ros::Subscriber joy_sub_;};TeleopTurtle::TeleopTurtle(): linear_(1), angular_(2)
{//  initialize some parametersnh_.param("axis_linear", linear_, linear_);  nh_.param("axis_angular", angular_, angular_);nh_.param("scale_angular", a_scale_, a_scale_);nh_.param("scale_linear", l_scale_, l_scale_);// create a publisher that will advertise on the command_velocity topic of the turtlevel_pub_ = nh_.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1);// subscribe to the joystick topic for the input to drive the turtlejoy_sub_ = nh_.subscribe<sensor_msgs::Joy>("joy", 10, &TeleopTurtle::joyCallback, this);
}void TeleopTurtle::joyCallback(const sensor_msgs::Joy::ConstPtr& joy)
{geometry_msgs::Twist twist;// take the data from the joystick and manipulate it by scaling it and using independent axes to control the linear and angular velocities of the turtletwist.angular.z = a_scale_*joy->axes[angular_];twist.linear.x = l_scale_*joy->axes[linear_];vel_pub_.publish(twist);
}
int main(int argc, char** argv)
{// initialize our ROS node, create a teleop_turtle, and spin our node until Ctrl-C is pressedros::init(argc, argv, "teleop_turtle");TeleopTurtle teleop_turtle;ros::spin();
}

在CMakeLists.txt中加入以下行:

add_executable(turtle_teleop_joy src/turtle_teleop_joy.cpp)
target_link_libraries(turtle_teleop_joy ${catkin_LIBRARIES})

创建一个launch文件夹,并新建一个launch文件turtle_joy.launch

<launch><!-- Turtlesim Node--><node pkg="turtlesim" type="turtlesim_node" name="sim"/><!-- joy node --><node respawn="true" pkg="joy"type="joy_node" name="turtle_joy" ><param name="dev" type="string" value="/dev/input/jsX" /><param name="deadzone" value="0.12" /></node>
<!-- Axes --><param name="axis_linear" value="1" type="int"/><param name="axis_angular" value="0" type="int"/><param name="scale_linear" value="2" type="double"/><param name="scale_angular" value="2" type="double"/><node pkg="learning_joy" type="turtle_teleop_joy" name="teleop"/>
</launch>

最后运行roscore后运行launch命令

roslaunch learning_joy turtle_joy.launch

下面就可以用手柄控制了

配置微软Xbox One手柄到ROS实现通讯控制相关推荐

  1. 基于QT读取微软xbox ones 手柄消息并写入文件

    具体代码已经上传资源,可供下载.https://download.csdn.net/download/qq_34935373/11430248 项目结构如下: .pro文件如下 #---------- ...

  2. Ubuntu20.04下 PC机对Locobot机器人的ROS远程通讯

    写在最前面:   最近参加了机器人导航的项目,前前后后配了好几次的ROS远程通讯,在这里把步骤.遇到的问题.教程什么的都汇总一下.   先明确我们要做的事情--实现在我们自己的PC机(之后简称Moni ...

  3. linux安装xbox无线手柄,ROS配置和使用Xbox One无线手柄

    标签: ROS配置和使用Xbox One无线手柄 环境:Ubuntu16.04 + ROS kinetic 安装joy package joy package为通用的Linux操纵杆提供了ROS驱动, ...

  4. ROS与Arduino:用Twist消息+用键盘+用Xbox one手柄 控制小车

    ros_arduino_brige功能包使用和安装这里就不多说了,详情点击 先看一下ros_arduino_brige功能包的文件系统 ├── README.md ├── ros_arduino_br ...

  5. xbox和微软是一个服务器吗,微软Xbox One X与同配置PC大比拼

    微软明天就要正式发售Xbox One X这一款主机,目前国行版本的主机已经成功偷跑,从偷跑的情况来看,国行版本可通过某些手段享受到海外版一样的游戏服务,对于大部分的国内玩家来说国行版本的Xbox On ...

  6. xboxones手柄驱动_微软Xbox One S全数字版再次发售,1043元

    IT之家12月18日消息 今年4月份微软发布了无光驱版Xbox One S,而在今年黑五期间,迎来大优惠.现在微软Xbox One S全数字版再次发售,价格比平时便宜整整100美元. 美国亚马逊新的交 ...

  7. 如何用Xbox手柄玩家玩java我的世界,在Gear VR上玩《我的世界》,怎么能少了微软Xbox手柄...

    老手柄新平台,下月起Xbox One手柄可支持Gear VR. 这款和微软Xbox One S一起到来的Xbox无线手柄内置蓝牙,能够与安卓手机连接.所以微软才有机会和三星GearVR"联姻 ...

  8. 微软推出新版Xbox One手柄 配对更迅速

    如果你也遇到过Xbox One手柄无故失联的问题,那么微软最新推出的手柄固件更新对你来说应该是一个好消息,而这应该也是自Xbox One发布以来微软推出的第三次手柄固件更新. 据悉,本次更新将着重解决 ...

  9. 微软xbox服务器切换,微软 Xbox Series X/S切换手柄功能操作步骤教程

    [惠美优普]数码资讯 对于那些使用 Xbox Series X / S 手柄进行游戏的人来说,可以轻松地在 Xbox.PC 和移动设备之间切换手柄是个不错的功能. 其实,该功能一直就有. 早在几个月前 ...

最新文章

  1. vue element upload 控件用form-data上传方式导入xls文件
  2. C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
  3. 语言专升本必背代码_2020年【山西省专升本】,专升本专业与考试科目,专升本招生院校,专升本报名流程大全!...
  4. php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
  5. 消息队列RocketMQ应对双十一流量洪峰的“六大武器”
  6. 数据库连接oracle 10g rman 备份与恢复 之一
  7. [转]EXCEL截取字符串中某几位的函数——LeftMIDRight及Find函数的使用
  8. django模型查询
  9. python 怎么样才有output_[学]Python用户手册笔记_4_Input and Output
  10. C++编程中const和#define的区别
  11. 从何润东代言团宝,看团购行业逐渐成熟
  12. HackTheBox -- RedPanda
  13. java学习练习预埋件配筋计算
  14. c语言填空题库,C语言题库(填空题部分)
  15. 【热门主题:动漫进击巨人xp主题】
  16. 解决C:\Users\Admin\AppData\Roaming\npm\nodemon.ps1
  17. 1995-2020年国泰安并购重组数据库
  18. 初中物理浮力教学思考推荐
  19. panic和recover的使用规则
  20. POJ 1637 混合图的欧拉回路 + Dinic

热门文章

  1. 奥比中光深度摄像头_奥比中光深度摄像头NiViewer.exe
  2. 一起认识下浏览器的5种观察器
  3. 彻底理解unity里的Time.deltatime
  4. 实现一下类似百度网盘的预览功能:支持Word、Excel、Ppt
  5. Focusky教程 | 如何自动播放Focusky多媒体演示作品?
  6. Google Earth Engine(GEE)——上传数据和数据下载详解
  7. 自我绊倒的面试——顾建荣(摘自《微软360度》
  8. 公共英语试题计算机,会计学公共课试题 计算机、英语 政治.doc
  9. 小米十年,难凉热血。回看雷军在演讲中没说的人和事
  10. 嵌入式实践教程--设备树下的I2C驱动开发