The page introduces the usage of teleop_twist_keyboard, including how to control the motion of a robot using the keyboard.


Contents


Environment Setup

software platform

  • Ubuntu 20.04 X86
  • ROS Noetic

hardware platform

Choose any one below:

  • Slamware Kit (User Robot System based on Slamware Solution)
  • robot base systems like Apollo/Ares/Athena 

Sample Code Download

ROS-Sample Download Link


Compile and Run

  1. Download the Slamware ROS SDK along with ROS examples.
  2. Place the 'src' folder from the ROS SDK into an empty working directory, such as 'catkin_ws'. Also, put the 'slamware_ros_sample' folder from the ROS examples into the 'src' folder.
    mkdir -p catkin_ws/src
    cd catkin_ws/src
  3. Initialize the workspace using the Catkin tool.
    catkin_init_workspace
  4. Compile.
    cd ..
    catkin_make
  5. Set up workspace environment.
    source devel/setup.bash

  6. Launch the slamware_ros_sdk_server_node node. Select the corresponding IP according to the mode.
    roslaunch slamware_ros_sdk slamware_ros_sdk_server_node.launch ip_address:=10.6.128.141    // Station mode
    // If in AP mode, the IP address is 192.168.11.1
  7. Open another terminal, repeat step 5, and start the teleop_twist_keyboard_node node. Follow the prompts and use the W/S/A/D keys to control the robot to move forward/backward/left/right accordingly.
    roslaunch slamware_ros_sample teleop_twist_keyboard.launch

Code Description

Define keyboard buttons
moveBindings = {
    'w':(1.0, 0.0),
    's':(-1.0, 0.0),
    'a':(0.0, 1.0),
    'd':(0.0, -1.0)
}
Define a publisher, specify the topic name and type
pub = rospy.Publisher('/cmd_vel', Twist, queue_size = 1)
Initialize node
rospy.init_node('teleop_twist_keyboard_node')
When pressing keys, assign the velocity to linearX and angularZ
key = getKey()
print(key)
if key in moveBindings.keys():
    linearX = moveBindings[key][0]
    angularZ = moveBindings[key][1]
else:
    linearX = 0.0
    angularZ = 0.0
    if (key == '\x03'):
        break
Publish messages according to the required type of topic
twist = Twist()
twist.linear.x = linearX
twist.angular.z = angularZ
pub.publish(twist)


  • No labels