XboxOneワイヤレスコントローラーのROS構成と使用
Ros Configuration Use Xbox One Wireless Controller
環境:Ubuntu16.04 + ROSキネティック
ジョイパッケージをインストールする
joyパッケージは、一般的なLinuxジョイスティック用のROSドライバーを提供します。これには、LinuxジョイスティックがROSと対話できるようにするjoy_nodeノードが含まれています。このノードは、ジョイスティックの各ボタンと軸の現在の状態を含む「ジョイ」メッセージを公開します。
このjoyパッケージをインストールします。
$ sudo apt-get install ros-kinetic-joy
XboxOneワイヤレスコントローラーを構成する
インストール後、まずコントローラーをUSBケーブルでコンピューターに接続し、Linuxが有線接続でゲームコントローラーを認識できるかどうかをテストします。
$ ls /dev/input/
すべての入力デバイスのリストが表示されます。 jsXが表示される(js0がコンピューターに表示されている)場合は、Linuxがゲームパッドを正常に認識したことを意味します。
以下のハンドルをテストします。
sudo jstest /dev/input/jsX
ターミナルにハンドルの出力情報が表示され、ハンドルを動かすことでデータの変化を確認できます。
Axes: 0: 1982 1: 894 2:-32767 3: 392 4: 438 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off
各ボタンと軸に対応するインデックスは、にあります。 http://wiki.ros.org/joy もちろん、直接試すこともできます。
次に、ROSノードのjoy_nodeにハンドルを使用させるには、ハンドルの権限を変更する必要があります。
$ ls -l /dev/input/jsX
次のような出力が表示されます。
crw-rw-XX-+ 1 root input 13, 0 9month 12 14:45 /dev/input/js0
XXがrwの場合、デバイス構成は成功しています。
XXが–またはその他の場合、構成が成功していないことを意味します。次のことを行う必要があります。
$ sudo chmod a+rw /dev/input/jsX
joy_nodeノードを開始します
コントローラのデータをROSで公開するには、joyパッケージでjoy_nodeノードを起動する必要があります。まず、デバイス名パラメーターを現在のデバイス名に設定する必要があります。デフォルトはjs0です。
$ roscore $ rosparam set joy_node/dev '/dev/input/jsX'
次に、joy_nodeノードを開始できます。
$ rosrun joy joy_node
端末の出力は次のとおりです。
次に、新しいターミナルで使用しますrostopic echo
喜びのトピックに関するデータを表示します。
rostopic echo joy
コントローラーを移動すると、データが絶えず変化していることがわかります。これは、コントローラーの有線構成が成功したことを示しています。
Bluetoothワイヤレス接続
Ubuntu 16.04でBluetoothをオンにして、Xboxワイヤレスコントローラーの接続を見つけます。
接続直後にBluetoothが切断された場合は、次の手順を試すことができます。
- ターミナルで次のコマンドを実行します
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のタートルをワイヤレスで制御します
catkinワークスペースでパッケージを作成します
$ cd ~/catkin_ws/src $ catkin_create_pkg learning_joy roscpp turtlesim joy $ cd ~/catkin_ws/ $ catkin_make
ノードを書く
Learning_joy / src /の下にファイルturtle_teleop_joy.cppを作成します。
#include #include #include // 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('turtle1/cmd_vel', 1) // subscribe to the joystick topic for the input to drive the turtle joy_sub_ = nh_.subscribe('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.txtに追加します。
add_executable(turtle_teleop_joy src/turtle_teleop_joy.cpp) target_link_libraries(turtle_teleop_joy ${catkin_LIBRARIES})
起動フォルダーを作成し、新しい起動ファイルturtle_joy.launchを作成します。
<launch> <node pkg='turtlesim' type='turtlesim_node' name='sim'/> <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> <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>
catkin_makeを忘れないでください。
最後のステップ、ローンチ!
$ roslaunch learning_joy turtle_joy.launch
ゲームパッドを動かすと、カメが動いているのがわかります。
参考文献
http://wiki.ros.org/joy/Tutorials/ConfigureALinuxJoystick
https://www.quora.com/How-do-I-fix-Ubuntu-16-04-Bluetooth-issues
http://wiki.ros.org/joy/Tutorials/WritingTeleopNode
私の公開番号に注意を払うことを歓迎します