配置微软Xbox One手柄到ROS实现通讯控制
环境: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实现通讯控制相关推荐
- 基于QT读取微软xbox ones 手柄消息并写入文件
具体代码已经上传资源,可供下载.https://download.csdn.net/download/qq_34935373/11430248 项目结构如下: .pro文件如下 #---------- ...
- Ubuntu20.04下 PC机对Locobot机器人的ROS远程通讯
写在最前面: 最近参加了机器人导航的项目,前前后后配了好几次的ROS远程通讯,在这里把步骤.遇到的问题.教程什么的都汇总一下. 先明确我们要做的事情--实现在我们自己的PC机(之后简称Moni ...
- linux安装xbox无线手柄,ROS配置和使用Xbox One无线手柄
标签: ROS配置和使用Xbox One无线手柄 环境:Ubuntu16.04 + ROS kinetic 安装joy package joy package为通用的Linux操纵杆提供了ROS驱动, ...
- ROS与Arduino:用Twist消息+用键盘+用Xbox one手柄 控制小车
ros_arduino_brige功能包使用和安装这里就不多说了,详情点击 先看一下ros_arduino_brige功能包的文件系统 ├── README.md ├── ros_arduino_br ...
- xbox和微软是一个服务器吗,微软Xbox One X与同配置PC大比拼
微软明天就要正式发售Xbox One X这一款主机,目前国行版本的主机已经成功偷跑,从偷跑的情况来看,国行版本可通过某些手段享受到海外版一样的游戏服务,对于大部分的国内玩家来说国行版本的Xbox On ...
- xboxones手柄驱动_微软Xbox One S全数字版再次发售,1043元
IT之家12月18日消息 今年4月份微软发布了无光驱版Xbox One S,而在今年黑五期间,迎来大优惠.现在微软Xbox One S全数字版再次发售,价格比平时便宜整整100美元. 美国亚马逊新的交 ...
- 如何用Xbox手柄玩家玩java我的世界,在Gear VR上玩《我的世界》,怎么能少了微软Xbox手柄...
老手柄新平台,下月起Xbox One手柄可支持Gear VR. 这款和微软Xbox One S一起到来的Xbox无线手柄内置蓝牙,能够与安卓手机连接.所以微软才有机会和三星GearVR"联姻 ...
- 微软推出新版Xbox One手柄 配对更迅速
如果你也遇到过Xbox One手柄无故失联的问题,那么微软最新推出的手柄固件更新对你来说应该是一个好消息,而这应该也是自Xbox One发布以来微软推出的第三次手柄固件更新. 据悉,本次更新将着重解决 ...
- 微软xbox服务器切换,微软 Xbox Series X/S切换手柄功能操作步骤教程
[惠美优普]数码资讯 对于那些使用 Xbox Series X / S 手柄进行游戏的人来说,可以轻松地在 Xbox.PC 和移动设备之间切换手柄是个不错的功能. 其实,该功能一直就有. 早在几个月前 ...
最新文章
- vue element upload 控件用form-data上传方式导入xls文件
- C#操作FTP报错,远程服务器返回错误:(550)文件不可用(例如,未找到文件,无法访问文件)的解决方法
- 语言专升本必背代码_2020年【山西省专升本】,专升本专业与考试科目,专升本招生院校,专升本报名流程大全!...
- php防止重复结算问题_PHP 编写关系到财务这样重要的系统,设计应该每次变动都算账,还是月底统一算账?...
- 消息队列RocketMQ应对双十一流量洪峰的“六大武器”
- 数据库连接oracle 10g rman 备份与恢复 之一
- [转]EXCEL截取字符串中某几位的函数——LeftMIDRight及Find函数的使用
- django模型查询
- python 怎么样才有output_[学]Python用户手册笔记_4_Input and Output
- C++编程中const和#define的区别
- 从何润东代言团宝,看团购行业逐渐成熟
- HackTheBox -- RedPanda
- java学习练习预埋件配筋计算
- c语言填空题库,C语言题库(填空题部分)
- 【热门主题:动漫进击巨人xp主题】
- 解决C:\Users\Admin\AppData\Roaming\npm\nodemon.ps1
- 1995-2020年国泰安并购重组数据库
- 初中物理浮力教学思考推荐
- panic和recover的使用规则
- POJ 1637 混合图的欧拉回路 + Dinic
热门文章
- 奥比中光深度摄像头_奥比中光深度摄像头NiViewer.exe
- 一起认识下浏览器的5种观察器
- 彻底理解unity里的Time.deltatime
- 实现一下类似百度网盘的预览功能:支持Word、Excel、Ppt
- Focusky教程 | 如何自动播放Focusky多媒体演示作品?
- Google Earth Engine(GEE)——上传数据和数据下载详解
- 自我绊倒的面试——顾建荣(摘自《微软360度》
- 公共英语试题计算机,会计学公共课试题 计算机、英语 政治.doc
- 小米十年,难凉热血。回看雷军在演讲中没说的人和事
- 嵌入式实践教程--设备树下的I2C驱动开发