clydemcqueen / flock2 Goto Github PK
View Code? Open in Web Editor NEWROS2 swarm controller for DJI Tello drones
License: BSD 3-Clause "New" or "Revised" License
ROS2 swarm controller for DJI Tello drones
License: BSD 3-Clause "New" or "Revised" License
Consume these messages: ~pose, ~marker/id/pose
Generate these messages: ~filtered_pose, ~marker/id/filtered_pose
usb_camera isn't required for flock2, so this will simplify dependencies.
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:
UBUNTU 18.04 LTS
ROS2 ELOQUENT
When attempting to build with colcon build this error is produced:
Failed <<< gscam [0.47s, exited with code 2]
Summary: 1 package finished [0.80s]
1 package failed: gscam
1 package had stderr output: gscam
Compute uncertainty for drone and marker poses.
Publish PoseWithCovarianceStamped messages for the drone and markers on these topics: ~pose, ~marker/id/pose.
I am considering using this for research. Are there any videos on Youtube or something showing off the implementation of this? Thanks.
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.
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
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.
All topics such as ~pose should get pushed down to /drone_id/pose.
ROS2 Eloquent is expected 11/22, betas are out now. Create a dashing branch, then port to master to Eloquent.
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:
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
teleop_launch.py launches a robot_state_publisher with an urdf, but the robot_description topic is not appearing in rviz.
Somebody else has also described this problem: https://answers.ros.org/question/304645/ros2-robot-state-publisher-publishes-empty-robot_description/
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
)
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?
It's possible that we'll need to rewrite the image pipeline in C++, and launch the C++ nodes in the same process to avoid serializing & deserializing image data between nodes.
See also: https://github.com/ros2/ros2/wiki/About-Quality-of-Service-Settings
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
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
Consume PoseStamped messages on /move_base_simple/goal. These are generated by rviz.
Generate Path messages on ~plan.
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
π Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. πππ
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google β€οΈ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.