{"id":9530952,"url":"https://github.com/clydemcqueen/tello_ros","last_synced_at":"2025-08-23T14:31:08.735Z","repository":{"id":39988364,"uuid":"159985850","full_name":"clydemcqueen/tello_ros","owner":"clydemcqueen","description":"C++ ROS2 driver for DJI Tello drones [requires Foxy and Gazebo Classic -- both EOL]","archived":false,"fork":false,"pushed_at":"2024-06-29T05:58:33.000Z","size":179,"stargazers_count":210,"open_issues_count":31,"forks_count":67,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-12T00:46:41.887Z","etag":null,"topics":["ros2","ryze","tello"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clydemcqueen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-12-01T20:47:47.000Z","updated_at":"2025-03-28T06:54:09.000Z","dependencies_parsed_at":"2022-09-18T03:41:49.411Z","dependency_job_id":"302a6021-755e-4eac-a7b2-e8bce1f89458","html_url":"https://github.com/clydemcqueen/tello_ros","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/clydemcqueen/tello_ros","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clydemcqueen%2Ftello_ros","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clydemcqueen%2Ftello_ros/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clydemcqueen%2Ftello_ros/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clydemcqueen%2Ftello_ros/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clydemcqueen","download_url":"https://codeload.github.com/clydemcqueen/tello_ros/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clydemcqueen%2Ftello_ros/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271752099,"owners_count":24814744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ros2","ryze","tello"],"created_at":"2024-05-12T23:23:50.596Z","updated_at":"2025-08-23T14:31:08.388Z","avatar_url":"https://github.com/clydemcqueen.png","language":"C++","funding_links":[],"categories":["SDK Wrappers"],"sub_categories":[],"readme":"# `tello_ros`\n\n`tello_ros` is a ROS2 driver for Tello and Tello EDU drones.\n\n## Packages\n\nThere are 4 ROS packages:\n* `tello_driver` is a C++ ROS node that connects to the drone\n* `tello_msgs` is a set of ROS messages\n* `tello_description` contains robot description (URDF) files\n* `tello_gazebo` can be used to simulate a Tello drone in [Gazebo](http://gazebosim.org/),\n see the `README.md` in that package for details\n\n## Interface\n\n### Overview\n\nThe driver is designed to very simple while making it easy to integrate Tello drones into the ROS ecosystem.\n\nThe driver communicates with the drone using the Tello SDK, which has several advantages:\n* The SDK is documented, and there's quite a bit of development activity around it, so it's likely to be stable.\n* The SDK is text-based, which means that `tello_ros` can be simple but still provide full access to the SDK by passing\narbitrary strings to the drone.\n\nMany Tello commands (e.g., `takeoff` and `land`) are long-running, and the drone returns `ok` or `error` on completion.\nThe driver provides the ROS service `tello_command` to initiate commands,\nand the corresponding ROS topic `tello_response` to indicate command completion.\n\nPer ROS convention, the driver also responds to `Twist` messages on the `cmd_vel` topic.\nThese are translated into `rc` commands and sent to the drone.\nVelocity values are arbitrarily mapped from [-1.0, 1.0] to [-100, 100].\nThis may change in the future.\n\nThe driver parses telemetry data and sends it on the `flight_data` topic.\nThe presence of telemetry data is a good indicator that the drone is connected.\n\nThe driver parses the video stream and sends images on the `image_raw` topic.\nCamera information is sent on the `camera_info` topic.\n\nThe Tello drones have a sophisticated visual odometry system and an onboard IMU, but there's minimal access \nto these internal systems. The driver does not publish odometry.\n\nAdditional notes:\n* Only one command may be running at a time.\n* If a command (other than `rc`) is currently running, incoming `cmd_vel` messages are ignored.\n* Tello drones do not send responses for `rc` commands, and neither does the driver.\n* The driver sends `command` and `streamon` commands at startup to initiate telemetry and video.\n* If telemetry or video stops, the driver will attempt to restart by sending `command` and `streamon` commands.\n* Roll (`Twist.angular.x`) and pitch (`Twist.angular.y`) are ignored in `cmd_vel` messages.\n* The driver doesn't keep track of state, so it will happily send `rc` messages to the drone even if it's on the ground.\nThe drone just ignores them.\n* You can send arbitrary strings to the drone via the `tello_command` service.\n* Tello drones auto-land if no commands are received within 15 seconds.\nThe driver sends a `rc 0 0 0 0` command after 12 seconds of silence to avoid this.\n\n### Services\n\n* `~tello_action` tello_msgs/TelloAction\n\n### Subscribed topics\n\n* `~cmd_vel` [geometry_msgs/Twist](http://docs.ros.org/api/geometry_msgs/html/msg/Twist.html)\n\n### Published topics\n\n* `~tello_response` [std_msgs/String](http://docs.ros.org/api/std_msgs/html/msg/String.html)\n* `~flight_data` tello_msgs/FlightData\n* `~image_raw` [sensor_msgs/Image](http://docs.ros.org/api/sensor_msgs/html/msg/Image.html)\n* `~camera_info` [sensor_msgs/CameraInfo](http://docs.ros.org/api/sensor_msgs/html/msg/CameraInfo.html)\n\n### Parameters\n\nThe defaults work well for a single Tello drone.\n\n Name         |  Description |  Default\n--------------|--------------|----------\n`drone_ip`    | Send commands to this IP address |  `192.168.10.1`\n`drone_port`  | Send commands to this UDP port | `8889`\n`command_port`| Send commands from this UDP port | `38065`\n`data_port`   | Flight data (Tello state) will arrive on this UDP port  | `8890`\n`video_port`  | Video data will arrive on this UDP port |  `11111`\n\n## Installation\n\n### 1. Set up your Linux environment\n\nSet up a Ubuntu 20.04 box or VM.\n\nAlso install asio:\n~~~\nsudo apt install libasio-dev\n~~~\n\n### 2. Set up your ROS environment\n\n[Install ROS2 Foxy](https://docs.ros.org/) with the `ros-foxy-desktop` option.\n\nIf you install binaries, be sure to also install the \n[development tools and ROS tools](https://docs.ros.org/en/foxy/Installation/Ubuntu-Development-Setup.html)\nfrom the source installation instructions.\n\nInstall these additional packages:\n~~~\nsudo apt install ros-foxy-cv-bridge ros-foxy-camera-calibration-parsers\n~~~\n\n### 3. Install `tello_ros`\n\nDownload, compile and install `tello_ros`:\n~~~\nmkdir -p ~/tello_ros_ws/src\ncd ~/tello_ros_ws/src\ngit clone https://github.com/clydemcqueen/tello_ros.git\ngit clone https://github.com/ptrmu/ros2_shared.git\ncd ..\nsource /opt/ros/foxy/setup.bash\n# If you didn't intall Gazebo, skip tello_gazebo while building:\ncolcon build --event-handlers console_direct+ --packages-skip tello_gazebo\n~~~\n\n## Teleop\n\nThe driver provides a simple launch file that will allow you to fly the drone using a wired XBox One gamepad.\n\nTurn on the drone, connect to `TELLO-XXXXX` via wi-fi, and launch ROS:\n~~~\ncd ~/tello_ros_ws\nsource install/setup.bash\nros2 launch tello_driver teleop_launch.py\n~~~\n\nHit the XBox One **menu** button to take off, and the **view** button to land.\n\nIf you don't have an XBox One gamepad, you can send commands using the ROS2 CLI:\n~~~~\nros2 service call /tello_action tello_msgs/TelloAction \"{cmd: 'takeoff'}\"\nros2 service call /tello_action tello_msgs/TelloAction \"{cmd: 'rc 0 0 0 20'}\"\nros2 service call /tello_action tello_msgs/TelloAction \"{cmd: 'land'}\"\nros2 service call /tello_action tello_msgs/TelloAction \"{cmd: 'battery?'}\"\n~~~~\n\nYou can also send `cmd_vel` messages:\n~~~~\nros2 topic pub /cmd_vel geometry_msgs/Twist  # Sends rc 0 0 0 0\nros2 topic pub /cmd_vel geometry_msgs/Twist \"{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}\"\n~~~~\n\n## Devices tested\n\n* Tello\n  * Firmware v01.04.35.01, SDK v1.3\n* Tello EDU\n  * Firmware v02.04.69.03, SDK v2.0\n\n## Versions and branches\n\n`tello_ros` was developed along with several other projects while ROS2 was rapidly changing.\nAll of the related projects adopted similar conventions around branch names:\n* the `master` branch works with the latest ROS2 release (Foxy as of this writing)\n* there may be branches for older ROS2 versions, such as `crystal`, `dashing` or `eloquent`\n\nThe following projects and branches were tested together:\n\n* ROS2 Foxy with fiducial_vlam:\n  * git clone https://github.com/ptrmu/ros2_shared.git\n  * git clone https://github.com/ptrmu/fiducial_vlam.git\n  * git clone https://github.com/clydemcqueen/tello_ros.git\n  * git clone https://github.com/clydemcqueen/flock2.git\n\n## Credits\n\nThe h264decoder is from: https://github.com/DaWelter/h264decoder\n\n## Resources\n\n* [Tello User Manual 1.4](https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20User%20Manual%20v1.4.pdf)\n* [SDK 1.3](https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf)\nfor Tello, see the errata below\n* [SDK 2.0](https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20SDK%202.0%20User%20Guide.pdf)\nfor Tello EDU, see the errata below\n* [Tello EDU Mission Pad Guide (SDK 2.0)](https://dl-cdn.ryzerobotics.com/downloads/Tello/Tello%20Mission%20Pad%20User%20Guide.pdf)\nfor Tello EDU\n* [Tello Pilots Developer Forum](https://tellopilots.com/forums/tello-development.8/)\nis a good developer community\n\n#### Tello SDK errata\n\n* Tello drones do not respond to `rc` commands (the SDK suggests that they return `ok` or `error`)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclydemcqueen%2Ftello_ros","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclydemcqueen%2Ftello_ros","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclydemcqueen%2Ftello_ros/lists"}