GithubHelp home page GithubHelp logo

clydemcqueen / flock2 Goto Github PK

View Code? Open in Web Editor NEW
64.0 5.0 15.0 236 KB

ROS2 swarm controller for DJI Tello drones

License: BSD 3-Clause "New" or "Revised" License

CMake 2.34% Python 32.67% C++ 64.22% Dockerfile 0.77%
tello ryze swarm drones ros2

flock2's People

Contributors

clydemcqueen avatar ptrmu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

flock2's Issues

Remove usb_camera

usb_camera isn't required for flock2, so this will simplify dependencies.

launch files refer to older vlam node names

I have been following the all your provided steps to install flock2.

mkdir -p ~/flock2_ws/src
cd ~/flock2_ws/src
git clone https://github.com/clydemcqueen/flock2.git
git clone https://github.com/ptrmu/fiducial_vlam.git
git clone https://github.com/clydemcqueen/tello_ros.git
cd ..
source /opt/ros/eloquent/setup.bash
If you didn't install Gazebo, avoid building tello_gazebo:
colcon build --event-handlers console_direct+ --packages-skip tello_gazebo

Upon the last instruction of the Step 4. I faced an error shown below.

~/flock2_ws$ colcon build --event-handlers console_direct+
[0.542s] ERROR:colcon:colcon build: Duplicate package names not supported:

  • tello_description:
    • src/tello_ros/tello_description
    • tello_ros/tello_description
  • tello_driver:
    • src/tello_ros/tello_driver
    • tello_ros/tello_driver
  • tello_gazebo:
    • src/tello_ros/tello_gazebo
    • tello_ros/tello_gazebo
  • tello_msgs:
    • src/tello_ros/tello_msgs
    • tello_ros/tello_msgs

fatal error: rclcpp_components/register_node_macro.hpp: No such file or directory #include "rclcpp_components/register_node_macro.hpp"

UBUNTU 18.04 LTS
ROS2 ELOQUENT

When attempting to build with colcon build this error is produced:

Starting >>> ros2_shared
Finished <<< ros2_shared [0.19s]
Starting >>> gscam
--- stderr: gscam
/home/USER/gscam2_ws/src/gscam2/src/subscriber_node.cpp:37:10: fatal error: rclcpp_components/register_node_macro.hpp: No such file or directory
#include "rclcpp_components/register_node_macro.hpp"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/subscriber_node.dir/src/subscriber_node.cpp.o] Error 1
make[1]: *** [CMakeFiles/subscriber_node.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
//opt/ros/eloquent/lib/libimage_transport.so: undefined reference to `message_filters::Connection::Connection(std::function<void ()> const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [gscam_main] Error 1
make[1]: *** [CMakeFiles/gscam_main.dir/all] Error 2
make: *** [all] Error 2

Failed <<< gscam [0.47s, exited with code 2]

Summary: 1 package finished [0.80s]
1 package failed: gscam
1 package had stderr output: gscam

ArUco pose uncertainty

Compute uncertainty for drone and marker poses.

Publish PoseWithCovarianceStamped messages for the drone and markers on these topics: ~pose, ~marker/id/pose.

Videos of flock2 or tello_ros?

I am considering using this for research. Are there any videos on Youtube or something showing off the implementation of this? Thanks.

Use PID controller(s) to follow a path

Build a simple PID controller.

Add the notion of "mission" to flock_base to support autonomous movement.

Consume messages on ~pose_filtered and ~plan.

Generate messages on ~cmd_vel.

FlightData give no data

Hi,
many thanks for your work, I'm trying to get the flight data but it is empty all the time

when i run: ros2 list topic :
..........
/drone1/camera_odom
/drone1/camera_pose
/drone1/cmd_vel
/drone1/flight_data
/drone1/image_marked
/drone1/image_raw
..........
i can send commands to the drone takeoff , land , rc ..... it's working very well
my code :
subscription = node.create_subscription(FlightData, '/drone1/flight_data', flight_data_callback, 10)
def flight_data_callback(msg):
node.get_logger().info(' yaw : {} , pitch : {} , roll : {} , altitude {}, tof {} '.format(msg.yaw,msg.pitch,msg.roll,msg.baro,msg.tof))
Running results of my program :
[INFO] [drone_starting]: yaw : 0 , pitch : 0 , roll : 0 , altitude 0.0, tof 0

thanks, guys

hack in a way to read parameters

ROS2 Bouncy Python bindings don't support parameters yet. In theory this will be fixed by the next release in December. Hack in a way to launch Python nodes with parameters between now and then.

Port to Eloquent

ROS2 Eloquent is expected 11/22, betas are out now. Create a dashing branch, then port to master to Eloquent.

Camera and SDK you are using

Hello there,
I have come across this project and first of all have to say that it sounds amazing and has quite a potential. But now I have two questions:

  1. Do you use the downward camera to get the images of the ArUco markers?
  2. Does this only work with the Tello SDK1.0 (the normal tellos) or does it also works with the Tello SDK2.0 (Tello EDUs)?
    Thanks in advance

Port selection for control of multiple Tello Drones

Using Flock2 for swarm applications – Port selection for 2 drones

Hello!

My name is Nick and I am trying to use flock2 to control two (and hopefully more) Tello drones over WI-FI and I am running into issues with the port assignments for each drone. When I assign ports 8890 and 11111 to data and video respectively for drone 1, I can’t use these ports for drone 2. However, it seems that these ports are set by the Tello drones, meaning I would need to use multiple PCs to receive video and data from multiple drones.

I am curious if you were able to control two drones while receiving data and video from each using the launch_two.py launch file over one PC and if so, how did you assign the ports of the drones/PC in the launch file.

Thank you,
Nick

Here is what is currently output when launching launch_two.py:

[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [rviz2-1]: process started with pid [38092]
[INFO] [robot_state_publisher-2]: process started with pid [38094]
[INFO] [robot_state_publisher-3]: process started with pid [38096]
[INFO] [tello_driver_main-4]: process started with pid [38098]
[INFO] [tello_driver_main-5]: process started with pid [38100]
[INFO] [joy_node-6]: process started with pid [38102]
[INFO] [flock_base-7]: process started with pid [38104]
[INFO] [drone_base-8]: process started with pid [38124]
[INFO] [drone_base-9]: process started with pid [38147]
[INFO] [vmap_main-10]: process started with pid [38152]
[INFO] [vloc_main-11]: process started with pid [38162]
[INFO] [vloc_main-12]: process started with pid [38176]
[robot_state_publisher-2] [WARN] [1632159875.495913222] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future.
[robot_state_publisher-2] Parsing robot urdf xml string.
[robot_state_publisher-2] The root link base_link_1 has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
[robot_state_publisher-2] Link camera_link_1 had 0 children
[robot_state_publisher-2] [INFO] [1632159875.498078838] [robot_state_publisher]: got segment base_link_1
[robot_state_publisher-2] [INFO] [1632159875.498108969] [robot_state_publisher]: got segment camera_link_1
[robot_state_publisher-3] [WARN] [1632159875.488483731] [robot_state_publisher]: No robot_description parameter, but command-line argument available. Assuming argument is name of URDF file. This backwards compatibility fallback will be removed in the future.
[robot_state_publisher-3] Parsing robot urdf xml string.
[robot_state_publisher-3] The root link base_link_2 has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
[robot_state_publisher-3] Link camera_link_2 had 0 children
[robot_state_publisher-3] [INFO] [1632159875.490501757] [robot_state_publisher]: got segment base_link_2
[robot_state_publisher-3] [INFO] [1632159875.490530713] [robot_state_publisher]: got segment camera_link_2
[flock_base-7] [INFO] [1632159875.506022962] [flock_base]: FlockBase Parameters
[flock_base-7] [INFO] [1632159875.506186703] [flock_base]: drones = [drone1, drone2]
[flock_base-7] [INFO] [1632159875.506212316] [flock_base]: 2 drones, joystick controls drone1, right bumper to change
[drone_base-8] [INFO] [1632159875.519132936] [drone1.base1]: DroneBase Parameters
[drone_base-8] [INFO] [1632159875.519233918] [drone1.base1]: flight_data_timeout_sec = 1.500000
[drone_base-8] [INFO] [1632159875.519250222] [drone1.base1]: odom_timeout_sec = 1.500000
[drone_base-8] [INFO] [1632159875.519283064] [drone1.base1]: FlightControllerSimple Parameters
[drone_base-8] [INFO] [1632159875.519296658] [drone1.base1]: stabilize_time_sec = 5.000000
[drone_base-8] [INFO] [1632159875.527997042] [drone1.base1]: drone initialized
[drone_base-9] [INFO] [1632159875.532914035] [drone2.base2]: DroneBase Parameters
[drone_base-9] [INFO] [1632159875.533012095] [drone2.base2]: flight_data_timeout_sec = 1.500000
[drone_base-9] [INFO] [1632159875.533029937] [drone2.base2]: odom_timeout_sec = 1.500000
[drone_base-9] [INFO] [1632159875.533068480] [drone2.base2]: FlightControllerSimple Parameters
[drone_base-9] [INFO] [1632159875.533084173] [drone2.base2]: stabilize_time_sec = 5.000000
[drone_base-9] [INFO] [1632159875.538016663] [drone2.base2]: drone initialized
[vmap_main-10] [INFO] [1632159875.550734818] [vmap_node]: VmapNode Parameters
[vmap_main-10] [INFO] [1632159875.550857270] [vmap_node]: fiducial_map_pub_topic = /fiducial_map
[vmap_main-10] [INFO] [1632159875.550875912] [vmap_node]: fiducial_markers_pub_topic = fiducial_markers
[vmap_main-10] [INFO] [1632159875.550888577] [vmap_node]: fiducial_observations_sub_topic = /fiducial_observations
[vmap_main-10] [INFO] [1632159875.550900164] [vmap_node]: map_frame_id = map
[vmap_main-10] [INFO] [1632159875.550912667] [vmap_node]: marker_prefix_frame_id = marker_
[vmap_main-10] [INFO] [1632159875.550926234] [vmap_node]: publish_tfs = 1
[vmap_main-10] [INFO] [1632159875.550938388] [vmap_node]: publish_marker_visualizations = 1
[vmap_main-10] [INFO] [1632159875.550956310] [vmap_node]: marker_map_publish_frequency_hz = 0.500000
[vmap_main-10] [INFO] [1632159875.550971200] [vmap_node]: marker_map_save_full_filename = fiducial_marker_locations.yaml
[vmap_main-10] [INFO] [1632159875.550983819] [vmap_node]: marker_map_load_full_filename = fiducial_marker_locations_saved.yaml
[vmap_main-10] [INFO] [1632159875.550995501] [vmap_node]: make_not_use_map = 1
[vmap_main-10] [INFO] [1632159875.551006178] [vmap_node]: map_init_style = 1
[vmap_main-10] [INFO] [1632159875.551017293] [vmap_node]: map_init_id = 1
[vmap_main-10] [INFO] [1632159875.551032279] [vmap_node]: map_init_pose_x = 0.000000
[vmap_main-10] [INFO] [1632159875.551044637] [vmap_node]: map_init_pose_y = 0.000000
[vmap_main-10] [INFO] [1632159875.551062023] [vmap_node]: map_init_pose_z = 1.000000
[vmap_main-10] [INFO] [1632159875.551073137] [vmap_node]: map_init_pose_roll = 1.570796
[vmap_main-10] [INFO] [1632159875.551086550] [vmap_node]: map_init_pose_pitch = 0.000000
[vmap_main-10] [INFO] [1632159875.551099269] [vmap_node]: map_init_pose_yaw = -1.570796
[vmap_main-10] [INFO] [1632159875.551110720] [vmap_node]: marker_length = 0.162700
[vmap_main-10] [INFO] [1632159875.553181696] [vmap_node]: vmap_node ready
[vloc_main-11] [INFO] [1632159875.672138411] [drone1.vloc1]: VlocNode Parameters
[vloc_main-11] [INFO] [1632159875.672305582] [drone1.vloc1]: fiducial_observations_pub_topic = /fiducial_observations
[vloc_main-11] [INFO] [1632159875.672327807] [drone1.vloc1]: camera_pose_pub_topic = camera_pose
[vloc_main-11] [INFO] [1632159875.672341619] [drone1.vloc1]: base_pose_pub_topic = base_pose
[vloc_main-11] [INFO] [1632159875.672353629] [drone1.vloc1]: camera_odometry_pub_topic = camera_odom
[vloc_main-11] [INFO] [1632159875.672363905] [drone1.vloc1]: base_odometry_pub_topic = base_odom
[vloc_main-11] [INFO] [1632159875.672374647] [drone1.vloc1]: image_marked_pub_topic = image_marked
[vloc_main-11] [INFO] [1632159875.672385152] [drone1.vloc1]: fiducial_map_sub_topic = /fiducial_map
[vloc_main-11] [INFO] [1632159875.672395058] [drone1.vloc1]: camera_info_sub_topic = camera_info
[vloc_main-11] [INFO] [1632159875.672409035] [drone1.vloc1]: image_raw_sub_topic = image_raw
[vloc_main-11] [INFO] [1632159875.672419148] [drone1.vloc1]: map_frame_id = map
[vloc_main-11] [INFO] [1632159875.672429062] [drone1.vloc1]: camera_frame_id = camera
[vloc_main-11] [INFO] [1632159875.672440062] [drone1.vloc1]: base_frame_id = base_link
[vloc_main-11] [INFO] [1632159875.672453733] [drone1.vloc1]: publish_camera_pose = 1
[vloc_main-11] [INFO] [1632159875.672466591] [drone1.vloc1]: publish_base_pose = 1
[vloc_main-11] [INFO] [1632159875.672478216] [drone1.vloc1]: publish_tfs = 1
[vloc_main-11] [INFO] [1632159875.672490387] [drone1.vloc1]: publish_tfs_per_marker = 1
[vloc_main-11] [INFO] [1632159875.672501436] [drone1.vloc1]: publish_camera_odom = 1
[vloc_main-11] [INFO] [1632159875.672512571] [drone1.vloc1]: publish_base_odom = 1
[vloc_main-11] [INFO] [1632159875.672523984] [drone1.vloc1]: publish_image_marked = 1
[vloc_main-11] [INFO] [1632159875.672534599] [drone1.vloc1]: stamp_msgs_with_current_time = 0
[vloc_main-11] [INFO] [1632159875.672554655] [drone1.vloc1]: t_camera_base_x = 0.000000
[vloc_main-11] [INFO] [1632159875.672568455] [drone1.vloc1]: t_camera_base_y = 0.000000
[vloc_main-11] [INFO] [1632159875.672582016] [drone1.vloc1]: t_camera_base_z = -0.035000
[vloc_main-11] [INFO] [1632159875.672594683] [drone1.vloc1]: t_camera_base_roll = 1.570796
[vloc_main-11] [INFO] [1632159875.672605309] [drone1.vloc1]: t_camera_base_pitch = -1.570796
[vloc_main-11] [INFO] [1632159875.672615800] [drone1.vloc1]: t_camera_base_yaw = 0.000000
[vloc_main-11] [INFO] [1632159875.672625630] [drone1.vloc1]: sub_camera_info_best_effort_not_reliable = 1
[vloc_main-11] [INFO] [1632159875.672635416] [drone1.vloc1]: sub_image_raw_best_effort_not_reliable = 1
[vloc_main-11] [INFO] [1632159875.672644855] [drone1.vloc1]: corner_refinement_method = 2
[vloc_main-11] [INFO] [1632159875.681271106] [drone1.vloc1]: vloc_node ready
[vloc_main-12] [INFO] [1632159875.700955897] [drone2.vloc2]: VlocNode Parameters
[vloc_main-12] [INFO] [1632159875.702088606] [drone2.vloc2]: fiducial_observations_pub_topic = /fiducial_observations
[vloc_main-12] [INFO] [1632159875.702112089] [drone2.vloc2]: camera_pose_pub_topic = camera_pose
[vloc_main-12] [INFO] [1632159875.702124371] [drone2.vloc2]: base_pose_pub_topic = base_pose
[vloc_main-12] [INFO] [1632159875.702134683] [drone2.vloc2]: camera_odometry_pub_topic = camera_odom
[vloc_main-12] [INFO] [1632159875.702144701] [drone2.vloc2]: base_odometry_pub_topic = base_odom
[vloc_main-12] [INFO] [1632159875.702154487] [drone2.vloc2]: image_marked_pub_topic = image_marked
[vloc_main-12] [INFO] [1632159875.702165508] [drone2.vloc2]: fiducial_map_sub_topic = /fiducial_map
[vloc_main-12] [INFO] [1632159875.702175802] [drone2.vloc2]: camera_info_sub_topic = camera_info
[vloc_main-12] [INFO] [1632159875.702185569] [drone2.vloc2]: image_raw_sub_topic = image_raw
[vloc_main-12] [INFO] [1632159875.702198318] [drone2.vloc2]: map_frame_id = map
[vloc_main-12] [INFO] [1632159875.702208431] [drone2.vloc2]: camera_frame_id = camera
[vloc_main-12] [INFO] [1632159875.702219286] [drone2.vloc2]: base_frame_id = base_link
[vloc_main-12] [INFO] [1632159875.702234844] [drone2.vloc2]: publish_camera_pose = 1
[vloc_main-12] [INFO] [1632159875.702246523] [drone2.vloc2]: publish_base_pose = 1
[vloc_main-12] [INFO] [1632159875.702256850] [drone2.vloc2]: publish_tfs = 1
[vloc_main-12] [INFO] [1632159875.702266845] [drone2.vloc2]: publish_tfs_per_marker = 1
[vloc_main-12] [INFO] [1632159875.702277025] [drone2.vloc2]: publish_camera_odom = 1
[vloc_main-12] [INFO] [1632159875.702287262] [drone2.vloc2]: publish_base_odom = 1
[vloc_main-12] [INFO] [1632159875.702297344] [drone2.vloc2]: publish_image_marked = 1
[vloc_main-12] [INFO] [1632159875.702307228] [drone2.vloc2]: stamp_msgs_with_current_time = 0
[vloc_main-12] [INFO] [1632159875.702326384] [drone2.vloc2]: t_camera_base_x = 0.000000
[vloc_main-12] [INFO] [1632159875.702338109] [drone2.vloc2]: t_camera_base_y = 0.000000
[vloc_main-12] [INFO] [1632159875.702349784] [drone2.vloc2]: t_camera_base_z = -0.035000
[vloc_main-12] [INFO] [1632159875.702360196] [drone2.vloc2]: t_camera_base_roll = 1.570796
[vloc_main-12] [INFO] [1632159875.702370547] [drone2.vloc2]: t_camera_base_pitch = -1.570796
[vloc_main-12] [INFO] [1632159875.702380688] [drone2.vloc2]: t_camera_base_yaw = 0.000000
[vloc_main-12] [INFO] [1632159875.702390689] [drone2.vloc2]: sub_camera_info_best_effort_not_reliable = 1
[vloc_main-12] [INFO] [1632159875.702400960] [drone2.vloc2]: sub_image_raw_best_effort_not_reliable = 1
[vloc_main-12] [INFO] [1632159875.702411441] [drone2.vloc2]: corner_refinement_method = 2
[tello_driver_main-5] [INFO] [1632159875.710720822] [drone2.driver2]: Drone at 192.168.0.170:8889
[tello_driver_main-5] [INFO] [1632159875.711594870] [drone2.driver2]: Listening for command responses on localhost:38065
[tello_driver_main-5] [INFO] [1632159875.711619869] [drone2.driver2]: Listening for data on localhost:8890
[tello_driver_main-5] [INFO] [1632159875.711628016] [drone2.driver2]: Listening for video on localhost:11111
[tello_driver_main-5] [INFO] [1632159875.712979661] [drone2.driver2]: Parsed camera info for 'tello_camera'
[vloc_main-12] [INFO] [1632159875.718717761] [drone2.vloc2]: vloc_node ready
[tello_driver_main-4] [INFO] [1632159875.721484535] [drone1.driver1]: Drone at 192.168.0.208:8889
[tello_driver_main-4] [INFO] [1632159875.721664161] [drone1.driver1]: Listening for command responses on localhost:38065
[tello_driver_main-4] [INFO] [1632159875.721684243] [drone1.driver1]: Listening for data on localhost:8890
[tello_driver_main-4] [INFO] [1632159875.721696992] [drone1.driver1]: Listening for video on localhost:11111
[tello_driver_main-4] terminate called after throwing an instance of 'std::system_error'
[tello_driver_main-4] what(): bind: Address already in use
[rviz2-1] [INFO] [1632159875.851522617] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-1] [INFO] [1632159875.851606443] [rviz2]: OpenGl version: 4.6 (GLSL 4.6)
[rviz2-1] [INFO] [1632159875.874784599] [rviz2]: Stereo is NOT SUPPORTED
[ERROR] [tello_driver_main-4]: process has died [pid 38098, exit code -6, cmd '/home/nick/flock2_ws/install/tello_driver/lib/tello_driver/tello_driver_main --ros-args -r __node:=driver1 -r __ns:=/drone1 --params-file /tmp/launch_params_mk79s5to'].
[rviz2-1] [INFO] [1632159875.982234431] [rviz2]: Stereo is NOT SUPPORTED

Build fails becuase of missing dependencies in CMakeLists

Thank you for this package
This isn't much of an issue and I might be the only one facing it. I just wanted to put it here for other people who might face it. I'm not opening a pull request because the changes were very small to solve it (should I?)

ROS2 version: galactic (built from source in a place other than root)
OS: Ubuntu 20.04

There were some dependency issues in CMakeLists.txt for the sub packages. Here are the diffs which solved it:
src/fiducial_vlam/CMakeLists.txt

+find_package(tf2 REQUIRED)
+find_package(tf2_geometry_msgs REQUIRED)
+find_package(cv_bridge REQUIRED)

set(VLOC_NODE_DEPS
   sensor_msgs
   std_msgs
   tf2_msgs
+  tf2
+  tf2_geometry_msgs
+  cv_bridge
   )

set(VMAP_NODE_DEPS
   tf2_msgs
   visualization_msgs
   yaml_cpp_vendor
+  tf2
+  tf2_geometry_msgs
+  cv_bridge
   )

src/tello_ros/CmakeLists.txt

+find_package(rclcpp_components REQUIRED)

set(DRIVER_NODE_DEPS
   ros2_shared
   sensor_msgs
   std_msgs
   tello_msgs
+  rclcpp_components)

set(JOY_NODE_DEPS
   geometry_msgs
   rclcpp
   sensor_msgs
   tello_msgs
+  rclcpp_components)

src/tello_ros/CmakeLists.txt

+find_package(tf2_geometry_msgs REQUIRED)

include_directories(
   ${tello_msgs_INCLUDE_DIRS}
   ${tf2_msgs_INCLUDE_DIRS}
   ${visualization_msgs_INCLUDE_DIRS}
+  ${tf2_geometry_msgs_INCLUDE_DIRS}
 )
ament_target_dependencies(
   rclcpp
   ros2_shared
   std_msgs
+  tf2_geometry_msgs
 )

Design/build drone controller hardware

We need a way to support multiple Tello drones.

Perhaps we can use the .edu drones? Apparently multiple .edu drones can use a single access point.

Could use one Raspberry Pi per drone to bridge the UDP traffic. If we go this route, it's tempting to see what processing we can push to the Raspberry Pi to reduce network overhead. Can we move flock_driver w/ ArUco detection to the Pi?

FLOCK2 docker image

Thanks alot for your effort in making this ROS2 package for the Tello drone! Since I'm still using ROS1 on a daily basis, I decided to create a docker image in order to run all your ROS2 packages. The image can be found at https://hub.docker.com/r/jordyvanappeven/flock2, while using the following script to run the docker image:

#!/bin/bash
FLOCK2_WS=/home/jordy/flock2_ws ### CHANGE TO FLOCK2_WS DIRECOTRY
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -

docker run -it \
           --volume=$XSOCK:$XSOCK:rw \
           --volume=$XAUTH:$XAUTH:rw \
           --volume=$FLOCK2_WS:/home/ros/flock2_ws:rw \
           --volume=/dev/input:/dev/input:rw \
           --privileged \
           --env="XAUTHORITY=${XAUTH}" \
           --env="DISPLAY" \
           --env="QT_11_NO_MITSHM=1" \
           --env="UID=`id -u $who`" \
           --env="UID=`id -g $who`" \
           --net host \
           --name flock2 \
       jordyvanappeven/flock2:tello \
       bash

Just make sure to change the FLOCK2_WS variable to the appropriate directory, while clone all required packages to the src folder. After running the docker navigate to the flock2_ws folder and build the ROS2 package colcon build --event-handlers console_direct+. Then source the package source install/setup.bash and don't forget to export the Tello models for Gazebo by:

export GAZEBO_MODEL_PATH=${PWD}/install/tello_gazebo/share/tello_gazebo/models
source /usr/share/gazebo/setup.sh

[ERROR] [launch]: Caught exception in launch (see debug for traceback): executable 'vmap_node' not found on the libexec directory '/home/user/flock2_ws/install/fiducial_vlam/lib/fiducial_vlam'

Hi, this is Sunny.

First of all, thank you very much for sharing such an amazing project ~

However, when I run the code, the following errors occured:

user@ubuntu:~/flock2_ws$ ros2 launch flock2 launch_one.py
[INFO] [launch]: All log files can be found below /home/user/.ros/log/2020-10-04-14-58-29-976416-ubuntu-12869
[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): executable 'vmap_node' not found on the libexec directory '/home/user/flock2_ws/install/fiducial_vlam/lib/fiducial_vlam'
Task exception was never retrieved
future: <Task finished coro=<LaunchService._process_one_event() done, defined at /opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py:293> exception=RuntimeError('Signal event received before subprocess transport available.',)>
Traceback (most recent call last):
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py", line 295, in _process_one_event
await self.__process_event(next_event)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py", line 315, in __process_event
visit_all_entities_and_collect_futures(entity, self.__context))
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py", line 38, in visit_all_entities_and_collect_futures
sub_entities = entity.visit(context)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/action.py", line 108, in visit
return self.execute(context)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/actions/opaque_function.py", line 75, in execute
return self.__function(context, *self.__args, **self.__kwargs)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/actions/execute_process.py", line 383, in __on_signal_process_event
raise RuntimeError('Signal event received before subprocess transport available.')
RuntimeError: Signal event received before subprocess transport available.
[INFO] [rviz2-1]: process started with pid [12885]
[INFO] [robot_state_publisher-2]: process started with pid [12886]
[INFO] [tello_driver_main-3]: process started with pid [12887]
[INFO] [joy_node-4]: process started with pid [12888]
[INFO] [flock_base-5]: process started with pid [12889]
[INFO] [drone_base-6]: process started with pid [12890]
Task exception was never retrieved
future: <Task finished coro=<LaunchService._process_one_event() done, defined at /opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py:293> exception=RuntimeError('Signal event received before subprocess transport available.',)>
Traceback (most recent call last):
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py", line 295, in _process_one_event
await self.__process_event(next_event)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/launch_service.py", line 315, in __process_event
visit_all_entities_and_collect_futures(entity, self.__context))
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/utilities/visit_all_entities_and_collect_futures_impl.py", line 38, in visit_all_entities_and_collect_futures
sub_entities = entity.visit(context)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/action.py", line 108, in visit
return self.execute(context)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/actions/opaque_function.py", line 75, in execute
return self.__function(context, *self.__args, **self.__kwargs)
File "/opt/ros/eloquent/lib/python3.6/site-packages/launch/actions/execute_process.py", line 383, in __on_signal_process_event
raise RuntimeError('Signal event received before subprocess transport available.')
RuntimeError: Signal event received before subprocess transport available.
[INFO] [joy_node-4]: sending signal 'SIGINT' to process[joy_node-4]
[INFO] [tello_driver_main-3]: sending signal 'SIGINT' to process[tello_driver_main-3]
[INFO] [robot_state_publisher-2]: sending signal 'SIGINT' to process[robot_state_publisher-2]
[INFO] [rviz2-1]: sending signal 'SIGINT' to process[rviz2-1]
[ERROR] [tello_driver_main-3]: process has died [pid 12887, exit code -2, cmd '/home/user/flock2_ws/install/tello_driver/lib/tello_driver/tello_driver_main --ros-args -r __node:=tello_driver -r __ns:=/solo'].
[ERROR] [rviz2-1]: process has died [pid 12885, exit code -2, cmd 'rviz2 -d install/flock2/share/flock2/launch/one.rviz'].
[INFO] [joy_node-4]: process has finished cleanly [pid 12888]
[flock_base-5] [INFO] [flock_base]: FlockBase Parameters
[flock_base-5] [INFO] [flock_base]: drones = [solo]
[flock_base-5] [INFO] [flock_base]: 1 drone
[drone_base-6] [INFO] [solo.drone_base]: DroneBase Parameters
[drone_base-6] [INFO] [solo.drone_base]: flight_data_timeout_sec = 1.500000
[drone_base-6] [INFO] [solo.drone_base]: odom_timeout_sec = 1.500000
[drone_base-6] [INFO] [solo.drone_base]: FlightControllerSimple Parameters
[drone_base-6] [INFO] [solo.drone_base]: stabilize_time_sec = 5.000000
[robot_state_publisher-2] Initialize urdf model from file: /home/user/flock2_ws/install/tello_description/share/tello_description/urdf/tello.urdf
[robot_state_publisher-2] Parsing robot urdf xml string.
[robot_state_publisher-2] The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
[robot_state_publisher-2] Link camera_link had 0 children
[robot_state_publisher-2] got segment base_link
[robot_state_publisher-2] got segment camera_link
[robot_state_publisher-2] Adding fixed segment from base_link to camera_link
[joy_node-4] [ERROR] [joy_node]: Couldn't open joystick /dev/input/js0. Will retry every second.
[INFO] [robot_state_publisher-2]: process has finished cleanly [pid 12886]
[drone_base-6] [INFO] [solo.drone_base]: drone initialized
[joy_node-4] [INFO] [rclcpp]: signal_handler(signal_value=2)
[joy_node-4] [INFO] [joy_node]: joy_node shut down.
[robot_state_publisher-2] [INFO] [rclcpp]: signal_handler(signal_value=2)
[ERROR] [drone_base-6]: process[drone_base-6] failed to terminate '5' seconds after receiving 'SIGINT', escalating to 'SIGTERM'
[ERROR] [flock_base-5]: process[flock_base-5] failed to terminate '5' seconds after receiving 'SIGINT', escalating to 'SIGTERM'
[INFO] [drone_base-6]: sending signal 'SIGTERM' to process[drone_base-6]
[INFO] [flock_base-5]: sending signal 'SIGTERM' to process[flock_base-5]
[ERROR] [drone_base-6]: process has died [pid 12890, exit code -15, cmd '/home/user/tello_ros_ws/install/flock2/lib/flock2/drone_base --ros-args -r __node:=drone_base -r __ns:=/solo'].
[ERROR] [flock_base-5]: process has died [pid 12889, exit code -15, cmd '/home/user/tello_ros_ws/install/flock2/lib/flock2/flock_base --ros-args'].

It seems the vmap_node is missing. Can know how to solve this issue ?

Thank you very much.

Best regards,
Sunny

Generate a simple path

Consume PoseStamped messages on /move_base_simple/goal. These are generated by rviz.

Generate Path messages on ~plan.

Tello CLI not sending commands

I have been trying to run launch_two.py from flock2 to get both of the drones set up and running. I realised that I wasnt able to control the two drones from my VM, tello_driver does not send command and streamon commands at startup to initiate telemetry and video.
I have tried sending commands through ROS2 CLI such as

ros2 service call /tello_action tello_msgs/TelloAction "{cmd: 'takeoff'}"
waiting for service to be available...

Please advice. Thank you

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.