I am trying to port a popular package by the name of SJTU drone from Gazebo Classic 11 to Gazebo Fortress, given that classic has reached its end-of-life.
I have the following spawn drone script but it doesnt work for Gazebo Fortress. I am unable to figure out my mistake here:
#!/usr/bin/env python3 # Copyright 2023 Georg Novotny # Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0 (the "License"); # -*- coding: utf-8 -*- import sys import rclpy from geometry_msgs.msg import Pose from gazebo_msgs.srv import SpawnEntity import tf_transformations # Import for quaternion conversion def main(args=None): rclpy.init(args=args) node = rclpy.create_node('spawn_drone') cli = node.create_client(SpawnEntity, '/spawn_entity') if len(sys.argv) < 9: node.get_logger().error("Usage: spawn_drone.py <robot_description> <namespace> <x> <y> <z> <roll> <pitch> <yaw>") return # Parse input arguments content = sys.argv[1] namespace = sys.argv[2] x, y, z = float(sys.argv[3]), float(sys.argv[4]), float(sys.argv[5]) roll, pitch, yaw = float(sys.argv[6]), float(sys.argv[7]), float(sys.argv[8]) # Convert roll, pitch, yaw to quaternion quaternion = tf_transformations.quaternion_from_euler(roll, pitch, yaw) # Prepare the spawn entity request req = SpawnEntity.Request() req.name = namespace req.xml = content req.robot_namespace = namespace req.reference_frame = "world" # Set the initial pose req.initial_pose.position.x = x req.initial_pose.position.y = y req.initial_pose.position.z = z req.initial_pose.orientation.x = quaternion[0] req.initial_pose.orientation.y = quaternion[1] req.initial_pose.orientation.z = quaternion[2] req.initial_pose.orientation.w = quaternion[3] # Wait for the spawn service to be available while not cli.wait_for_service(timeout_sec=1.0): node.get_logger().info('Service not available, waiting again...') # Call the service asynchronously future = cli.call_async(req) rclpy.spin_until_future_complete(node, future) # Handle the service response if future.result() is not None: node.get_logger().info( f"Result: success={future.result().success}, status_message='{future.result().status_message}'" ) else: node.get_logger().error(f"Service call failed: {future.exception()}") node.destroy_node() rclpy.shutdown() if __name__ == '__main__': main() Also, I am unsure if changes need to be made to the urdf.xacro file of the drone
I have made some changes to the launch file too, but it doesnt work:
#!/usr/bin/env python3 # Copyright 2023 Georg Novotny # # Licensed under the GNU GENERAL PUBLIC LICENSE, Version 3.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.gnu.org/licenses/gpl-3.0.en.html # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import os import yaml from ament_index_python.packages import get_package_share_directory from launch import LaunchDescription from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, OpaqueFunction, SetEnvironmentVariable from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node from launch.launch_description_sources import PythonLaunchDescriptionSource from launch.actions import AppendEnvironmentVariable import xacro def generate_launch_description(): # Declare arguments for initial pose initial_pose_x = LaunchConfiguration("initial_pose_x", default="0.0") #-21 for improved50 world initial_pose_y = LaunchConfiguration("initial_pose_y", default="0.0") #20 for improved50 world initial_pose_z = LaunchConfiguration("initial_pose_z", default="0.0") initial_pose_roll = LaunchConfiguration("initial_pose_roll", default="0.0") initial_pose_pitch = LaunchConfiguration("initial_pose_pitch", default="0.0") initial_pose_yaw = LaunchConfiguration("initial_pose_yaw", default="0.0") use_sim_time = LaunchConfiguration("use_sim_time", default="true") use_gui = DeclareLaunchArgument("use_gui", default_value="true", choices=["true", "false"], description="Whether to execute gzclient") xacro_file_name = "sjtu_drone.urdf.xacro" ros_gz_sim = get_package_share_directory('ros_gz_sim') xacro_file = os.path.join( get_package_share_directory("sjtu_drone_description"), "urdf", xacro_file_name ) yaml_file_path = os.path.join( get_package_share_directory('sjtu_drone_bringup'), 'config', 'drone.yaml' ) robot_description_config = xacro.process_file(xacro_file, mappings={"params_path": yaml_file_path}) robot_desc = robot_description_config.toxml() # get ns from yaml model_ns = "drone" with open(yaml_file_path, 'r') as f: yaml_dict = yaml.load(f, Loader=yaml.FullLoader) model_ns = yaml_dict["namespace"] #+ "/" print("namespace: ", model_ns) world_file = os.path.join( get_package_share_directory("sjtu_drone_description"), "worlds", "empty.world" ) # Set the custom GAZEBO_MODEL_PATH gazebo_model_path = "/usr/share/gazebo-11/models" #for a global path to the models in the computer # gazebo_model_path = "../../sjtu_drone_description/tree_models" #for a relative path set_env_vars_resources = AppendEnvironmentVariable( 'GZ_SIM_RESOURCE_PATH', os.path.join(get_package_share_directory('sjtu_drone_description'), 'tree_models')) def launch_gzclient(context, *args, **kwargs): if context.launch_configurations.get('use_gui') == 'true': return [IncludeLaunchDescription( PythonLaunchDescriptionSource( os.path.join(ros_gz_sim, 'launch', 'gz_sim.launch.py') ), launch_arguments={'gz_args': ['-r -g -v4 ', world_file], 'on_exit_shutdown': 'true'}.items() )] return [] ld = LaunchDescription([ # Declare `ld` as the launch description DeclareLaunchArgument("initial_pose_x", default_value="0.0", description="Initial X position"), DeclareLaunchArgument("initial_pose_y", default_value="0.0", description="Initial Y position"), DeclareLaunchArgument("initial_pose_z", default_value="0.0", description="Initial Z position"), DeclareLaunchArgument("initial_pose_roll", default_value="0.0", description="Initial roll"), DeclareLaunchArgument("initial_pose_pitch", default_value="0.0", description="Initial pitch"), DeclareLaunchArgument("initial_pose_yaw", default_value="0.0", description="Initial yaw"), SetEnvironmentVariable('GAZEBO_MODEL_PATH', gazebo_model_path), use_gui, Node( package="robot_state_publisher", executable="robot_state_publisher", name="robot_state_publisher", namespace=model_ns, output="screen", parameters=[{"use_sim_time": use_sim_time, "robot_description": robot_desc, "frame_prefix": model_ns + "/"}], arguments=[robot_desc] ), Node( package='joint_state_publisher', executable='joint_state_publisher', name='joint_state_publisher', namespace=model_ns, output='screen', ), OpaqueFunction(function=launch_gzclient), Node( package="sjtu_drone_bringup", executable="spawn_drone", arguments=[ robot_desc, model_ns, "0", "0", "0", # x, y, z "0", "0", "0" # roll, pitch, yaw ], output="screen" ), Node( package="tf2_ros", executable="static_transform_publisher", arguments=["0", "0", "0", "0", "0", "0", "world", f"{model_ns}/odom"], output="screen" ) ]) # Add the environment variable action to the LaunchDescription ld.add_action(set_env_vars_resources) return ld I get this error:
[ruby $(which ign) gazebo-4] [Wrn] [gz.cc:99] Fuel world download failed because Fetch failed. Other errors [ruby $(which ign) gazebo-4] Unable to find or download file [ERROR] [ruby $(which ign) gazebo-4]: process has died [pid 111707, exit code 255, cmd 'ruby $(which ign) gazebo -r -g -v4 /home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_description/share/sjtu_drone_description/worlds/empty.world --force-version 6']. [INFO] [launch]: process[ruby $(which ign) gazebo-4] was required: shutting down launched system [INFO] [xterm-9]: sending signal 'SIGINT' to process[xterm-9] [INFO] [pose_to_path_node-8]: sending signal 'SIGINT' to process[pose_to_path_node-8] [INFO] [joy_node-7]: sending signal 'SIGINT' to process[joy_node-7] [INFO] [static_transform_publisher-6]: sending signal 'SIGINT' to process[static_transform_publisher-6] [ERROR] [xterm-9]: process has died [pid 111719, exit code 2, cmd 'xterm -e /home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_control/lib/sjtu_drone_control/teleop --ros-args -r __ns:=/simple_drone']. [INFO] [spawn_drone-5]: sending signal 'SIGINT' to process[spawn_drone-5] [INFO] [joint_state_publisher-3]: sending signal 'SIGINT' to process[joint_state_publisher-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] [pose_to_path_node-8] Traceback (most recent call last): [pose_to_path_node-8] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/pose_to_path_node", line 33, in <module> [pose_to_path_node-8] sys.exit(load_entry_point('sjtu-drone-bringup==0.0.0', 'console_scripts', 'pose_to_path_node')()) [pose_to_path_node-8] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/pose_to_path_node", line 25, in importlib_load_entry_point [pose_to_path_node-8] return next(matches).load() [pose_to_path_node-8] File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load [pose_to_path_node-8] module = import_module(match.group('module')) [pose_to_path_node-8] File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module [pose_to_path_node-8] return _bootstrap._gcd_import(name[level:], package, level) [pose_to_path_node-8] File "<frozen importlib._bootstrap>", line 1050, in _gcd_import [pose_to_path_node-8] File "<frozen importlib._bootstrap>", line 1027, in _find_and_load [pose_to_path_node-8] File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked [pose_to_path_node-8] File "<frozen importlib._bootstrap>", line 688, in _load_unlocked [pose_to_path_node-8] File "<frozen importlib._bootstrap_external>", line 883, in exec_module [pose_to_path_node-8] File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed [pose_to_path_node-8] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/python3.10/site-packages/sjtu_drone_bringup/gt_path.py", line 7, in <module> [joy_node-7] [INFO] [1737210878.050398581] [rclcpp]: signal_handler(signum=2) [pose_to_path_node-8] from std_msgs.msg import Float32 [pose_to_path_node-8] File "/opt/ros/humble/local/lib/python3.10/dist-packages/std_msgs/msg/__init__.py", line 7, in <module> [pose_to_path_node-8] from std_msgs.msg._float32 import Float32 # noqa: F401 [pose_to_path_node-8] KeyboardInterrupt [static_transform_publisher-6] [INFO] [1737210878.053308424] [rclcpp]: signal_handler(signum=2) [spawn_drone-5] Traceback (most recent call last): [spawn_drone-5] File "<frozen importlib._bootstrap_external>", line 975, in get_code [spawn_drone-5] File "<frozen importlib._bootstrap_external>", line 1073, in get_data [spawn_drone-5] FileNotFoundError: [Errno 2] No such file or directory: '/opt/ros/humble/local/lib/python3.10/dist-packages/gazebo_msgs/srv/__pycache__/_get_light_properties.cpython-310.pyc' [spawn_drone-5] [spawn_drone-5] During handling of the above exception, another exception occurred: [spawn_drone-5] [spawn_drone-5] Traceback (most recent call last): [spawn_drone-5] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/spawn_drone", line 33, in <module> [spawn_drone-5] sys.exit(load_entry_point('sjtu-drone-bringup==0.0.0', 'console_scripts', 'spawn_drone')()) [spawn_drone-5] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/spawn_drone", line 25, in importlib_load_entry_point [spawn_drone-5] return next(matches).load() [spawn_drone-5] File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load [spawn_drone-5] module = import_module(match.group('module')) [spawn_drone-5] File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module [spawn_drone-5] return _bootstrap._gcd_import(name[level:], package, level) [spawn_drone-5] File "<frozen importlib._bootstrap>", line 1050, in _gcd_import [spawn_drone-5] File "<frozen importlib._bootstrap>", line 1027, in _find_and_load [spawn_drone-5] File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked [spawn_drone-5] File "<frozen importlib._bootstrap>", line 688, in _load_unlocked [spawn_drone-5] File "<frozen importlib._bootstrap_external>", line 883, in exec_module [spawn_drone-5] File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed [spawn_drone-5] File "/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/python3.10/site-packages/sjtu_drone_bringup/spawn_drone.py", line 9, in <module> [spawn_drone-5] from gazebo_msgs.srv import SpawnEntity [spawn_drone-5] File "/opt/ros/humble/local/lib/python3.10/dist-packages/gazebo_msgs/srv/__init__.py", line 10, in <module> [spawn_drone-5] from gazebo_msgs.srv._get_light_properties import GetLightProperties # noqa: F401 [spawn_drone-5] File "<frozen importlib._bootstrap>", line 1027, in _find_and_load [spawn_drone-5] File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked [spawn_drone-5] File "<frozen importlib._bootstrap>", line 688, in _load_unlocked [spawn_drone-5] File "<frozen importlib._bootstrap_external>", line 879, in exec_module [spawn_drone-5] File "<frozen importlib._bootstrap_external>", line 975, in get_code [spawn_drone-5] KeyboardInterrupt [joint_state_publisher-3] Traceback (most recent call last): [joint_state_publisher-3] File "/opt/ros/humble/lib/joint_state_publisher/joint_state_publisher", line 33, in <module> [joint_state_publisher-3] sys.exit(load_entry_point('joint-state-publisher==2.4.0', 'console_scripts', 'joint_state_publisher')()) [joint_state_publisher-3] File "/opt/ros/humble/lib/joint_state_publisher/joint_state_publisher", line 25, in importlib_load_entry_point [joint_state_publisher-3] return next(matches).load() [joint_state_publisher-3] File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load [joint_state_publisher-3] module = import_module(match.group('module')) [joint_state_publisher-3] File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module [joint_state_publisher-3] return _bootstrap._gcd_import(name[level:], package, level) [joint_state_publisher-3] File "<frozen importlib._bootstrap>", line 1050, in _gcd_import [joint_state_publisher-3] File "<frozen importlib._bootstrap>", line 1027, in _find_and_load [joint_state_publisher-3] File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked [joint_state_publisher-3] File "<frozen importlib._bootstrap>", line 688, in _load_unlocked [joint_state_publisher-3] File "<frozen importlib._bootstrap_external>", line 883, in exec_module [joint_state_publisher-3] File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed [joint_state_publisher-3] File "/opt/ros/humble/lib/python3.10/site-packages/joint_state_publisher/joint_state_publisher.py", line 45, in <module> [joint_state_publisher-3] import std_msgs.msg [joint_state_publisher-3] File "/opt/ros/humble/local/lib/python3.10/dist-packages/std_msgs/msg/__init__.py", line 11, in <module> [joint_state_publisher-3] from std_msgs.msg._header import Header # noqa: F401 [joint_state_publisher-3] KeyboardInterrupt [robot_state_publisher-2] [INFO] [1737210878.063715159] [rclcpp]: signal_handler(signum=2) [rviz2-1] [INFO] [1737210878.067698314] [rclcpp]: signal_handler(signum=2) [ERROR] [spawn_drone-5]: process has died [pid 111710, exit code -2, cmd '/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/spawn_drone <?xml version="1.0" ?><!-- =================================================================================== --><!-- | This document was autogenerated by xacro from /home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_description/share/sjtu_drone_description/urdf/sjtu_drone.urdf.xacro | --><!-- | EDITING THIS FILE BY HAND IS NOT RECOMMENDED | --><!-- =================================================================================== --><robot name="sjtu_drone"><link name="base_footprint"/><joint name="base_footprint_joint" type="fixed"><origin rpy="0 0 0" xyz="0 0 0"/><parent link="base_footprint"/><child link="base_link"/></joint><link name="base_link"><inertial><mass value="1.477"/><origin rpy="0 0 0" xyz="0 0 0"/><inertia ixx="0.1152" ixy="0" ixz="0" iyy="0.1152" iyz="0" izz="0.218"/></inertial><collision name="sjtu_drone_collision"><origin rpy="0 0 0" xyz="0 0 0"/><geometry><mesh filename="file:///home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_description/share/sjtu_drone_description/models/sjtu_drone/quadrotor_4.stl"/><!-- <mesh filename="package://sjtu_drone/quadrotor_4.stl"/> --></geometry></collision><visual name="sjtu_drone_visual"><origin rpy="0 0 0" xyz="0 0 0"/><geometry><mesh filename="file:///home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_description/share/sjtu_drone_description/models/sjtu_drone/quadrotor_4.dae"/><!-- <mesh filename="package://sjtu_drone/quadrotor_4.dae"/> --></geometry></visual></link><joint name="sonar_joint" type="fixed"><parent link="base_link"/><child link="sonar_link"/><origin rpy="0 1.570796326795 0" xyz="0 0 0"/></joint><link name="sonar_link"/><!-- You can change the position of the Lidar here. --><joint name="lidar_joint" type="fixed"><parent link="base_link"/><child link="laser_frame"/><origin rpy="0 0 0" xyz="0 0 0.09"/></joint><link name="laser_frame"><visual><geometry><cylinder length="0.04" radius="0.05"/></geometry><material name="red"/></visual><collision><geometry><cylinder length="0.04" radius="0.05"/></geometry></collision><!-- <xacro:inertial_cylinder mass="0.1" length="0.04" radius="0.05"> <origin xyz="0 0 0" rpy="0 0 0"/> </xacro:inertial_cylinder> --></link><joint name="themal_joint" type="fixed"><parent link="base_link"/><child link="thermal_frame"/><origin rpy="0 0 0" xyz="0 0 -0.05"/></joint><link name="thermal_frame"><visual><geometry><cylinder length="0.03" radius="0.03"/></geometry><material name="red"/></visual><collision><geometry><cylinder length="0.03" radius="0.03"/></geometry></collision><!-- <xacro:inertial_cylinder mass="0.1" length="0.04" radius="0.05"> <origin xyz="0 0 0" rpy="0 0 0"/> </xacro:inertial_cylinder> --></link><joint name="front_cam_joint" type="fixed"><origin rpy="0 0 0" xyz="0.2 0 0"/><parent link="base_link"/><child link="front_cam_link"/></joint><link name="front_cam_link"/><joint name="bottom_cam_joint" type="fixed"><origin rpy="0 1.570796326795 0" xyz="0 0 0"/><parent link="base_link"/><child link="bottom_cam_link"/></joint><link name="bottom_cam_link"/><gazebo><plugin filename="libplugin_drone.so" name="simple_drone"><ros><namespace>simple_drone</namespace><remapping>cmd_vel:=cmd_vel</remapping><remapping>imu:=imu</remapping><remapping>sonar:=sonar</remapping><remapping>camera_front:=camera_front</remapping><remapping>camera_bottom:=camera_bottom</remapping><remapping>camera_front_info:=camera_front_info</remapping><remapping>camera_bottom_info:=camera_bottom_info</remapping><remapping>gps:=gps</remapping><remapping>lidar_plugin/out:=scan</remapping></ros><bodyName>base_link</bodyName><pub_odom>true</pub_odom><rollpitchProportionalGain>10.0</rollpitchProportionalGain><rollpitchDifferentialGain>5.0</rollpitchDifferentialGain><rollpitchLimit>0.5</rollpitchLimit><yawProportionalGain>2.0</yawProportionalGain><yawDifferentialGain>1.0</yawDifferentialGain><yawLimit>1.5</yawLimit><velocityXYProportionalGain>5.0</velocityXYProportionalGain><velocityXYDifferentialGain>2.3</velocityXYDifferentialGain><velocityXYLimit>2</velocityXYLimit><velocityZProportionalGain>5.0</velocityZProportionalGain><velocityZIntegralGain>0.0</velocityZIntegralGain><velocityZDifferentialGain>1.0</velocityZDifferentialGain><velocityZLimit>-1</velocityZLimit><positionXYProportionalGain>1.1</positionXYProportionalGain><positionXYDifferentialGain>0.0</positionXYDifferentialGain><positionXYIntegralGain>0.0</positionXYIntegralGain><positionXYLimit>5</positionXYLimit><positionZProportionalGain>1.0</positionZProportionalGain><positionZDifferentialGain>0.2</positionZDifferentialGain><positionZIntegralGain>0.0</positionZIntegralGain><positionZLimit>-1</positionZLimit><maxForce>30</maxForce><motionSmallNoise>0.0</motionSmallNoise><motionDriftNoise>0.0</motionDriftNoise><motionDriftNoiseTime>50</motionDriftNoiseTime></plugin></gazebo><!-- Sensors --><!-- IMU sensor in 100fps --><gazebo reference="base_link"><sensor name="sensor_imu" type="imu"><always_on> 1 </always_on><visualize>1</visualize><update_rate> 100 </update_rate><pose> 0 0 0 0 0 0 </pose><imu><noise><type>gaussian</type><rate><mean> 0 </mean><stddev> 0.1 </stddev></rate><accel><mean> 0 </mean><stddev> 0.1 </stddev></accel></noise></imu><plugin filename="libgazebo_ros_imu_sensor.so" name="imu"><ros><namespace>simple_drone</namespace><!-- <remapping>imu:=imu</remapping> --></ros><initial_orientation_as_reference>false</initial_orientation_as_reference><frame_name>simple_drone/base_link</frame_name></plugin></sensor></gazebo><!-- For Lidar sensor --><gazebo reference="laser_frame"><sensor name="lidar" type="ray"><always_on>1</always_on><visualize>0</visualize><update_rate>20</update_rate><pose>0 0 0 0 0 0</pose><!-- Adjust the pose of the lidar relative to base_link --><ray><scan><horizontal><samples>360</samples><!-- Number of samples per scan --><resolution>1.0</resolution><min_angle>-3.1416</min_angle><!-- Minimum angle of the scan (in radians) --><max_angle>3.1416</max_angle><!-- Maximum angle of the scan (in radians) --></horizontal><vertical><samples>30</samples><!-- Multiple vertical scan lines to create 3D data --><min_angle>-0.3926</min_angle><!-- Lower vertical angle (in radians) --><max_angle>0.3926</max_angle><!-- Upper vertical angle (in radians) --><!-- <resolution>2</resolution> --></vertical></scan><range><min>0.5</min><!-- Minimum range in meters --><max>20.0</max><!-- Maximum range in meters --><resolution>0.01</resolution><!-- Range resolution --></range><noise><type>gaussian</type><mean>0.0</mean><stddev>0.1</stddev><!-- Noise stddev for the sensor --></noise></ray><plugin filename="libgazebo_ros_ray_sensor.so" name="lidar_plugin"><ros><namespace>simple_drone</namespace><remapping>lidar_plugin/out:=scan</remapping><!-- Topic for lidar data --></ros><frame_name>simple_drone/base_link</frame_name><output_type>sensor_msgs/PointCloud2</output_type></plugin></sensor></gazebo><gazebo reference="thermal_frame"><sensor name="thermal_camera_sensor" type="camera"><camera><image><width>160</width><height>120</height><format>R8G8B8</format></image><horizontal_fov>1.5708</horizontal_fov><!-- 90 degrees in radians --><clip><near>0.01</near><far>100</far></clip><update_rate>10</update_rate></camera><plugin filename="libgazebo_ros_thermal_depth_camera.so" name="thermal_camera_controller"><always_on>true</always_on><update_rate>10</update_rate><image_topic>/thermal_camera/image_raw</image_topic><camera_info_topic>/thermal_camera/camera_info</camera_info_topic><frame_name>thermal_optical_frame</frame_name></plugin></sensor></gazebo></robot> simple_drone 0 0 0 0 0 0 --ros-args']. [ERROR] [pose_to_path_node-8]: process has died [pid 111717, exit code -2, cmd '/home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/lib/sjtu_drone_bringup/pose_to_path_node --ros-args -r __node:=pose_to_path --params-file /tmp/launch_params_94h0utpc --params-file /tmp/launch_params_n0uhjhnd --params-file /tmp/launch_params_r5w0nw72 --params-file /tmp/launch_params_mxpbuwft --params-file /tmp/launch_params_6ova1c6o --params-file /tmp/launch_params_8e1_w1ct']. [ERROR] [joint_state_publisher-3]: process has died [pid 111705, exit code -2, cmd '/opt/ros/humble/lib/joint_state_publisher/joint_state_publisher --ros-args -r __node:=joint_state_publisher -r __ns:=/simple_drone']. [rviz2-1] [INFO] [1737210878.166216540] [rviz2]: Stereo is NOT SUPPORTED [rviz2-1] [INFO] [1737210878.166289168] [rviz2]: OpenGl version: 4.6 (GLSL 4.6) [rviz2-1] [INFO] [1737210878.201666780] [rviz2]: Stereo is NOT SUPPORTED [rviz2-1] terminate called after throwing an instance of 'rclcpp::exceptions::RCLError' [rviz2-1] what(): failed to create guard condition: the given context is not valid, either rcl_init() was not called or rcl_shutdown() was called., at ./src/rcl/guard_condition.c:67 [ERROR] [rviz2-1]: process has died [pid 111701, exit code -6, cmd '/opt/ros/humble/lib/rviz2/rviz2 -d /home/shameer/Documents/Testing for ignition/SLAM_Jan_17th/SLAM_New/sjtu_drone_ros2/install/sjtu_drone_bringup/share/sjtu_drone_bringup/rviz/rviz2.rviz --ros-args -r __node:=rviz2']. [INFO] [static_transform_publisher-6]: process has finished cleanly [pid 111712] [INFO] [robot_state_publisher-2]: process has finished cleanly [pid 111703] [INFO] [joy_node-7]: process has finished cleanly [pid 111715] Thank you for your help!