Konfiguracija ROS in uporaba brezžičnega krmilnika Xbox One
Ros Configuration Use Xbox One Wireless Controller
Okolje: Ubuntu16.04 + ROS kinetični
Namestite paket radosti
Paket joy ponuja gonilnik ROS za splošno igralno palico Linux. Vključuje vozlišče joy_node, ki omogoča igralni palici Linux interakcijo z ROS. To vozlišče objavi sporočilo 'Radost', ki vsebuje trenutno stanje vsakega gumba in osi krmilne palice.
Namestite ta paket veselja:
$ sudo apt-get install ros-kinetic-joy
Konfigurirajte brezžični krmilnik Xbox One
Po namestitvi najprej priključite krmilnik na računalnik s kablom USB in preizkusite, ali lahko Linux prepozna vaš igralni krmilnik pod žično povezavo.
$ ls /dev/input/
Videli boste seznam vseh vhodnih naprav. Če se prikaže jsX (v mojem računalniku je prikazan js0), to pomeni, da je Linux uspešno prepoznal vaš gamepad.
Preizkusite spodnji ročaj:
sudo jstest /dev/input/jsX
V terminalu boste videli izhodne informacije ročice, spremembe podatkov pa lahko vidite s premikanjem ročice.
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
Indeks, ki ustreza vsakemu gumbu in osi, najdete v http://wiki.ros.org/joy Ugotovljeno, seveda lahko tudi neposredno preizkusite.
Nato, če želimo, da vozlišče_v vozlišču ROS uporablja ročico, moramo spremeniti dovoljenja ročice.
$ ls -l /dev/input/jsX
Videli boste izhod, podoben temu:
crw-rw-XX-+ 1 root input 13, 0 9month 12 14:45 /dev/input/js0
Če je XX rw, je konfiguracija naprave uspešna.
Če je XX - ali drugače, to pomeni, da konfiguracija ni uspešna, morate:
$ sudo chmod a+rw /dev/input/jsX
Zaženite vozlišče joy_node
Če želite objaviti podatke krmilnika na ROS, moramo v paketu radosti zagnati vozlišče joy_node. Najprej moramo nastaviti parameter imena naprave na trenutno ime naprave, ki je privzeto js0.
$ roscore $ rosparam set joy_node/dev '/dev/input/jsX'
Nato lahko zaženete vozlišče joy_node:
$ rosrun joy joy_node
Izhod terminala je naslednji:
Nato ga uporabite v novem terminalu rostopic echo
Oglejte si podatke o temi veselja:
rostopic echo joy
Premaknite krmilnik, videli boste, da se podatki nenehno spreminjajo, kar kaže na uspešno konfiguracijo žičnega krmilnika.
Brezžična povezava Bluetooth
Vklopite Bluetooth na Ubuntu 16.04 in poiščite povezavo Xbox Wireless Controller.
Če Bluetooth pade takoj po povezavi, lahko poskusite naslednje:
- V terminalu zaženite naslednji ukaz
sudo apt-get update sudo apt-get install build-essential linux-headers-generic
Prenesite to repo Zip datoteko, razpakirajte na namizje
Spremenite trenutni delovni imenik terminala v razpakiran imenik
V terminalu zaženite naslednji ukaz
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
- spremeni
/etc/modules
Datoteka, dodaj to vrstico
rtbth
- Izhod, ponovni zagon
Preskušanje in umerjanje
jstest-gtk je orodje, ki lahko preizkusi ročaj, lahko pokaže, kateri gumb in os je pritisnjen, lahko kalibrira in ponovno nastavi indeks vsakega gumba za ročaj
- Namestite jstest-gtk:
sudo apt-get install jstest-gtk
- V terminal vnesite naslednji ukaz, da odprete GUI jstest-gtk:
$ jstest-gtk
- Za preizkus kliknite gumb lastnosti
Krmilnik Xbox One brezžično nadzoruje želvo v želvi
Ustvarite paket v delovnem prostoru catkin
$ cd ~/catkin_ws/src $ catkin_create_pkg learning_joy roscpp turtlesim joy $ cd ~/catkin_ws/ $ catkin_make
Napišite vozlišče
Ustvari datoteko turtle_teleop_joy.cpp pod learning_joy / src /.
#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() }
Sestavite in zaženite
V CMakeLists.txt dodajte naslednjo vrstico:
add_executable(turtle_teleop_joy src/turtle_teleop_joy.cpp) target_link_libraries(turtle_teleop_joy ${catkin_LIBRARIES})
Ustvarite zagonsko mapo in ustvarite novo zagonsko datoteko 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>
Ne pozabite na catkin_make.
Zadnji korak, zagon!
$ roslaunch learning_joy turtle_joy.launch
Premaknite igralno ploščico, vidite želvo, kako se premika.
Reference
http://wiki.ros.org/joy/Tutorials/ConfiguringALinuxJoystick
https://www.quora.com/How-do-I-fix-Ubuntu-16-04-Bluetooth-issues
http://wiki.ros.org/joy/Tutorials/WritingTeleopNode
Dobrodošli, da ste pozorni na mojo javno številko