<> <> <> = tello_driver = == Overview == Communicating with the Tello drone can be done either using official [[https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf|Tello SDK]] or one of the unofficial libraries. The unofficial libraries originated from the reverse-engineering the raw packages broadcasted by the Tello. This ROS package is build on top of the unofficial [[https://github.com/hanyazou/TelloPy|TelloPy]] library. The [[https://github.com/hanyazou/TelloPy|TelloPy]] library is used at this moment since it offers more functionalities than the official [[https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf|Tello SDK]] or any other unofficial library. Developing of the tello_driver ROS package is inspired by [[https://github.com/anqixu/tello_driver|tello_driver]], which by now diverged considerately from the original work. Furthermore, development of this ROS package pursues not to modify the [[https://github.com/hanyazou/TelloPy|TelloPy]] library, but instead apply any modification or addition to the ros_driver package in an encapsulated manner. This prevents breaking functionalities when updating the [[https://github.com/hanyazou/TelloPy|TelloPy]] library. === Installation === ==== ROS distribution ==== Binary release from the ROS repository: * Kinetic {{{ $ sudo apt install ros-kinetic-tello-driver }}} ==== Build from source ==== . {{{ $ cd }}} {{{ $ git clone --recursive https://github.com/appie-17/tello_driver.git }}} . {{{ $ cd .. }}} {{{ $ catkin_make }}} {{{ $ source devel/setup.bash }}} === Launch === * Turn on Tello drone * Connect to drone's WiFi access point ({{{TELLO_XXXXXX}}}) {{{ $ roslaunch tello_driver tello_node.launch }}} == Nodes == === tello_driver_node === Main node running as interface for the [[https://github.com/hanyazou/TelloPy|TelloPy]] library ==== Subscribed topics ==== * {{{/tello/cmd_vel}}} [[http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html|geometry_msgs/Twist]] * {{{/tello/emergency}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/fast_mode}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/flattrim}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/flip}}} [[http://docs.ros.org/api/std_msgs/html/msg/UInt8.html|std_msgs/Uint8]] * {{{/tello/land}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/palm_land}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/takeoff}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/throw_takeoff}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] ==== Published topics ==== * {{{/tello/camera/camera_info}}} [[http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html|sensor_msgs/CameraInfo]] * {{{/tello/image_raw}}} [[http://docs.ros.org/api/sensor_msgs/html/msg/Image.html|sensor_msgs/Image]] * {{{/tello/imag/raw/h264}}} [[https://github.com/tilk/h264_image_transport/blob/master/msg/H264Packet.msg|h264_image_transport/H264Packet]] * {{{/tello/odom}}} [[http://docs.ros.org/api/nav_msgs/html/msg/Odometry.html|nav_msgs/Odometry]] * {{{/tello/imu}}} [[http://docs.ros.org/api/sensor_msgs/html/msg/Imu.html|sensor_msgs/Imu]] * {{{/tello/status}}} [[https://github.com/appie-17/tello_driver/blob/development/msg/TelloStatus.msg|tello_driver/TelloStatus]] ==== Parameters ==== * {{{~/tello_driver_node/connect_timeout_sec}}} * {{{~/tello_driver_node/fixed_video_rate}}} * {{{~/tello_driver_node/local_cmd_client_port}}} * {{{~/tello_driver_node/local_vid_server_port}}} * {{{~/tello_driver_node/stream_h264_video}}} * {{{~/tello_driver_node/tello_cmd_server_port}}} * {{{~/tello_driver_node/tello_ip}}} * {{{~/tello_driver_node/vel_cmd_scale}}} * {{{~/tello_driver_node/video_req_sps_hz}}} * {{{~/tello_driver_node/altitude_limit}}} * {{{~/tello_driver_node/attitude_limit}}} * {{{~/tello_driver_node/low_bat_threshold}}} === gamepad_teleop_node === Converting gamepad input controls from {{{joy_node}}} to commands for {{{tello_driver_node}}} ==== Subscribed topics ==== * {{{/joy}}} [[http://docs.ros.org/api/sensor_msgs/html/msg/Joy.html|sensor_msgs/Joy]] * {{{/tello/agent_cmd_vel_in}}} [[http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html|geometry_msgs/Twist]] ==== Published topics ==== * {{{/tello/cmd_vel}}} [[http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html|geometry_msgs/Twist]] * {{{/tello/emergency}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/fast_mode}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/flattrim}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/flip}}} [[http://docs.ros.org/api/std_msgs/html/msg/UInt8.html|std_msgs/Uint8]] * {{{/tello/land}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/palm_land}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/takeoff}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] * {{{/tello/throw_takeoff}}} [[http://docs.ros.org/api/std_msgs/html/msg/Empty.html|std_msgs/Empty]] ==== Services ==== None ==== Parameters ==== === joy_node === Receive input from gamepad controller and publish into {{{sensor_msgs/Joy}}} message ==== Subscribed topics ==== None ==== Published topics ==== * {{{/joy}}} [[http://docs.ros.org/api/sensor_msgs/html/msg/Joy.html|sensor_msgs/Joy]] ==== Services ==== None ==== Parameters ==== * {{{~/joy_node/deadzone}}} * {{{~/joy_node/dev}}} == Troubleshooting == * '''No more video output after reconnect''' . Relaunch the {{{tello_driver_node}}} to continue the video stream after WiFi reconnection. Only an issue when using PyAV to decode h264 video instead of ROS [[https://github.com/yoshito-n-students/codec_image_transport|codec_image_transport]]. == Notes == * '''Stream raw video''' . Depends on [[https://github.com/mikeboers/PyAV|PyAV]] package: . {{{ $ pip install av --user }}} . Installation of PyAV on Ubuntu 16.04 requires ffmpeg of at least version 3: {{{ $ sudo add-apt-repository ppa:jonathonf/ffmpeg-3 $ sudo apt update && sudo apt install ffmpeg }}} == WIP == == License == ## AUTOGENERATED DON'T DELETE ## CategoryPackage