## Teleoperating Stretch ### Xbox Controller Teleoperating If you have not already had a look at the [Xbox Controller Teleoperation](https://docs.hello-robot.com/0.2/stretch-tutorials/getting_started/quick_start_guide_re2/#hello-world-demo) section in the Quick Start guide, now might be a good time to try it. ### Keyboard Teleoperating: Full Body For full-body teleoperation with the keyboard, you first need to run the `stretch_driver.launch` in a terminal. ```{.bash .shell-prompt} roslaunch stretch_core stretch_driver.launch ``` Then in a new terminal, type the following command ```{.bash .shell-prompt} rosrun stretch_core keyboard_teleop ``` Below are the keyboard commands that allow a user to control all of Stretch's joints. ```{.bash .no-copy} ---------- KEYBOARD TELEOP MENU ----------- i HEAD UP j HEAD LEFT l HEAD RIGHT , HEAD DOWN 7 BASE ROTATE LEFT 9 BASE ROTATE RIGHT home page-up 8 LIFT UP up-arrow 4 BASE FORWARD 6 BASE BACK left-arrow right-arrow 2 LIFT DOWN down-arrow w ARM OUT a WRIST FORWARD d WRIST BACK x ARM IN 5 GRIPPER CLOSE 0 GRIPPER OPEN step size: b BIG, m MEDIUM, s SMALL q QUIT ------------------------------------------- ``` To stop the node from sending twist messages, press `Ctrl` + `c` in the terminal. ### Keyboard Teleoperating: Mobile Base Begin by running the following command in your terminal: ```{.bash .shell-prompt} roslaunch stretch_core stretch_driver.launch ``` To teleoperate a Stretch's mobile base with the keyboard, you first need to switch the mode to `navigation` for the robot to receive `Twist` messages. This is done using a rosservice call in a new terminal. In the same terminal run the teleop_twist_keyboard node with the argument remapping the `cmd_vel` topic name to `stretch/cmd_vel`. ```{.bash .shell-prompt} rosservice call /switch_to_navigation_mode rosrun teleop_twist_keyboard teleop_twist_keyboard.py cmd_vel:=stretch/cmd_vel ``` Below are the keyboard commands that allow a user to move Stretch's base. ```{.bash .no-copy} Reading from the keyboard and Publishing to Twist! --------------------------- Moving around: u i o j k l m , . For Holonomic mode (strafing), hold down the shift key: --------------------------- U I O J K L M < > t : up (+z) b : down (-z) anything else : stop q/z : increase/decrease max speeds by 10% w/x : increase/decrease only linear speed by 10% e/c : increase/decrease only angular speed by 10% CTRL-C to quit currently: speed 0.5 turn 1.0 ``` To stop the node from sending twist messages, type `Ctrl` + `c`. ### Create a node for Mobile Base Teleoperating To move Stretch's mobile base using a python script, please look at [Teleoperate Stretch with a node](example_1.md) for reference. ## Teleoperating in Gazebo ### Keyboard Teleoperating: Mobile Base For keyboard teleoperation of the Stretch's mobile base, first, [startup Stretch in simulation](gazebo_basics.md). Then run the following command in a new terminal. ```{.bash .shell-prompt} roslaunch stretch_gazebo gazebo.launch ``` In a new terminal, type the following ```{.bash .shell-prompt} roslaunch stretch_core teleop_twist.launch twist_topic:=/stretch_diff_drive_controller/cmd_vel linear:=1.0 angular:=2.0 teleop_type:=keyboard ``` The same keyboard commands will be presented to a user to move the robot. ### Xbox Controller Teleoperating An alternative for robot base teleoperation is to use an Xbox controller. Stop the keyboard teleoperation node by typing `Ctrl` + `c` in the terminal where the command was executed. Then connect the Xbox controller device to your local machine and run the following command. ```{.bash .shell-prompt} roslaunch stretch_core teleop_twist.launch twist_topic:=/stretch_diff_drive_controller/cmd_vel linear:=1.0 angular:=2.0 teleop_type:=joystick ``` Note that the teleop_twist_joy package has a deadman switch by default which disables the drive commands to be published unless pressed. For a Logitech F310 joystick, this button is A.