微软Xbox One无线手柄控制机器人

  ROS中的joy包提供了游戏手柄的驱动,并且包含joy_node节点,这一节点可以发布包含手柄按钮和轴信息的Joy消息。在终端中输入下面命令,安装joy包:

$ sudo apt-get install ros-kinetic-joy

Configuring the Joystick

  安装好之后,将用USB线将手柄连上电脑,然后输入下面指令看看Linux能否找到设备:

$ ls /dev/input/

  通常会输出下面类似的信息:

by-id    event0  event2  event4  event6  event8  mouse0  mouse2  uinput
by-path  event1  event3  event5  event7  js0     mice    mouse1

  游戏手柄的名字一般为jsX,这里我们的手柄为js0,可以使用jstest命令来测试手柄:

$ sudo jstest /dev/input/js0

  按下手柄上不同的按钮或者移动摇杆,可以看到相应数据发生变化:

  接下来要让ROS节点joy_node能获取手柄信息,先列出手柄的权限( ls -l: 以长格式的形式查看当前目录下所有可见文件的详细属性):

$ ls -l /dev/input/js0

  将会看到下面类似的输出:

crw-rw-XX- 1 root dialout 188, 0 2009-08-14 12:04 /dev/input/jsX

  c表示该文件是一个字符设备文件(character),一般置于/dev目录下,一次传输一个字节的设备被称为字符设备,如键盘、字符终端等,传输数据的最小单位为一个字节。r代表具有可读权限;w代表具有可写权限;x代表具有可执行权限,- 代表无权限。其中前三个表示文件属主的权限,中间三个表示组用户权限,最后三个表示其他用户权限。

  如果XX为rw,表示js设备配置正确;如果XX为--表示设备没有配置正确,需要添加权限:

$ sudo chmod a+rw /dev/input/js0

Starting the Joy Node

  为了能发布joy消息我们需要运行joy_node节点,并且指定设备名,默认为js0(tell the joy node which joystick device to use the default is js0):

$ roscore
$ rosparam set joy_node/dev "/dev/input/js0"

  然后就可以运行joy_node节点:

$ rosrun joy joy_node

  如果运行成功,端中会显示下面的信息:

[ INFO] [1513180661.775001483]: Opened joystick: /dev/input/js0. deadzone_: 0.050000. 

  打开一个新终端,输入下面命令查看具体的joy消息:

$ rostopic echo joy

  sensor_msgs/Joy消息格式如下:

# Reports the state of a joysticks axes and buttons.
Header header           # timestamp in the header is the time the data is received from the joystick
float32[] axes          # the axes measurements from a joystick
int32[] buttons         # the buttons measurements from a joystick 

蓝牙无线连接

  打开Ubuntu16.04的蓝牙,查找到Xbox Wireless Controller后进行连接:

  不过在连接过程中遇到了一些问题,蓝牙一连上就掉了。下面这个方法可以解决这一问题:

  1. install

sudo apt install sysfsutils

  2. 以管理员权限用gedit打开sysfs.conf文件

sudo gedit /etc/sysfs.conf

  3. 在文件中加入下面一行:

module/bluetooth/parameters/disable_ertm = 1

  4. 保存文件然后重启电脑。开机后再次连接:

  待手柄上的指示灯常亮,用ls命令查看设备,可以看出js0已经安装好:

测试与校准

  JStest is a simple and useful tool that you can use to calibrate your controllers’ axis.

sudo apt-get install jstest-gtk

  输入下面命令打开jstest的GUI界面,选择已经连接上的Xbox One手柄

$ jstest-gtk

  点击Properties属性按钮,可以进行手柄测试:

Writing a Teleoperation Node for a Linux-Supported Joystick

  在工作空间中创建一个测试package:

$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_joy roscpp turtlesim joy
$ cd ~/catkin_ws/
$ catkin_make

  然后在package的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 turtle
  double l_scale_, a_scale_;
  ros::Publisher vel_pub_;
  ros::Subscriber joy_sub_;

};

TeleopTurtle::TeleopTurtle(): linear_(1), angular_(2)
{
  //  initialize some parameters
  nh_.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 turtle
  vel_pub_ = nh_.advertise<geometry_msgs::Twist>("turtle1/cmd_vel", 1);

  // subscribe to the joystick topic for the input to drive the turtle
  joy_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 turtle
  twist.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 pressed
  ros::init(argc, argv, "teleop_turtle");
  TeleopTurtle teleop_turtle;

  ros::spin();
}

  在CMakeLists中加入下面这两行:

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

  按照前面的操作连接并配置好手柄以后,在learning_joy目录下新建一个launch文件夹并在其中创建turtle_joy.launch文件(注意joystick设备名称要写对):

<launch>
 <!-- Turtlesim Node-->
  <node pkg="turtlesim" type="turtlesim_node" name="sim"/>

 <!-- joy node -->
  <node pkg="joy" type="joy_node" name="turtle_joy" respawn="true">
    <param name="dev" type="string" value="/dev/input/js0" />
    <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>

  编译好之后执行下面的命令,可以开启3个节点(turtlesim_node海龟仿真节点、joy_node发布手柄消息节点、turtle_teleop_joy订阅手柄消息并发布turtle1/cmd_vel消息节点),实现用手柄控制海龟运动:

roslaunch learning_joy turtle_joy.launch 

  用手柄上的左摇杆(下图中的1)来控制海龟:Up/Down Axis控制前进和后退;Left/Right Axis控制左转和右转

参考:

joy

teleop_twist_joy

WIN10怎样校准和设置游戏手柄

如何将 Xbox One 无线控制器连接到 Windows PC

Get to know your Xbox One Wireless Controller

How to Set Up an Xbox One Controller in Ubuntu

How do I get an Xbox One controller to work with 16.04

Configuring and Using a Linux-Supported Joystick with ROS

Writing a Teleoperation Node for a Linux-Supported Joystick

时间: 2024-11-08 18:55:13

微软Xbox One无线手柄控制机器人的相关文章

未出先砍,微软Xbox One停止加入电视DVR功能

根据外媒The Verge的报道,微软将不再为Xbox One添加电视DVR功能.微软最初在去年8月的Gamescom科隆游戏展上宣布为Xbox One添加电视DVR功能,并在当时指出该功能会在2016年推出.但现在,微软经过慎重考虑,决定停止电视DVR功能,将精力集中到为Xbox One和Windows10推出全新的.用户需求量高的游戏体验上. 微软发言人表示,他们一直在倾听用户的反馈,期待在今年为Xbox One.Win10和Xbox LIVE带来更多用户要求的体验.微软原本计划让Xbox

微软Xbox One大作《光环5》首周销售额超4亿美元

微软已经正式公布Xbox One第一方大作<365bet>首周销售成绩,营收已经超过4亿美元,包括游戏和相关周边硬件,推动<光环>系列游戏总营收超过50亿美元. 不过微软并没有公布<光环5:守护者>首周游戏副本的具体销量,可能也包括光环5同绑Xbox One主机板.微软公司表示: “在本周我们迎来了Xbox One第一大作,成为Xbox One上最流行的游戏,包括Xbox Live访问.游戏时间已经超过2100万小时,包括1200万小时的战役模式.广受赞誉的多人游戏模式

告别适配器:微软推Win10 Xbox Wireless平台

9月28日消息,喜欢玩游戏的网友都知道,要想在Windows PC平台上用Xbox手柄玩游戏的话,都需要使用一个无线适配器,现在微软计划推出一个Xbox Wireless平台,从此以后就不再需要适配器了. 微软的做法是将Xbox Wireless无线平台内置到游戏PC中,而老 虎机IdeaCentre Y710 Cube则成为了首款支持该平台的电脑,具体来说就是该电脑无需额外的适配器或设备,便可直接兼容所有的Xbox One无线配件.微软表示,在不久之后,将会有更多品牌的电脑及配件支持Xbox

百视通与微软共同宣布9月在华发布Xbox One

4月30日消息,百视通今日与微软共同宣布,于今年9月在华发布Xbox One.这是继百视通与微软2013年9月成立合资公司后,双方合作的又一进展. 微软副总裁,硬件及设计工作室部门主管尤瑟夫 ?梅赫迪(Yusuf Mehdi)表示:"Xbox One登陆中国对于微软及整个行业是重要里程碑,百视通是微软Xbox 业务中国最佳伙伴." "Xbox正式在中国落地发售,标志着Xbox将成为国内率先发布的具备"家庭娱乐中心"功能的游戏机."百家合董事长张大

Xbox One发布至今已给微软带来超4亿美元亏损

8 月 11 日,微软日前向美国证券交易委员会提交的 2014 财年年报显示,自去年 11 月发布 Xbox One 视频游戏机至今,该产品已累计给微软带来了超过 4 亿美元的亏损. 微软年报提供的数据显示,由于发布 Xbox One 带来的制造和广告支出,导致公司 Xbox 业务出现了大幅的亏损.报告显示,微软在 2014 财年共出售了 1170 万台 Xbox One,帮助公司的营收增加了 17 亿美元.不过微软为制造和发售 Xbox One,总计花费了 21 亿美元. 微软在报告中表示,“

微软裁员关闭Xbox娱乐工作室,波及电视剧

微软已经确认将关闭Xbox娱乐工作室,作为微软大裁员的一部分,接下来几个月内执行. Xbox娱乐工作室主要是负责电视原创剧Xbox Originals的计划,包括电视剧.喜剧.纪录片.动画片.无剧本演出和现场直播.Xbox Originals上个月推出了Every Street United街头足球节目,正赶在世界杯之前投放.但根据Xbox老大Phil Spencer的内部邮件,Halo电视剧.Halo数字故事片和Signal to Noise将继续制作,其他节目将取消. 如今,微软Xbox部门

XBOX One入华首秀受挫,源于定位失败

上海自贸区开张后不久,终于解除了长达十几年的游戏机禁令,XBOX One高调入华,在中国最大的游戏展会China Joy上公布了发售日期.售价以及配置详情.3699元的但主机版以及4299元的"with kinect版"一经公布,便引来诸多关注. 从微软公布的游戏来看,除了一些欧美传统游戏以外,本地化也是一大特色,完美世界.腾讯等企业都拿出了旗下的网游以及休闲游戏产品.但是,如此注重本地化的微软究竟能不能让XBOX One在中国市场上扎根成长呢?事实是XBOX One在中国首秀的第一天

XBox 开发者大会

今天参加了微软的Xbox开发者大会,虽然没我什么事情,不过还是有不少的收获,随便说说自己的一点感受吧. 先上几张图,附带妹子一个,不过手机不清楚哈,~~ 1 [email protected]开发者计划与独立游戏开发者 微软XBOX从开始进入中国那一刻起,就同时启动了开发者计划,今天数据提到从8月份到10月总共收到300(内地还是全球忘记了)多份申请书.对于开发者,微软除了在2台开发主机.技术资料.社区.推广等帮助外,还会面向独立开发着提供场地.资金.宣传等等,让人听起来很有诱惑力. 活动开始的

Xbox One将点燃中国玩家内心激情

自从微软涉足硬件业开始,就并不是那么一帆风顺,旗下的智能平板Surface由于定价过高,一直处于曲高和寡的境地.不过10年前进军家用游戏产业以后,微软倒是如鱼得水,XBOX360在全球范围都取得了极大的成功.虽然一直没有正式登陆中国内地,但在内地仍然拥有一大批拥护者以及铁杆玩家. 上海自贸区建立之后,游戏机在中国内地解禁,在家用游戏机产业三大巨头中,微软凭借与中国政府的良好关系,率先把旗下最新的Xbox One带到内地.微软不仅表现最为积极,还高调宣布9月23日正式在国内上市并由京东预售.虽然4