From 2dcc6d98bf48b74b100704e0c22f52c0bb078642 Mon Sep 17 00:00:00 2001 From: chloegaugry Date: Tue, 8 Jul 2025 11:50:06 +0200 Subject: [PATCH 1/3] Remplacer le contenu de la branche distante --- src/robot_description/CMakeLists.txt | 8 +- src/robot_description/launch/gazebo.launch.py | 254 ++++++++++++------ .../launch/gazebo_move.launch.py | 92 ++++++- .../materials/scripts/aruco_plane.material | 239 ---------------- .../scripts/robot_materials_PLA.material | 27 ++ .../media/materials/textures/id0.png | Bin 5475 -> 0 bytes .../media/materials/textures/id1.png | Bin 2551 -> 0 bytes .../media/materials/textures/id10.png | Bin 3081 -> 0 bytes .../media/materials/textures/id11.png | Bin 5278 -> 0 bytes .../media/materials/textures/id12.png | Bin 4530 -> 0 bytes .../media/materials/textures/id13.png | Bin 4768 -> 0 bytes .../media/materials/textures/id14.png | Bin 4675 -> 0 bytes .../media/materials/textures/id15.png | Bin 4750 -> 0 bytes .../media/materials/textures/id16.png | Bin 6319 -> 0 bytes .../media/materials/textures/id17.png | Bin 6215 -> 0 bytes .../media/materials/textures/id18.png | Bin 6120 -> 0 bytes .../media/materials/textures/id19.png | Bin 6435 -> 0 bytes .../media/materials/textures/id2.png | Bin 3071 -> 0 bytes .../media/materials/textures/id3.png | Bin 4639 -> 0 bytes .../media/materials/textures/id4.png | Bin 3079 -> 0 bytes .../media/materials/textures/id5.png | Bin 4444 -> 0 bytes .../media/materials/textures/id6.png | Bin 4571 -> 0 bytes .../media/materials/textures/id7.png | Bin 4370 -> 0 bytes .../media/materials/textures/id8.png | Bin 4594 -> 0 bytes .../media/materials/textures/id9.png | Bin 4341 -> 0 bytes .../aruco_block_long/meshes/Block_Long.png | Bin 8484 -> 0 bytes .../aruco_block_long/meshes/block_long.dae | 144 ---------- .../aruco_block_long/meshes/block_long.stl | Bin 2284 -> 0 bytes .../models/aruco_block_long/model.config | 16 -- .../models/aruco_block_long/model.sdf | 43 --- .../checkerboard/checkerboard_plane.sdf | 16 -- .../materials/textures/checker.png | Bin 17270 -> 0 bytes .../meshes/checkerboard_plane.dae | 126 --------- .../models/checkerboard/model.config | 16 -- src/robot_description/urdf/aruco.urdf.xacro | 84 ------ .../urdf/r5a_v_ros.urdf.xacro | 61 +++-- src/robot_description/worlds/spotlight.world | 142 ++++++++-- 37 files changed, 461 insertions(+), 807 deletions(-) delete mode 100644 src/robot_description/media/materials/scripts/aruco_plane.material create mode 100644 src/robot_description/media/materials/scripts/robot_materials_PLA.material delete mode 100644 src/robot_description/media/materials/textures/id0.png delete mode 100644 src/robot_description/media/materials/textures/id1.png delete mode 100644 src/robot_description/media/materials/textures/id10.png delete mode 100644 src/robot_description/media/materials/textures/id11.png delete mode 100644 src/robot_description/media/materials/textures/id12.png delete mode 100644 src/robot_description/media/materials/textures/id13.png delete mode 100644 src/robot_description/media/materials/textures/id14.png delete mode 100644 src/robot_description/media/materials/textures/id15.png delete mode 100644 src/robot_description/media/materials/textures/id16.png delete mode 100644 src/robot_description/media/materials/textures/id17.png delete mode 100644 src/robot_description/media/materials/textures/id18.png delete mode 100644 src/robot_description/media/materials/textures/id19.png delete mode 100644 src/robot_description/media/materials/textures/id2.png delete mode 100644 src/robot_description/media/materials/textures/id3.png delete mode 100644 src/robot_description/media/materials/textures/id4.png delete mode 100644 src/robot_description/media/materials/textures/id5.png delete mode 100644 src/robot_description/media/materials/textures/id6.png delete mode 100644 src/robot_description/media/materials/textures/id7.png delete mode 100644 src/robot_description/media/materials/textures/id8.png delete mode 100644 src/robot_description/media/materials/textures/id9.png delete mode 100755 src/robot_description/models/aruco_block_long/meshes/Block_Long.png delete mode 100755 src/robot_description/models/aruco_block_long/meshes/block_long.dae delete mode 100755 src/robot_description/models/aruco_block_long/meshes/block_long.stl delete mode 100755 src/robot_description/models/aruco_block_long/model.config delete mode 100755 src/robot_description/models/aruco_block_long/model.sdf delete mode 100644 src/robot_description/models/checkerboard/checkerboard_plane.sdf delete mode 100644 src/robot_description/models/checkerboard/materials/textures/checker.png delete mode 100644 src/robot_description/models/checkerboard/meshes/checkerboard_plane.dae delete mode 100644 src/robot_description/models/checkerboard/model.config delete mode 100644 src/robot_description/urdf/aruco.urdf.xacro diff --git a/src/robot_description/CMakeLists.txt b/src/robot_description/CMakeLists.txt index 8f1cd2e..e84453f 100644 --- a/src/robot_description/CMakeLists.txt +++ b/src/robot_description/CMakeLists.txt @@ -21,5 +21,11 @@ install( ${CMAKE_CURRENT_SOURCE_DIR}/urdf/r5a_v_ros.urdf.xacro DESTINATION share/${PROJECT_NAME}/urdf ) +# Installer les matériaux +install(DIRECTORY media/materials/ + DESTINATION share/${PROJECT_NAME}/materials/) -ament_package() +install(DIRECTORY worlds/ + DESTINATION share/${PROJECT_NAME}/worlds/) + +ament_package() \ No newline at end of file diff --git a/src/robot_description/launch/gazebo.launch.py b/src/robot_description/launch/gazebo.launch.py index f5ac216..f708b13 100644 --- a/src/robot_description/launch/gazebo.launch.py +++ b/src/robot_description/launch/gazebo.launch.py @@ -1,9 +1,9 @@ """ @file gazebo.launch.py -@brief Launch file for setting up the robot simulation in Gazebo. +@brief Launch file for setting up the robot simulation in Gazebo with custom materials and lighting. -This launch file initializes the robot simulation in Gazebo, spawns the robot entity, -and starts the necessary nodes and controllers for the robot operation. +This launch file initializes the robot simulation in Gazebo with custom spotlight world, +custom materials, spawns the robot entity, and starts the necessary nodes and controllers. """ import os @@ -17,6 +17,7 @@ ExecuteProcess, IncludeLaunchDescription, RegisterEventHandler, + SetEnvironmentVariable, ) from launch.event_handlers import OnProcessExit from launch.launch_description_sources import PythonLaunchDescriptionSource @@ -26,103 +27,204 @@ def generate_launch_description(): """ @brief Generates the launch description for the robot simulation. - This function sets up the robot description, launches Gazebo, spawns the robot entity, - and starts the necessary nodes and controllers. + This function sets up the robot description, launches Gazebo with custom spotlight world, + loads custom materials, spawns the robot entity, and starts the necessary controllers. @return LaunchDescription object containing all the nodes and configurations to launch. """ - # Specify the name of the package and path to xacro file within the package - pkg_name = "robot_description" # Name of the robot description package - share_dir = get_package_share_directory( - pkg_name - ) # Get the share directory of the package - - # Use xacro to process the file - xacro_file = os.path.join( - share_dir, "urdf", "r5a_v_ros.urdf.xacro" - ) # Full path to the XACRO file - robot_description_xacro = xacro.process_file(xacro_file) # Process the XACRO file - robot_urdf = ( - robot_description_xacro.toxml() - ) # Convert the processed XACRO to URDF XML - - # Configure the robot_state_publisher node + # Package configuration + pkg_name = "robot_description" + share_dir = get_package_share_directory(pkg_name) + + print("🚀 Initializing Robot Simulation with Custom Materials and Lighting") + print("=" * 70) + + # Configure paths for custom materials + materials_path = os.path.join(share_dir, "materials") + world_file = os.path.join(share_dir, "worlds", "spotlight.world") + xacro_file = os.path.join(share_dir, "urdf", "r5a_v_ros.urdf.xacro") + + # Check materials + if os.path.exists(materials_path): + print(f"✅ Custom materials found: {materials_path}") + if os.path.exists(os.path.join(materials_path, "scripts", "robot_materials_PLA.material")): + print("✅ PLA materials file found") + else: + print("⚠️ robot_materials_PLA.material not found in scripts/") + else: + print(f"⚠️ Materials directory not found: {materials_path}") + print(" Robot will use default Gazebo materials") + + # Check world file + if os.path.exists(world_file): + print(f"✅ Custom spotlight world found: {world_file}") + use_custom_world = True + else: + print(f"⚠️ Spotlight world not found: {world_file}") + print(" Using default Gazebo world") + use_custom_world = False + + # Check URDF file + if os.path.exists(xacro_file): + print(f"✅ Robot URDF found: {xacro_file}") + else: + print(f"❌ Robot URDF not found: {xacro_file}") + + print("=" * 70) + + # Process robot description + robot_description_xacro = xacro.process_file(xacro_file) + robot_urdf = robot_description_xacro.toxml() + + # Environment variables for custom materials + set_gazebo_resource_path = SetEnvironmentVariable( + name='GAZEBO_RESOURCE_PATH', + value=[ + materials_path, + ':', + os.environ.get('GAZEBO_RESOURCE_PATH', '') + ] + ) + + set_gazebo_model_path = SetEnvironmentVariable( + name='GAZEBO_MODEL_PATH', + value=[ + share_dir, + ':', + os.environ.get('GAZEBO_MODEL_PATH', '') + ] + ) + + # Robot state publisher node node_robot_state_publisher = Node( - package="robot_state_publisher", # Package containing the node - executable="robot_state_publisher", # Executable name - output="screen", # Output mode + package="robot_state_publisher", + executable="robot_state_publisher", + name="robot_state_publisher", + output="screen", parameters=[ {"robot_description": robot_urdf}, {"use_sim_time": True}, - ], # Parameters + ], ) - # Node to spawn the entity in Gazebo + # Gazebo launch configuration + gazebo_launch_args = { + 'verbose': 'true', + 'pause': 'false', + 'use_sim_time': 'true', + } + + # Add custom world if available + if use_custom_world: + gazebo_launch_args['world'] = world_file + print("🌟 Gazebo will launch with custom spotlight world for enhanced reflections") + + # Gazebo server and client launch + gazebo = IncludeLaunchDescription( + PythonLaunchDescriptionSource([ + os.path.join(get_package_share_directory("gazebo_ros"), "launch"), + "/gazebo.launch.py", + ]), + launch_arguments=gazebo_launch_args.items() + ) + + # Robot spawn node spawn_entity = Node( - package="gazebo_ros", # Package containing the node - executable="spawn_entity.py", # Executable script to spawn entities + package="gazebo_ros", + executable="spawn_entity.py", + name="spawn_entity", arguments=[ - "-topic", - "/robot_description", - "-entity", - "armr5", - ], # Arguments for spawning + "-topic", "/robot_description", + "-entity", "armr5", + "-x", "0.0", + "-y", "0.0", + "-z", "0.1", + ], output="screen", ) - # Include the Gazebo launch file - gazebo = IncludeLaunchDescription( - PythonLaunchDescriptionSource( - [ - os.path.join(get_package_share_directory("gazebo_ros"), "launch"), - "/gazebo.launch.py", - ] - ), - ) - - # Commands to load and start controllers after spawning the robot - load_joint_states_controller = ExecuteProcess( + # Joint state broadcaster controller + load_joint_state_broadcaster = ExecuteProcess( cmd=[ - "ros2", - "control", - "load_controller", - "--set-state", - "active", + "ros2", "control", "load_controller", + "--set-state", "active", "joint_state_broadcaster", - ], # Command to load and activate joint_state_broadcaster + ], output="screen", ) + # Arm controller load_arm_controller = ExecuteProcess( cmd=[ - "ros2", - "control", - "load_controller", - "--set-state", - "active", + "ros2", "control", "load_controller", + "--set-state", "active", "arm_controller", - ], # Command to load and activate arm_controller + ], output="screen", ) - # Return the LaunchDescription with all the nodes and event handlers - return LaunchDescription( - [ - gazebo, - node_robot_state_publisher, - spawn_entity, - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=spawn_entity, - on_exit=[load_joint_states_controller], - ) - ), - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=load_joint_states_controller, - on_exit=[load_arm_controller], - ) - ), - ] + # Joint state publisher (for manual control if needed) + joint_state_publisher = Node( + package="joint_state_publisher", + executable="joint_state_publisher", + name="joint_state_publisher", + parameters=[{"use_sim_time": True}], + condition=lambda: not os.path.exists("/tmp/gazebo_controllers_active") ) + + # Startup info node + info_node = ExecuteProcess( + cmd=[ + "bash", "-c", + "sleep 5 && echo '✅ Robot simulation ready!' && " + "echo '🎮 Test robot movement:' && " + "echo 'ros2 topic pub /arm_controller/joint_trajectory trajectory_msgs/msg/JointTrajectory \"{joint_names: [R0_Yaw, R1_Pitch, R2_Pitch, R3_Yaw, R4_Pitch], points: [{positions: [0.5, 0.5, 0.5, 0.5, 0.5], time_from_start: {sec: 3}}]}\" --once'" + ], + output="screen", + ) + + # Launch description with proper sequencing + return LaunchDescription([ + # Environment setup + set_gazebo_resource_path, + set_gazebo_model_path, + + # Core simulation + gazebo, + node_robot_state_publisher, + joint_state_publisher, + + # Sequential robot spawning and controller loading + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=gazebo, + on_exit=[ + ExecuteProcess(cmd=["sleep", "3"], output="screen"), # Wait for Gazebo + ] + ) + ), + + spawn_entity, + + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=spawn_entity, + on_exit=[load_joint_state_broadcaster], + ) + ), + + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=load_joint_state_broadcaster, + on_exit=[load_arm_controller], + ) + ), + + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=load_arm_controller, + on_exit=[info_node], + ) + ), + ]) \ No newline at end of file diff --git a/src/robot_description/launch/gazebo_move.launch.py b/src/robot_description/launch/gazebo_move.launch.py index 9b8d312..6719348 100644 --- a/src/robot_description/launch/gazebo_move.launch.py +++ b/src/robot_description/launch/gazebo_move.launch.py @@ -2,9 +2,9 @@ @file gazebo_move.launch.py @brief Launch file for setting up the robot simulation and MoveIt configurations. -This launch file initializes the robot simulation in Gazebo, spawns the robot entity, -sets up the MoveIt configuration, and starts the necessary nodes and controllers -for the robot operation. +This launch file initializes the robot simulation in Gazebo with custom spotlight world, +spawns the robot entity, sets up the MoveIt configuration, and starts the necessary +nodes and controllers for the robot operation. Modified to include custom plastic black materials. """ import os @@ -19,6 +19,7 @@ ExecuteProcess, IncludeLaunchDescription, RegisterEventHandler, + SetEnvironmentVariable, ) from launch.event_handlers import OnProcessExit from launch.launch_description_sources import PythonLaunchDescriptionSource @@ -27,8 +28,8 @@ def generate_launch_description(): """ @brief Generates the launch description for the robot simulation and MoveIt setup. - This function sets up the robot description, launches Gazebo, spawns the robot entity, - configures MoveIt, and starts the necessary nodes and controllers. + This function sets up the robot description, launches Gazebo with custom spotlight world, + spawns the robot entity, configures MoveIt, and starts the necessary nodes and controllers. @return LaunchDescription object containing all the nodes and configurations to launch. """ @@ -39,6 +40,28 @@ def generate_launch_description(): pkg_name ) # Get the share directory of the package + # Configure custom materials path for Gazebo + materials_path = os.path.join(share_dir, "materials") + + # Path to custom spotlight world + world_file = os.path.join(share_dir, "worlds", "spotlight.world") + + # Check if materials directory exists + if not os.path.exists(materials_path): + print(f"⚠️ Warning: Materials directory not found at {materials_path}") + print(" Robot will use default Gazebo materials instead of custom plastic materials") + else: + print(f"✅ Custom materials found at: {materials_path}") + + # Check if custom world exists + if os.path.exists(world_file): + print(f"✅ Using custom spotlight world: {world_file}") + print(f"🌟 Enhanced lighting will be used for better reflections") + else: + print(f"⚠️ Custom spotlight world not found at {world_file}") + print(" Using default Gazebo world instead") + world_file = "" # Use default world + # Use xacro to process the file xacro_file = os.path.join( share_dir, "urdf", "r5a_v_ros.urdf.xacro" @@ -72,7 +95,17 @@ def generate_launch_description(): output="screen", ) - # Include the Gazebo launch file + # Include the Gazebo launch file with custom world and materials + gazebo_launch_args = { + 'verbose': 'true', # Enable verbose output for debugging materials + 'pause': 'false', # Don't pause simulation on start + } + + # Add world file if it exists + if world_file: + gazebo_launch_args['world'] = world_file + print(f"💡 Gazebo will launch with spotlight world for maximum reflections") + gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource( [ @@ -80,6 +113,7 @@ def generate_launch_description(): "/gazebo.launch.py", ] ), + launch_arguments=gazebo_launch_args.items() ) # Commands to load and start controllers after spawning the robot @@ -135,12 +169,54 @@ def generate_launch_description(): parameters=[config_dict], # Parameters including MoveIt configurations ) + # Environment variables to configure Gazebo for custom materials + set_gazebo_resource_path = SetEnvironmentVariable( + name='GAZEBO_RESOURCE_PATH', + value=[ + materials_path, + ':', + os.environ.get('GAZEBO_RESOURCE_PATH', '') + ] + ) + + set_gazebo_model_path = SetEnvironmentVariable( + name='GAZEBO_MODEL_PATH', + value=[ + share_dir, + ':', + os.environ.get('GAZEBO_MODEL_PATH', '') + ] + ) + + # Optional: Add a small delay before spawning to ensure Gazebo is fully loaded + delay_spawn_entity = ExecuteProcess( + cmd=['sleep', '2'], + output='screen' + ) + # Return the LaunchDescription with all the nodes and event handlers return LaunchDescription( [ + # Set environment variables first for custom materials + set_gazebo_resource_path, + set_gazebo_model_path, + + # Launch Gazebo with custom spotlight world gazebo, + + # Robot state publisher node_robot_state_publisher, - spawn_entity, + + # Delay before spawning to ensure Gazebo is ready + delay_spawn_entity, + + # Sequential controller and node loading with proper dependencies + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=delay_spawn_entity, + on_exit=[spawn_entity], + ) + ), RegisterEventHandler( event_handler=OnProcessExit( target_action=spawn_entity, @@ -160,4 +236,4 @@ def generate_launch_description(): ) ), ] - ) + ) \ No newline at end of file diff --git a/src/robot_description/media/materials/scripts/aruco_plane.material b/src/robot_description/media/materials/scripts/aruco_plane.material deleted file mode 100644 index dbe8e0d..0000000 --- a/src/robot_description/media/materials/scripts/aruco_plane.material +++ /dev/null @@ -1,239 +0,0 @@ -material id0_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id0.png - scale 1 1 - } - } - } -} - -material id1_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id1.png - scale 1 1 - } - } - } -} - -material id2_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id2.png - scale 1 1 - } - } - } -} - -material id3_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id3.png - scale 1 1 - } - } - } -} - -material id4_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id4.png - scale 1 1 - } - } - } -} - -material id5_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id5.png - scale 1 1 - } - } - } -} - -material id6_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id6.png - scale 1 1 - } - } - } -} - -material id7_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id7.png - scale 1 1 - } - } - } -} - -material id8_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id8.png - scale 1 1 - } - } - } -} - -material id9_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id9.png - scale 1 1 - } - } - } -} - -material id10_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id10.png - scale 1 1 - } - } - } -} - -material id11_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id11.png - scale 1 1 - } - } - } -} - -material id12_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id12.png - scale 1 1 - } - } - } -} - -material id13_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id13.png - scale 1 1 - } - } - } -} - -material id14_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id14.png - scale 1 1 - } - } - } -} - -material id15_Plane_Material -{ - technique - { - pass - { - texture_unit - { - texture id15.png - scale 1 1 - } - } - } -} diff --git a/src/robot_description/media/materials/scripts/robot_materials_PLA.material b/src/robot_description/media/materials/scripts/robot_materials_PLA.material new file mode 100644 index 0000000..70a5c1a --- /dev/null +++ b/src/robot_description/media/materials/scripts/robot_materials_PLA.material @@ -0,0 +1,27 @@ +material PlasticBlackGlossy +{ + technique + { + pass + { + ambient 0.1 0.1 0.1 1.0 + diffuse 0.15 0.15 0.15 1.0 + specular 0.3 0.3 0.3 1.0 50.0 + emissive 0.0 0.0 0.0 1.0 + } + } +} +material PlasticOffWhite +{ + technique + { + pass + { + ambient 0.75 0.75 0.7 1.0 + diffuse 0.9 0.9 0.85 1.0 + specular 0.2 0.2 0.2 1.0 30.0 + emissive 0.0 0.0 0.0 1.0 + + } + } +} \ No newline at end of file diff --git a/src/robot_description/media/materials/textures/id0.png b/src/robot_description/media/materials/textures/id0.png deleted file mode 100644 index 7794fe56b7a3f6199e8957b8d2aed783658833f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5475 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 diff --git a/src/robot_description/media/materials/textures/id10.png b/src/robot_description/media/materials/textures/id10.png deleted file mode 100644 index 776b1d42654d51515c7e78900e15ecf9ecb5795c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3081 zcmcguYgAKL7QP^$pfFY#5m8dLf+Hdcq6jDqh&)8V2bErtYX};|Xi&o|L_#DeD|G-n zp%6sGDpOu#7=)tXVR%GA4FoX|2_{jCfrda-437YwUTnM8%$oVpE?x8Eth2v;_rCi( z`|f@AW$g*}Gc{Rm0zr^zfWOZ^2+|YItp)Q?O|0Ru8gw&=_6qWXpsMVJGm(ZU{yfTm zUl0T(+d>c{9fEYIiZKL1@mL5_;UUP413{LjuGH<_20{95dv=HJWHOl*6%_!0(a}*K zADFH@pOG|fmcVA!M+}zxE@7|HgbfCK^|BhI}r30XeBB!$`2msm~8fuP+n#x2?m4Xftze7YOBCH!cD!a0h zoem>p!4S|5iC|JzPPvb2WhpQ(1qLGz(<9;ZYJpZ(BUS-%IhA~=2Fz%w zk+4J};c~fUWo3Kz>`~k+rWf$?^78EM?bokg4`wu~dRAIm8hRu+g@-034u*LQIDIaP zxTsqIBZ!C-1zyzv4S#?e7X!oOYdpnUFz^Fi)1H%Fz|UbsAw+T%N|Iff&m_ZA-;lwzjqb0RasS4QjR8$jFFFrFM399y)Z0#bT*cs$<8F zVX;^mjmBoPo12>r3=BvlQba_Ap`qd8#fy`Yl8lXwLqkJdU0qXBQqG@0Z(?E+92`uc zP#hf{_4M@S&6}5*ndwh>6M`159wE@rN1wRx>=6_gpYn$(5VRz2Zt2O1m?Ts=KQ16> z=lmfP1Jlpk$SZpMA!xz+03WZ=BiL}O+EBXS=|aM)N08sJ?v+I9o3J)ADv}5wkBy7}UcwB6?tmF1QL+^Sn)-2B?HNxcvlPnbE4YRjw&t zXyY0?@NEG;!F+7*tm<(#ReiXR!jP8Q`*E_TJ?VS z+SvXnec>p<%wX;Ve@L4-(Gr{IxJ(#K;2y-H@tz%Wut0&wkNKdA*88pjpRlBQLOmGT zL$Mn)L}NA%YAb^BIt!K){ctoEOTp8BmA)U~*oz;rPB;O?z;?pG;FZEM@E20w{l_bkW#OTWxr|Jxuefi_h47apY z*ludg{VH8axci>3tx%bUmq;29jM>uD}C(>gSx-+Kus!Uj8dItD*q7PEMa*)v7q`YLxb^CJT{cr!V)t0%Bd z(aVL4!U>-(7tD0o*jb-lModISf9>P!k-L+VcKC!6FJZ`mo|5|>jl(~EEjpWUq|=#W zRV!Fs)08boY#vu(PIX$IOzKvmgw7VKLU#Dy@ydjFoIwJdgIw_^s(S*#BBXzZBDk z&p#E+vQav6d9|kM$%Q zZ%TSn)kehWl`=P?EX%W8>63xkJK->QWw~=Qna0)k@LSAmg-e-zTRGV9MZ_QREhljQ z{|9$GXQv#s(%U1f_qyAc&1YvZ@ru=d9;-|3RoC_U)s<_%*@yFU`V`~t_e_Eh({$*VZ!b#-vs z9Ex*x!@9WPob0h!H!N1*Q{43*4ku%e#1N^!I=DDEZ3)HU+?=<%;hcYQa5=YlBkBMJ M>6aKi;mCz~cq)7(*7 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 diff --git a/src/robot_description/media/materials/textures/id12.png b/src/robot_description/media/materials/textures/id12.png deleted file mode 100644 index 1f419daad2f02f1e13ca6b99250d885674bf74fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4530 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 diff --git a/src/robot_description/media/materials/textures/id13.png b/src/robot_description/media/materials/textures/id13.png deleted file mode 100644 index 81a960c7d0c59820ac9753fd43344d4536a2c3a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4768 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 diff --git a/src/robot_description/media/materials/textures/id14.png b/src/robot_description/media/materials/textures/id14.png deleted file mode 100644 index cb9b3015de4a49ca097081e523ed4dee3b2ee288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4675 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 diff --git a/src/robot_description/media/materials/textures/id16.png b/src/robot_description/media/materials/textures/id16.png deleted file mode 100644 index e1bdb011219e62b47f4e0cbee0f9c14b3d38956c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6319 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 diff --git a/src/robot_description/media/materials/textures/id18.png b/src/robot_description/media/materials/textures/id18.png deleted file mode 100644 index 51029d7a397549a3a6ba6d3f9cdb8f9729428be6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6120 zcmeHLX;@QN8jh7Jh?-iSLajnttq8IN#iG#!)WRT&V6`I1k{|-Ltb#y*Kx(KWwVI&_ ziEOc2pmkx3BrG8@pioF4MamMxP7}lg5)ud@YwyLGd1ijhGe72+Px*1rz2}_ooZR!C z_q^|yn{(2~bHloi)rpqsE_faT2+U8Qx&`)RXKlz|{ z+jPHq41LeNjuRfMcO3a8`n#5ozkN-OoGxVKRT#WR_}Wnnk-#b(~l&eTnBV=3N6UK~z=L69C$;IS%WCW_->5o`pB z-0F(MhUC!9ydjO&WVVsnH-(rrK;>(~W^boeKbu52v5oGobo>jF4%zFotVW!w73Rp{ zaQ4pk)0uTa2^~AeGmHX10r1OPe>NmFJoVL&*_{-FHu592dVm$;*gXG2=1O?{9v4IK zy7sWL@j>zaOXu}J*ZMUriHbP17(t81n0CY|%fx!K5tV3S9bn{4#{6*DNduG~E6smt zOdMHSx%?O3j0Z#5$(wuUM;4iMq=wJiDBV7|j=kQR4EY@-%R48{0CJfeIsvi;^4Utq ze?a1p<^*S|CghJIQ4hh>Y8sWSiEQ6wIeHJ<=3H7MTWocvEOBLnW79{SvVdT;vX+!z zaxkR;6v}@K)``*R%4X$Dnace6S~nHDHby{`sm7-Nwmhn;e&V|XY4c(?F=F?=CLMM1 z`mMMxf|B~q2%qJcDYl>ETJDd(%a|{NZy-WTW5HdcQ83Eg>~F6ClFL<^ab2y+PM}8c zGYR~5BeON21`B*a6=*pG>}!O^Bm!pU{h=`+%F%9YNf^OoHMr3;JINW|PN5$I@SmJRg`uU2hNs6w0Bny`6`S|4brc(%B zs*mc!z)z`R*Kft-E>nZ$3CnnblctZ_X_Pa8{%GCnvz!Vy-L!m;h{uIC>t^EMyz~)8 zOZ#SvZs1;;Ac&z~B~m@&IS%yODb3>G@fwHsL1GouNHZ6kgh^HD!B`mE4>xX#w!v!z zqaxy?=Yr|p3eFVpR5if_4JY4b z)@ieel)#XM2WRv5F~&Fi(~V)#&sj&DVCj+?xfpFo3)RUgxr)Ob+ka^E@5#&`~Tt29os;yTQ+S#+&;bW#>>5Hjo)PPfW-qTJP@>O&UyBr z0>1I=3!8wTH&zaeTF&zUhX+OhL2rzIW$L#E5K!ZUBy@;!b~rFoNu@YE;?GblJul;` zKY*#8uI(gd&fk|^qS;h3)nBtE-(c1R&SOH-rptsk<8WcA0>KEaI)aW*-r6(A_GA39 z18y6asVHh~=ikE$?a-U8wpbJ_4|(VBzAFj-|M<@{XitWx_1u7rt!M9bb`HF2Qhw(S z|N8$|@&|RILwsh2#!aH0n^c(6neBLnn9D=Rik7Z!r#IHJB*huh4W67=filu*;T71> zxn#K1{-o7xvyQO>OKToi4XF>Y^1RmmL(0I9V{jiZnZp zMh000l;E@O#2f&luCZ|w78>5hQ8Gq9d$J)yr;aLMVxtfVhGPLsea8?q<@XA;GaHbM+l{jfHuB7@en`DQ>a0xn>4J||_vHzHB^7jQ zxx@(lFuAXX!_$Ohwm7MEYnZE;IDWr0}VFfd=!}z?}urgo`f8 zVfbvsLA!-pD4{y4A3YniYXEo27omNK&*b$J8osP_QyoGqknlkVp3UIcILT~+PMs8& zT3=j>*4{=n>~U8)dmfXuJigPllN=GYZyVVcfvBjR&%YloEZxLLVuSgK?P)dx^sAVH zJfUo-Xdw9InOm+dtooPsBVrb8I8~OrR2E@=!l|om76~A(QOEneKE+=uTcDnT*?2-{ z5oRyS%EsM`6s7Zt{j~SFua%N|=2mszF9~Tn??D!Tr*sfi>^+~eT3AmnAeSV9i<(*| z$|K(XT+Dk#L!VZTz!>#Qr2K?2Zj%0DC#IXG*4z)5%HMlcac&o96nW04biuoyd(Wht zKUlJzTmfSyVJ|9_lSPJZSxr+m_3VJRC0DLGhQReEg-=Dm&8kp}A-tiZ_BDzeF;#*o zyg6LXMh06k!%;^#!e8$zZnQoQP8q$L>ZP2c%%a3QCWI&rPd!EmhHZ&$e<8n8I}uRM zM}TuiA}kGLa~_KawkSqAH_)ewrTo3=g}wm%j&|go8;esnU;Y8(${Y`yW7h3q z$$|tEGyBpDeSrShUQFpOPgiGXH9Y_JEoKi&ORvxpR_8T})8%O2#7SB`9 zSq)P4k@oq4_}$8%V1{QTeuFgtQ_3w&K^@MrIrRGPmD07aH79kNJm+4c#F(%VzgpVq z#b|6`hh%b2e*ic%sPJV1tQWnsI(RNQ2CJ-}=c9zb5n=lk0ks1&A2MmNwV2A8KcJPc z^Y!L)zSARwgH5iM)Z_@ErDH)UA7xX#-v~A$d(oB}HG>)f7aft;)Zj~YT zVU@$aq2zk)qTx|SMk{ZrEx2#7v==4ZqL2zQhw=GqTg66JYA=MAVz|^l!`J5$3!?Nh q*AfJlZnjXJi^^)uc9x;&mg94J%CHt)7LCByd5D*Xk9*}24B<~wyOWOq diff --git a/src/robot_description/media/materials/textures/id19.png b/src/robot_description/media/materials/textures/id19.png deleted file mode 100644 index 66f00b0e62ba5189399c336916f4c489a176b379..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6435 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 diff --git a/src/robot_description/media/materials/textures/id2.png b/src/robot_description/media/materials/textures/id2.png deleted file mode 100644 index ebb97c93612bf345b61dca4974da8d1c452c4ec1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3071 zcmcguYfw{37QQ?bd5burJj^KN16?!_4DwJ`i~_z!ED`RCmjomlH6cPo0wgdHjWG(k zB3@Q7jvIA+5hNglR{%jI6U?Z=;xQ1#08Rv=gb0#M?p~_gAJ+cbsu_Ru={{fgIekv| zSACkddsmpfjjIg+0QM2#ggpRYCZB0@EKnqA*5L}YvplqE=OzGnm~U$&%|i9>6T4~l{EiIite?Eagh>eX62nevYwqCh%Wps2j2!g9tt@8Et6$*tam5RsXxwyEHNTio9 zUv_nMB_<};)zy`hl(@ROCM6|}kB?7IPBIvbB}1lBK zX#w&=ps8k8q=K~TN@2B9Rmw&XErO`E%{(>)GH>?KGI%^1gdlq4orF`Z2B8FLSy9nb zt)fGr?-S8bM-Z)|PcLdz=oJEx#F33696E)@D^iI$;L(B}JcMrRH6}R zRTT8BA*O5+QKJ`Q)Jjf6;88(Bc9E(&4+IM!x(G3eQ+B_V&icMi3N) zg@xU{dw0c(6%rO$!2%%&-3Dyofyxq4T}o44hZHba0i$j;oLYsZl8sEt^iK<*(-MUS zVe;q2buE zV-yO-$HylmB&58&{LPy;g@uL1#l>D;ULGDE+qZ9zi;Ht`a1aOtk&%)0_4P`n5`)2n zhllHQI*#Y2Z79*r;?$?K=r44!bvgY+n}oVIF6$btHZ%zpRGPM_9D%Tp_(EYH8Cv0&iE@ z8G_5Q8(X#YTk`vB34GTZg#Du!=agq7BbQk8Jl3Hstzy{FR-&s#iYH4HI(f=azo9q? zCoU=X!{H(eiOX%sH~uW4kv0Z%Lo1@N3Q4^=V-3vADOw5hzOCrN!$HM{;O9Lb>ntYe z4Z3J3Qu22<*yXq1L!Z}t*fM*JG|b-zJ#S5=SfsS^k>Qu6^ebH_UN2rF*+2N*DBBD6 z%hj(WZ0^{c%q3;7xtOWJC;dY=Rn!!!o2*n!_2P7q(}S!@BA)5cT{H1my>-k2NsKu zrH@nukA1}MZ_NxX${4ss`6KdX@bB$dx7JMA>2YQE?G5#qeD+qaHg{Vzu6Eq*o5An9 zx4%ufmhtM|CTwp@taOZdGdSy|G3V_q)JgFUXzGTG^q^$yr?wwRkIn`ZxsSi-c;Y;S zZq9r}Y&KTGYcoEVK@U}{x%#^rShVr@>wiMxa#++CzmB#z7V^Jec@zq{U%r_t_aDL0 zBa&i4xj*&coGLwAclSprud1#RPu81;U3#kK%a{A89(DDqB4t4;{n%vPB&%($@#<$b zyfdCneCYU$I`wM=l73~HkQ;2IDlt4%#7A@vq+Sw0e5+!kJQgQ&LkUXvu~KL6kV~$x;-g& zkCOQ}e16c~-EAS=5PeJaW4G_n^EPTsy0^CWeQ4(3Qu#yplKyt_biH23bq|-KJmmTm=Io-3I$v=Nn_=u(MTpU7Zt`)U(@=b^ z=}rFQz_&kC`b29dhDlV8WKX9w% z`F1q=VwFn&U?mJbyWe2-t&7Q*()II$+|Q1u4&Ni*z5HjD%KuhfGI`(X?TBUR83V=+ z_ih0F5iDbDiD4WhF%kn4k`vJm@WuN2d1C{-eb?>v@e9QI2m1J~#$p4p*cO8D*RKqy oNe3xp<`)BhZ(sagAD_T=eu2JU49t#sNKgYHV#_Wh($ diff --git a/src/robot_description/media/materials/textures/id3.png b/src/robot_description/media/materials/textures/id3.png deleted file mode 100644 index f2a82c0602775937731305c5680c3b2e47214615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4639 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 UgQ@k!Q=kKYJn46$`WQO%KL&28a{vGU diff --git a/src/robot_description/media/materials/textures/id4.png b/src/robot_description/media/materials/textures/id4.png deleted file mode 100644 index 85c714375cd785e8368ab620c14cc7f94905770b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 lh<_S5S=%2xV`m3< diff --git a/src/robot_description/media/materials/textures/id6.png b/src/robot_description/media/materials/textures/id6.png deleted file mode 100644 index a4a573b8d4a7ae6c14561abbd5d0b133a2229ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4571 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 F{4bp3JqZ8+ diff --git a/src/robot_description/media/materials/textures/id7.png b/src/robot_description/media/materials/textures/id7.png deleted file mode 100644 index 1b10beae0fea293f05292e8bd95b73a72e3c4213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4370 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 CCihqX diff --git a/src/robot_description/media/materials/textures/id8.png b/src/robot_description/media/materials/textures/id8.png deleted file mode 100644 index 2479527556c6cbf7d948b5f68e8eb47d0ab3bfa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4594 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 Hd=mZvPSHaT diff --git a/src/robot_description/media/materials/textures/id9.png b/src/robot_description/media/materials/textures/id9.png deleted file mode 100644 index 3e42111075e9cfa2a281c02c7b4f49538e3f41a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4341 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 V$)-y71Nfz2&8n!Cf)%l!{u^>{!PWo( diff --git a/src/robot_description/models/aruco_block_long/meshes/block_long.dae b/src/robot_description/models/aruco_block_long/meshes/block_long.dae deleted file mode 100755 index e0f3fad..0000000 --- a/src/robot_description/models/aruco_block_long/meshes/block_long.dae +++ /dev/null @@ -1,144 +0,0 @@ - - - - - Blender User - Blender 2.80.75 commit date:2019-07-29, commit time:14:47, hash:f6cb5f54494e - - 2022-01-26T22:08:27 - 2022-01-26T22:08:27 - - Z_UP - - - - - - - Block_Long_png - - - - - Block_Long_png-surface - - - - - - 0 0 0 1 - - - - - - 1.45 - - - - - - - - - - - 0 0 0 1 - - - 0.8 0.8 0.8 1 - - - 1.45 - - - - - - - - - Block_Long.png - - - - - - - - - - - - - - - -55 -18 25 -55 -18 -25 55 -18 25 55 -18 -25 -55 -35 25 55 -35 25 -55 -35 -25 55 -35 -25 -55 18 -25 -55 18 25 55 18 -25 55 18 25 -55 35 -25 55 35 -25 -55 35 25 55 35 25 55 -35 35 -55 -35 35 -55 -35 -35 -55 35 -35 -55 35 35 55 35 35 55 -35 -35 55 35 -35 - - - - - - - - - - 0 -1 0 0 0 -1 0 0 1 0 1 0 -1 0 0 1 0 0 - - - - - - - - - - 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 7.97597e-5 0.9999202 7.97597e-5 7.97597e-5 0.636342 0.9999202 0.636342 0.9999202 7.97597e-5 7.97597e-5 0.636342 7.97944e-5 0 0 1 0 1 1 0 0 1 0 1 1 - - - - - - - - - - - - - - -

21 2 120 20 2 121 16 2 122 16 2 123 20 2 124 17 2 125

-
- - - - -

0 0 0 1 0 1 2 0 2 2 0 3 1 0 4 3 0 5 4 1 6 0 1 7 5 1 8 5 1 9 0 1 10 2 1 11 1 2 12 6 2 13 3 2 14 3 2 15 6 2 16 7 2 17 8 3 18 9 3 19 10 3 20 10 3 21 9 3 22 11 3 23 12 2 24 8 2 25 13 2 26 13 2 27 8 2 28 10 2 29 9 1 30 14 1 31 11 1 32 11 1 33 14 1 34 15 1 35 5 0 36 16 0 37 4 0 38 4 0 39 16 0 40 17 0 41 6 4 42 1 4 43 18 4 44 18 4 45 1 4 46 8 4 47 18 4 48 8 4 49 19 4 50 19 4 51 8 4 52 12 4 53 1 4 54 0 4 55 8 4 56 8 4 57 0 4 58 9 4 59 9 4 60 0 4 61 17 4 62 9 4 63 17 4 64 20 4 65 0 4 66 4 4 67 17 4 68 20 4 69 14 4 70 9 4 71 5 5 72 2 5 73 16 5 74 16 5 75 2 5 76 11 5 77 16 5 78 11 5 79 21 5 80 21 5 81 11 5 82 15 5 83 2 5 84 3 5 85 11 5 86 11 5 87 3 5 88 10 5 89 10 5 90 3 5 91 22 5 92 10 5 93 22 5 94 23 5 95 3 5 96 7 5 97 22 5 98 23 5 99 13 5 100 10 5 101 13 3 102 23 3 103 12 3 104 12 3 105 23 3 106 19 3 107 6 0 108 18 0 109 7 0 110 7 0 111 18 0 112 22 0 113 19 1 114 23 1 115 18 1 116 18 1 117 23 1 118 22 1 119 14 3 126 20 3 127 15 3 128 15 3 129 20 3 130 21 3 131

-
-
-
-
- - - - 0.001 0 0 0 0 0.001 0 0 0 0 0.001 0 0 0 0 1 - - - - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/src/robot_description/models/aruco_block_long/meshes/block_long.stl b/src/robot_description/models/aruco_block_long/meshes/block_long.stl deleted file mode 100755 index a9f6282ba5225fb3364973c0caca120e8c71ec62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2284 zcmb7_QAz_b7=(KRudt66R74Pc*rgzdm+(bteNrp6f^YT?9>fdm(hJlx)y(9d@Mp7I zu&{0T^M9F{WJ7O1-ONXlZQpUcr^loMUtv&3Zv#-BAKGh`2sRZY}Ij7c#Zl zH>`wbn7~Y*@OxEiI3k^9s4>@|24_qoBjB(kymuROr^j7s#^vw?PcYA6gu1X-93vaD zOeVVH@aMc|U8q~~f%EX*v2Lj`aDvz?y%~)Nx#eE*{+TQ8taa%I!y)T2N6;t;)5wU! z8jipTN`r0(T`7mZE3APo3Aa~r)gs5ZE6rFJPS6way~>gsp{_)PY#kn+`6!_-+g)Ud zH>yu$>&lhrGI^NcT3T0x+=9R-o?^et(a3-|hRHJ`&4`AZFlHTN3P59vkuot{8tNA%%&S - - - aruco_block_long - 1.0 - model.sdf - - - My - omar.sossi-alaoui@rtone.fr - - - - A block. - - diff --git a/src/robot_description/models/aruco_block_long/model.sdf b/src/robot_description/models/aruco_block_long/model.sdf deleted file mode 100755 index e8dea97..0000000 --- a/src/robot_description/models/aruco_block_long/model.sdf +++ /dev/null @@ -1,43 +0,0 @@ - - - - false - - - 0.349 - - 1.45e-4 - 0.0 - 0.0 - 1.45e-4 - 0.0 - 1.45e-4 - - - - - - 1 1 1 - model://aruco_block_long - - - - - - 1.2 - 1.2 - - - - - - - - 1 1 1 - model://aruco_block_long - - - - - - diff --git a/src/robot_description/models/checkerboard/checkerboard_plane.sdf b/src/robot_description/models/checkerboard/checkerboard_plane.sdf deleted file mode 100644 index abdd3c5..0000000 --- a/src/robot_description/models/checkerboard/checkerboard_plane.sdf +++ /dev/null @@ -1,16 +0,0 @@ - - - - true - - - - - 0.3 0.3 0.3 - model://checkerboard_plane - - - - - - \ No newline at end of file diff --git a/src/robot_description/models/checkerboard/materials/textures/checker.png b/src/robot_description/models/checkerboard/materials/textures/checker.png deleted file mode 100644 index 2e37021462ade27c8be2e75e24f2f13a249413fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17270 zcmeI4Ur19?9LLY}*8a3*OQUI0S5_?OMS8G3RC8@(TcAitCiI}zay`sNyIB#ntAnIB zq3EFoy+shD{eh$>r9TG6=%t)1@kRtf%SM4N#;%>S+OD)Y_lcB~y2r>D6?gNDA=vN)ll~J?jsk@sR{Rv-tgpf6r?9h;FaSJ`EmHbT} z?R!C}GH(mM8~Q{~RZE^jk}Dhv1$rdnIvMDc0!PKu$EBd?^*6P&^{w4Vh)DcyXX}|% z`t6u$wBGn+_)+dlI$d|!YMJ?1C-u(9ZXbJQw!cu1ER3nKyf#-cwSz=07!xWsh;4&cBDEQL$K-iZw(In7IZS@&c#?MOz47dmK} z!gbvNP``jeJ*FTCOd#+J_yzg%^;+d_Si6fnrsZQLKX7nvWYB84_0?Vle}ljM1OArK zXD1uH%CuJ5ttrMBvHZZ!C?DO%L2ikYZPCz=pyzhoR&H?tI4}ax1J?mKfCD3dd6Mg3 z8E~kNhkA;=02r4NuH#b;ZOU|ok}zkl=Er|-i9EoTNWnKy0_Rf%IDi8qfQ*{!035)9 z5m?#^K!v*?2yrGZ-v~tn^*l*b%Di2ZZH#RHrsaZJ2C*jM%M!+yE3g!mNj{8ik~=M{ zyE3Y4$GOAL&BoTVwFXqtxCes+I4}aJqH!I7L+LrZ3Po0_c`{qu7e?a+8Wxd_aTf#! za9{+Gm2w?`12`}OzkjX+Ef$OuQaeTg9FWp*9e~5%;E+^@CI~4@viAb;`=hZ994LVm xu{>o`_sgs4pOu~JoB8a1>&3-)Qy3R3;TD6fG5opxb=OTcrhZSe`_8_O{vWZs)z1I` diff --git a/src/robot_description/models/checkerboard/meshes/checkerboard_plane.dae b/src/robot_description/models/checkerboard/meshes/checkerboard_plane.dae deleted file mode 100644 index e85746a..0000000 --- a/src/robot_description/models/checkerboard/meshes/checkerboard_plane.dae +++ /dev/null @@ -1,126 +0,0 @@ - - - - - Blender User - Blender 2.78.0 - - 2017-04-04T15:56:25 - 2017-04-04T15:56:25 - - Z_UP - - - - checker.png - - - - - - - - checker_png - - - - - checker_png-surface - - - - - - 1 1 1 1 - - - 1 1 1 1 - - - - - - 0 0 0 1 - - - 50 - - - 1 - - - - - - - - - - - - - - - - -1 -1 0 1 -1 0 -1 1 0 1 1 0 - - - - - - - - - - 0 0 1 - - - - - - - - - - 0.9999001 9.998e-5 9.998e-5 0.9999001 1.0004e-4 9.998e-5 0.9999001 9.998e-5 0.9999001 0.9999001 9.998e-5 0.9999001 - - - - - - - - - - - - - - - 3 3 -

1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5

-
-
-
-
- - - - - 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 - - - - - - - - - - - - - - - -
\ No newline at end of file diff --git a/src/robot_description/models/checkerboard/model.config b/src/robot_description/models/checkerboard/model.config deleted file mode 100644 index 58b0f1d..0000000 --- a/src/robot_description/models/checkerboard/model.config +++ /dev/null @@ -1,16 +0,0 @@ - - - - Checkerboard Plane - 1.0 - checkerboard_plane.sdf - - - Adam Allevato - adam.d.allevato@gmail.com - - - - A plane with a reference checkerboard texture on it, used to validate and calibrate camera models. The checkerboard is 8x8 squares (like a standard checkerboard), and measures 2m on each side. - - diff --git a/src/robot_description/urdf/aruco.urdf.xacro b/src/robot_description/urdf/aruco.urdf.xacro deleted file mode 100644 index af3e1ce..0000000 --- a/src/robot_description/urdf/aruco.urdf.xacro +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id${plane_number}_Plane_Material - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/robot_description/urdf/r5a_v_ros.urdf.xacro b/src/robot_description/urdf/r5a_v_ros.urdf.xacro index 0512b25..512f1de 100644 --- a/src/robot_description/urdf/r5a_v_ros.urdf.xacro +++ b/src/robot_description/urdf/r5a_v_ros.urdf.xacro @@ -1,6 +1,7 @@ - + + @@ -686,52 +687,82 @@ effort="5" velocity="1" /> - - Gazebo/White + + + + + PlasticBlackGlossy + 0.8 + 0.8 + 1000000.0 + 1.0 - Gazebo/White + PlasticBlackGlossy + 0.8 + 0.8 - Gazebo/White + PlasticBlackGlossy + 0.8 + 0.8 - Gazebo/White + PlasticBlackGlossy + 0.8 + 0.8 - Gazebo/White + PlasticBlackGlossy + 0.8 + 0.8 - Gazebo/Black + PlasticBlackGlossy + 0.8 + 0.8 + - Gazebo/White + PlasticBlackGlossy + 0.9 + 0.9 - Gazebo/Black + PlasticBlackGlossy + 0.9 + 0.9 - Gazebo/White + PlasticOffWhite + 0.9 + 0.9 - Gazebo/White + PlasticBlackGlossy + 0.9 + 0.9 - Gazebo/Black + PlasticBlackGlossy + 0.9 + 0.9 - Gazebo/White + PlasticOffWhite + 0.9 + 0.9 @@ -990,4 +1021,4 @@ - + \ No newline at end of file diff --git a/src/robot_description/worlds/spotlight.world b/src/robot_description/worlds/spotlight.world index 4d80085..849bd90 100644 --- a/src/robot_description/worlds/spotlight.world +++ b/src/robot_description/worlds/spotlight.world @@ -1,54 +1,150 @@ + + + + 0.6 0.6 0.6 1.0 + 0.7 0.7 0.7 1.0 + 1 + + model://ground_plane - - - model://sun - - - - - 1 0 0.55 0 1.45 0 - 1.0 1.0 1.0 1.0 - 0.1 0.1 0.1 1.0 + + + 1 + 0 0 10 0 0 0 + 1.5 1.5 1.5 1 + 2.0 2.0 2.0 1 - 10.0 - 0.3 + 1000 + 0.9 0.01 0.001 + -0.5 0.1 -0.9 + + + + + 1 0 0.55 0 1.45 0 + 1.2 1.2 1.2 1.0 + 1.5 1.5 1.5 1.0 + + 15.0 + 0.1 + 0.005 + 0.0005 + 0 0 -1 - 0.5 - 1.0 + 0.4 + 0.8 1.0 true - + - -0.7 0.7 0.85 0 1.1854 2.35 - 1.0 1.0 1.0 1.0 - 0.1 0.1 0.1 1.0 + -0.7 0.7 0.85 0 1.1854 2.35 + 1.2 1.2 1.2 1.0 + 1.5 1.5 1.5 1.0 - 10.0 - 0.3 + 15.0 + 0.1 + 0.005 + 0.0005 + + 0 0 -1 + + 0.4 + 0.8 + 1.0 + + true + + + + + 0 1.5 1.2 0 0.8 -1.57 + 0.8 0.8 0.8 1.0 + 1.2 1.2 1.2 1.0 + + 12.0 + 0.15 0.01 0.001 0 0 -1 - 0.5 + 0.6 1.0 1.0 - true + false + + + + + 0 0 3 0 0 0 + 0.8 0.8 0.8 1 + 1.0 1.0 1.0 1 + + 8 + 0.2 + 0.05 + 0.005 + + false + + + + 2 -1 1.5 0 0 0 + 0.6 0.6 0.6 1 + 0.8 0.8 0.8 1 + + 6 + 0.3 + 0.08 + 0.01 + + false + + + + + 0 0 -9.8066 + + + quick + 150 + 1.3 + + + 0.00001 + 0.2 + 1000.0 + 0.01 + + + 0.004 + 1 + 250 + + + + + + /gazebo + + 1.0 + + - + \ No newline at end of file From 92278b30de3e5cf10e581ae7cbb245d16d199558 Mon Sep 17 00:00:00 2001 From: chloegaugry Date: Tue, 8 Jul 2025 14:02:41 +0200 Subject: [PATCH 2/3] Formatage avec Black --- .../launch/moveit_control.launch.py | 4 +- .../launch/moveit_control2.launch.py | 4 +- .../launch/moveit_control_gui.launch.py | 4 +- src/robot_control/launch/visual_sim.launch.py | 30 ++-- src/robot_description/launch/gazebo.launch.py | 164 +++++++++--------- .../launch/gazebo_move.launch.py | 53 ++---- src/robot_moveit_config/launch/demo.launch.py | 4 +- .../launch/move_group.launch.py | 4 +- .../launch/moveit_rviz.launch.py | 4 +- src/robot_moveit_config/launch/rsp.launch.py | 4 +- .../launch/setup_assistant.launch.py | 4 +- .../launch/spawn_controllers.launch.py | 4 +- .../launch/static_virtual_joint_tfs.launch.py | 4 +- .../launch/warehouse_db.launch.py | 4 +- .../data_analysis/scripts/generate_report.py | 53 +++++- .../launch/standard_joint_test.launch.py | 110 ++++++++---- 16 files changed, 267 insertions(+), 187 deletions(-) diff --git a/src/robot_control/launch/moveit_control.launch.py b/src/robot_control/launch/moveit_control.launch.py index a0cb24e..eb1ae14 100644 --- a/src/robot_control/launch/moveit_control.launch.py +++ b/src/robot_control/launch/moveit_control.launch.py @@ -37,9 +37,7 @@ def generate_launch_description(): # MoveIt configuration using MoveItConfigsBuilder moveit_config = ( MoveItConfigsBuilder("robot_moveit_config", package_name="robot_moveit_config") - .robot_description( - file_path=xacro_file, mappings={"use_sim_time": "true"} - ) + .robot_description(file_path=xacro_file, mappings={"use_sim_time": "true"}) .robot_description_semantic("config/armr5.srdf") .robot_description_kinematics("config/kinematics.yaml") .joint_limits("config/joint_limits.yaml") diff --git a/src/robot_control/launch/moveit_control2.launch.py b/src/robot_control/launch/moveit_control2.launch.py index f1adaa4..f374caa 100644 --- a/src/robot_control/launch/moveit_control2.launch.py +++ b/src/robot_control/launch/moveit_control2.launch.py @@ -36,9 +36,7 @@ def generate_launch_description(): # MoveIt configuration using MoveItConfigsBuilder moveit_config = ( MoveItConfigsBuilder("robot_moveit_config", package_name="robot_moveit_config") - .robot_description( - file_path=xacro_file, mappings={"use_sim_time": "true"} - ) + .robot_description(file_path=xacro_file, mappings={"use_sim_time": "true"}) .robot_description_semantic("config/armr5.srdf") .robot_description_kinematics("config/kinematics.yaml") .joint_limits("config/joint_limits.yaml") diff --git a/src/robot_control/launch/moveit_control_gui.launch.py b/src/robot_control/launch/moveit_control_gui.launch.py index 55c4fc1..f8ec21e 100644 --- a/src/robot_control/launch/moveit_control_gui.launch.py +++ b/src/robot_control/launch/moveit_control_gui.launch.py @@ -37,9 +37,7 @@ def generate_launch_description(): # MoveIt configuration using MoveItConfigsBuilder moveit_config = ( MoveItConfigsBuilder("robot_moveit_config", package_name="robot_moveit_config") - .robot_description( - file_path=xacro_file, mappings={"use_sim_time": "true"} - ) + .robot_description(file_path=xacro_file, mappings={"use_sim_time": "true"}) .robot_description_semantic("config/armr5.srdf") .robot_description_kinematics("config/kinematics.yaml") .joint_limits("config/joint_limits.yaml") diff --git a/src/robot_control/launch/visual_sim.launch.py b/src/robot_control/launch/visual_sim.launch.py index eab1ad7..4acc6c1 100644 --- a/src/robot_control/launch/visual_sim.launch.py +++ b/src/robot_control/launch/visual_sim.launch.py @@ -18,8 +18,14 @@ ) from launch.event_handlers import OnProcessExit, OnProcessStart from launch.launch_description_sources import PythonLaunchDescriptionSource -from launch.conditions import IfCondition, UnlessCondition # Added for conditional execution -from launch.substitutions import LaunchConfiguration, PythonExpression # Added for launch configurations and expressions +from launch.conditions import ( + IfCondition, + UnlessCondition, +) # Added for conditional execution +from launch.substitutions import ( + LaunchConfiguration, + PythonExpression, +) # Added for launch configurations and expressions from launch_ros.actions import Node, SetParameter import xacro from moveit_configs_utils import MoveItConfigsBuilder @@ -40,13 +46,11 @@ def generate_launch_description(): # Declare the 'num_cameras' launch argument num_cameras_arg = DeclareLaunchArgument( - 'num_cameras', - default_value='1', - description='Number of cameras (1 or 2)' + "num_cameras", default_value="1", description="Number of cameras (1 or 2)" ) # Launch configuration to access 'num_cameras' argument - num_cameras = LaunchConfiguration('num_cameras') + num_cameras = LaunchConfiguration("num_cameras") # Package Directories pkg_name = "robot_description" # Name of the robot description package @@ -187,7 +191,7 @@ def generate_launch_description(): parameters=[ {"use_sim_time": True}, ], - condition=UnlessCondition(PythonExpression(['"', num_cameras, '" == "2"'])) + condition=UnlessCondition(PythonExpression(['"', num_cameras, '" == "2"'])), ) # Aruco Detector Double Node @@ -198,7 +202,7 @@ def generate_launch_description(): parameters=[ {"use_sim_time": True}, ], - condition=IfCondition(PythonExpression(['"', num_cameras, '" == "2"'])) + condition=IfCondition(PythonExpression(['"', num_cameras, '" == "2"'])), ) # Launch Visual Joint State Publisher Node @@ -214,10 +218,10 @@ def generate_launch_description(): [ num_cameras_arg, # Added the launch argument Node( - package='joint_state_publisher', - executable='joint_state_publisher', - output='screen', - parameters=[{'use_sim_time': True}] + package="joint_state_publisher", + executable="joint_state_publisher", + output="screen", + parameters=[{"use_sim_time": True}], ), SetParameter(name="use_sim_time", value=True), # Enable simulation time RegisterEventHandler( @@ -237,7 +241,7 @@ def generate_launch_description(): target_action=load_arm_controller, on_exit=[ load_gripper_controller, - move_group_node + move_group_node, ], # Load gripper controller before move group ) ), diff --git a/src/robot_description/launch/gazebo.launch.py b/src/robot_description/launch/gazebo.launch.py index f708b13..ebfcba6 100644 --- a/src/robot_description/launch/gazebo.launch.py +++ b/src/robot_description/launch/gazebo.launch.py @@ -48,7 +48,9 @@ def generate_launch_description(): # Check materials if os.path.exists(materials_path): print(f"✅ Custom materials found: {materials_path}") - if os.path.exists(os.path.join(materials_path, "scripts", "robot_materials_PLA.material")): + if os.path.exists( + os.path.join(materials_path, "scripts", "robot_materials_PLA.material") + ): print("✅ PLA materials file found") else: print("⚠️ robot_materials_PLA.material not found in scripts/") @@ -79,21 +81,13 @@ def generate_launch_description(): # Environment variables for custom materials set_gazebo_resource_path = SetEnvironmentVariable( - name='GAZEBO_RESOURCE_PATH', - value=[ - materials_path, - ':', - os.environ.get('GAZEBO_RESOURCE_PATH', '') - ] + name="GAZEBO_RESOURCE_PATH", + value=[materials_path, ":", os.environ.get("GAZEBO_RESOURCE_PATH", "")], ) set_gazebo_model_path = SetEnvironmentVariable( - name='GAZEBO_MODEL_PATH', - value=[ - share_dir, - ':', - os.environ.get('GAZEBO_MODEL_PATH', '') - ] + name="GAZEBO_MODEL_PATH", + value=[share_dir, ":", os.environ.get("GAZEBO_MODEL_PATH", "")], ) # Robot state publisher node @@ -110,23 +104,27 @@ def generate_launch_description(): # Gazebo launch configuration gazebo_launch_args = { - 'verbose': 'true', - 'pause': 'false', - 'use_sim_time': 'true', + "verbose": "true", + "pause": "false", + "use_sim_time": "true", } # Add custom world if available if use_custom_world: - gazebo_launch_args['world'] = world_file - print("🌟 Gazebo will launch with custom spotlight world for enhanced reflections") + gazebo_launch_args["world"] = world_file + print( + "🌟 Gazebo will launch with custom spotlight world for enhanced reflections" + ) # Gazebo server and client launch gazebo = IncludeLaunchDescription( - PythonLaunchDescriptionSource([ - os.path.join(get_package_share_directory("gazebo_ros"), "launch"), - "/gazebo.launch.py", - ]), - launch_arguments=gazebo_launch_args.items() + PythonLaunchDescriptionSource( + [ + os.path.join(get_package_share_directory("gazebo_ros"), "launch"), + "/gazebo.launch.py", + ] + ), + launch_arguments=gazebo_launch_args.items(), ) # Robot spawn node @@ -135,11 +133,16 @@ def generate_launch_description(): executable="spawn_entity.py", name="spawn_entity", arguments=[ - "-topic", "/robot_description", - "-entity", "armr5", - "-x", "0.0", - "-y", "0.0", - "-z", "0.1", + "-topic", + "/robot_description", + "-entity", + "armr5", + "-x", + "0.0", + "-y", + "0.0", + "-z", + "0.1", ], output="screen", ) @@ -147,8 +150,11 @@ def generate_launch_description(): # Joint state broadcaster controller load_joint_state_broadcaster = ExecuteProcess( cmd=[ - "ros2", "control", "load_controller", - "--set-state", "active", + "ros2", + "control", + "load_controller", + "--set-state", + "active", "joint_state_broadcaster", ], output="screen", @@ -157,8 +163,11 @@ def generate_launch_description(): # Arm controller load_arm_controller = ExecuteProcess( cmd=[ - "ros2", "control", "load_controller", - "--set-state", "active", + "ros2", + "control", + "load_controller", + "--set-state", + "active", "arm_controller", ], output="screen", @@ -170,61 +179,60 @@ def generate_launch_description(): executable="joint_state_publisher", name="joint_state_publisher", parameters=[{"use_sim_time": True}], - condition=lambda: not os.path.exists("/tmp/gazebo_controllers_active") + condition=lambda: not os.path.exists("/tmp/gazebo_controllers_active"), ) # Startup info node info_node = ExecuteProcess( cmd=[ - "bash", "-c", + "bash", + "-c", "sleep 5 && echo '✅ Robot simulation ready!' && " "echo '🎮 Test robot movement:' && " - "echo 'ros2 topic pub /arm_controller/joint_trajectory trajectory_msgs/msg/JointTrajectory \"{joint_names: [R0_Yaw, R1_Pitch, R2_Pitch, R3_Yaw, R4_Pitch], points: [{positions: [0.5, 0.5, 0.5, 0.5, 0.5], time_from_start: {sec: 3}}]}\" --once'" + "echo 'ros2 topic pub /arm_controller/joint_trajectory trajectory_msgs/msg/JointTrajectory \"{joint_names: [R0_Yaw, R1_Pitch, R2_Pitch, R3_Yaw, R4_Pitch], points: [{positions: [0.5, 0.5, 0.5, 0.5, 0.5], time_from_start: {sec: 3}}]}\" --once'", ], output="screen", ) # Launch description with proper sequencing - return LaunchDescription([ - # Environment setup - set_gazebo_resource_path, - set_gazebo_model_path, - - # Core simulation - gazebo, - node_robot_state_publisher, - joint_state_publisher, - - # Sequential robot spawning and controller loading - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=gazebo, - on_exit=[ - ExecuteProcess(cmd=["sleep", "3"], output="screen"), # Wait for Gazebo - ] - ) - ), - - spawn_entity, - - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=spawn_entity, - on_exit=[load_joint_state_broadcaster], - ) - ), - - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=load_joint_state_broadcaster, - on_exit=[load_arm_controller], - ) - ), - - RegisterEventHandler( - event_handler=OnProcessExit( - target_action=load_arm_controller, - on_exit=[info_node], - ) - ), - ]) \ No newline at end of file + return LaunchDescription( + [ + # Environment setup + set_gazebo_resource_path, + set_gazebo_model_path, + # Core simulation + gazebo, + node_robot_state_publisher, + joint_state_publisher, + # Sequential robot spawning and controller loading + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=gazebo, + on_exit=[ + ExecuteProcess( + cmd=["sleep", "3"], output="screen" + ), # Wait for Gazebo + ], + ) + ), + spawn_entity, + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=spawn_entity, + on_exit=[load_joint_state_broadcaster], + ) + ), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=load_joint_state_broadcaster, + on_exit=[load_arm_controller], + ) + ), + RegisterEventHandler( + event_handler=OnProcessExit( + target_action=load_arm_controller, + on_exit=[info_node], + ) + ), + ] + ) diff --git a/src/robot_description/launch/gazebo_move.launch.py b/src/robot_description/launch/gazebo_move.launch.py index 6719348..043dd4b 100644 --- a/src/robot_description/launch/gazebo_move.launch.py +++ b/src/robot_description/launch/gazebo_move.launch.py @@ -42,17 +42,19 @@ def generate_launch_description(): # Configure custom materials path for Gazebo materials_path = os.path.join(share_dir, "materials") - + # Path to custom spotlight world world_file = os.path.join(share_dir, "worlds", "spotlight.world") - + # Check if materials directory exists if not os.path.exists(materials_path): print(f"⚠️ Warning: Materials directory not found at {materials_path}") - print(" Robot will use default Gazebo materials instead of custom plastic materials") + print( + " Robot will use default Gazebo materials instead of custom plastic materials" + ) else: print(f"✅ Custom materials found at: {materials_path}") - + # Check if custom world exists if os.path.exists(world_file): print(f"✅ Using custom spotlight world: {world_file}") @@ -97,15 +99,15 @@ def generate_launch_description(): # Include the Gazebo launch file with custom world and materials gazebo_launch_args = { - 'verbose': 'true', # Enable verbose output for debugging materials - 'pause': 'false', # Don't pause simulation on start + "verbose": "true", # Enable verbose output for debugging materials + "pause": "false", # Don't pause simulation on start } - + # Add world file if it exists if world_file: - gazebo_launch_args['world'] = world_file + gazebo_launch_args["world"] = world_file print(f"💡 Gazebo will launch with spotlight world for maximum reflections") - + gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource( [ @@ -113,7 +115,7 @@ def generate_launch_description(): "/gazebo.launch.py", ] ), - launch_arguments=gazebo_launch_args.items() + launch_arguments=gazebo_launch_args.items(), ) # Commands to load and start controllers after spawning the robot @@ -144,9 +146,7 @@ def generate_launch_description(): # MoveIt configuration using MoveItConfigsBuilder moveit_config = ( MoveItConfigsBuilder("robot_moveit_config", package_name="robot_moveit_config") - .robot_description( - file_path=xacro_file, mappings={"use_sim_time": "true"} - ) + .robot_description(file_path=xacro_file, mappings={"use_sim_time": "true"}) .robot_description_semantic("config/armr5.srdf") .robot_description_kinematics("config/kinematics.yaml") .joint_limits("config/joint_limits.yaml") @@ -171,28 +171,17 @@ def generate_launch_description(): # Environment variables to configure Gazebo for custom materials set_gazebo_resource_path = SetEnvironmentVariable( - name='GAZEBO_RESOURCE_PATH', - value=[ - materials_path, - ':', - os.environ.get('GAZEBO_RESOURCE_PATH', '') - ] + name="GAZEBO_RESOURCE_PATH", + value=[materials_path, ":", os.environ.get("GAZEBO_RESOURCE_PATH", "")], ) set_gazebo_model_path = SetEnvironmentVariable( - name='GAZEBO_MODEL_PATH', - value=[ - share_dir, - ':', - os.environ.get('GAZEBO_MODEL_PATH', '') - ] + name="GAZEBO_MODEL_PATH", + value=[share_dir, ":", os.environ.get("GAZEBO_MODEL_PATH", "")], ) # Optional: Add a small delay before spawning to ensure Gazebo is fully loaded - delay_spawn_entity = ExecuteProcess( - cmd=['sleep', '2'], - output='screen' - ) + delay_spawn_entity = ExecuteProcess(cmd=["sleep", "2"], output="screen") # Return the LaunchDescription with all the nodes and event handlers return LaunchDescription( @@ -200,16 +189,12 @@ def generate_launch_description(): # Set environment variables first for custom materials set_gazebo_resource_path, set_gazebo_model_path, - # Launch Gazebo with custom spotlight world gazebo, - # Robot state publisher node_robot_state_publisher, - # Delay before spawning to ensure Gazebo is ready delay_spawn_entity, - # Sequential controller and node loading with proper dependencies RegisterEventHandler( event_handler=OnProcessExit( @@ -236,4 +221,4 @@ def generate_launch_description(): ) ), ] - ) \ No newline at end of file + ) diff --git a/src/robot_moveit_config/launch/demo.launch.py b/src/robot_moveit_config/launch/demo.launch.py index 32eac51..560da37 100644 --- a/src/robot_moveit_config/launch/demo.launch.py +++ b/src/robot_moveit_config/launch/demo.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_demo_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/move_group.launch.py b/src/robot_moveit_config/launch/move_group.launch.py index 5b4d32c..c60cdbd 100644 --- a/src/robot_moveit_config/launch/move_group.launch.py +++ b/src/robot_moveit_config/launch/move_group.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_move_group_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/moveit_rviz.launch.py b/src/robot_moveit_config/launch/moveit_rviz.launch.py index 1e1e999..83527f1 100644 --- a/src/robot_moveit_config/launch/moveit_rviz.launch.py +++ b/src/robot_moveit_config/launch/moveit_rviz.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_moveit_rviz_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/rsp.launch.py b/src/robot_moveit_config/launch/rsp.launch.py index 7cc68d3..5cb54a3 100644 --- a/src/robot_moveit_config/launch/rsp.launch.py +++ b/src/robot_moveit_config/launch/rsp.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_rsp_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/setup_assistant.launch.py b/src/robot_moveit_config/launch/setup_assistant.launch.py index 38344a6..9c7992e 100644 --- a/src/robot_moveit_config/launch/setup_assistant.launch.py +++ b/src/robot_moveit_config/launch/setup_assistant.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_setup_assistant_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/spawn_controllers.launch.py b/src/robot_moveit_config/launch/spawn_controllers.launch.py index 30685aa..74c4df2 100644 --- a/src/robot_moveit_config/launch/spawn_controllers.launch.py +++ b/src/robot_moveit_config/launch/spawn_controllers.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_spawn_controllers_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/static_virtual_joint_tfs.launch.py b/src/robot_moveit_config/launch/static_virtual_joint_tfs.launch.py index 7e47814..87c9684 100644 --- a/src/robot_moveit_config/launch/static_virtual_joint_tfs.launch.py +++ b/src/robot_moveit_config/launch/static_virtual_joint_tfs.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_static_virtual_joint_tfs_launch(moveit_config) diff --git a/src/robot_moveit_config/launch/warehouse_db.launch.py b/src/robot_moveit_config/launch/warehouse_db.launch.py index 5abe91a..1ccb2d8 100644 --- a/src/robot_moveit_config/launch/warehouse_db.launch.py +++ b/src/robot_moveit_config/launch/warehouse_db.launch.py @@ -3,5 +3,7 @@ def generate_launch_description(): - moveit_config = MoveItConfigsBuilder("armr5", package_name="robot_moveit_config").to_moveit_configs() + moveit_config = MoveItConfigsBuilder( + "armr5", package_name="robot_moveit_config" + ).to_moveit_configs() return generate_warehouse_db_launch(moveit_config) diff --git a/src/robot_test/data_analysis/scripts/generate_report.py b/src/robot_test/data_analysis/scripts/generate_report.py index cc27a49..adb86d6 100644 --- a/src/robot_test/data_analysis/scripts/generate_report.py +++ b/src/robot_test/data_analysis/scripts/generate_report.py @@ -6,6 +6,7 @@ # Set the logs directory LOGS_DIR = "logs" + def process_logs(): # Iterate through all folders in the logs directory for folder in os.listdir(LOGS_DIR): @@ -26,15 +27,23 @@ def process_logs(): detection_file = os.path.join(log_folder_path, "detected_markers.csv") info_file = os.path.join(log_folder_path, "test_information.txt") - if not os.path.exists(error_file) or not os.path.exists(detection_file) or not os.path.exists(info_file): + if ( + not os.path.exists(error_file) + or not os.path.exists(detection_file) + or not os.path.exists(info_file) + ): print(f"Missing required files in {folder}. Skipping...") continue # Analyze data and generate the report - analyze_and_generate_report(log_folder_path, error_file, detection_file, info_file, report_path) + analyze_and_generate_report( + log_folder_path, error_file, detection_file, info_file, report_path + ) -def analyze_and_generate_report(folder_path, error_file, detection_file, info_file, report_path): +def analyze_and_generate_report( + folder_path, error_file, detection_file, info_file, report_path +): # Load data errors_df = pd.read_csv(error_file).round(4) detections_df = pd.read_csv(detection_file) @@ -70,7 +79,9 @@ def analyze_and_generate_report(folder_path, error_file, detection_file, info_fi for marker_id in errors_df["marker_id"].unique(): marker_data = errors_df[errors_df["marker_id"] == marker_id] timestamps = marker_data["timestamp"] - errors = (marker_data["dx"]**2 + marker_data["dy"]**2 + marker_data["dz"]**2)**0.5 + errors = ( + marker_data["dx"] ** 2 + marker_data["dy"] ** 2 + marker_data["dz"] ** 2 + ) ** 0.5 plt.plot(timestamps, errors, label=f"Marker {marker_id}", marker="o") plt.title("Pose Errors Over Time") plt.xlabel("Time (s)") @@ -82,7 +93,13 @@ def analyze_and_generate_report(folder_path, error_file, detection_file, info_fi # Plot 2: Number of Detected Markers detection_plot_path = os.path.join(folder_path, "detection_plot.png") plt.figure(figsize=(10, 6)) - plt.plot(detections_df["timestamp"], detections_df["num_markers"], marker="o", color="blue", label="Detected Markers") + plt.plot( + detections_df["timestamp"], + detections_df["num_markers"], + marker="o", + color="blue", + label="Detected Markers", + ) plt.title("Number of Detected Markers Over Time") plt.xlabel("Time (s)") plt.ylabel("Number of Markers") @@ -97,7 +114,12 @@ def analyze_and_generate_report(folder_path, error_file, detection_file, info_fi plt.figure(figsize=(10, 6)) for marker_id in errors_df["marker_id"].unique(): marker_data = errors_df[errors_df["marker_id"] == marker_id] - plt.plot(marker_data["timestamp"], marker_data[axis], label=f"Marker {marker_id}", marker="o") + plt.plot( + marker_data["timestamp"], + marker_data[axis], + label=f"Marker {marker_id}", + marker="o", + ) plt.title(f"Orientation Errors ({axis.upper()}) Over Time") plt.xlabel("Time (s)") plt.ylabel(f"Orientation Error ({axis})") @@ -133,15 +155,28 @@ def analyze_and_generate_report(folder_path, error_file, detection_file, info_fi if overall_mean is not None: pdf.cell(200, 10, txt="Overall Pose Errors (Mean and Std):", ln=True) for col in overall_mean.index: - pdf.cell(200, 10, txt=f" {col}: Mean={overall_mean[col]:.4f}, Std={overall_std[col]:.4f}", ln=True) + pdf.cell( + 200, + 10, + txt=f" {col}: Mean={overall_mean[col]:.4f}, Std={overall_std[col]:.4f}", + ln=True, + ) pdf.cell(200, 10, txt="Detection Analysis:", ln=True, align="L") - pdf.cell(200, 10, txt=f"Mean Number of Detected Markers: {detection_mean:.4f}", ln=True) + pdf.cell( + 200, 10, txt=f"Mean Number of Detected Markers: {detection_mean:.4f}", ln=True + ) pdf.cell(200, 10, txt=f"Standard Deviation: {detection_std:.4f}", ln=True) # Page 4-5: Orientation Error Plots for axis, path in orientation_plot_paths.items(): pdf.add_page() - pdf.cell(200, 10, txt=f"Orientation Errors ({axis.upper()}) Over Time", ln=True, align="C") + pdf.cell( + 200, + 10, + txt=f"Orientation Errors ({axis.upper()}) Over Time", + ln=True, + align="C", + ) pdf.image(path, x=10, y=50, w=180) # Save the PDF diff --git a/src/robot_test/launch/standard_joint_test.launch.py b/src/robot_test/launch/standard_joint_test.launch.py index fc05816..5bc437a 100644 --- a/src/robot_test/launch/standard_joint_test.launch.py +++ b/src/robot_test/launch/standard_joint_test.launch.py @@ -27,6 +27,7 @@ import xacro from moveit_configs_utils import MoveItConfigsBuilder + def generate_launch_description(): """ @brief Generates the launch description for running standard joint tests with visual servoing components. @@ -42,56 +43,95 @@ def generate_launch_description(): # Declare the 'num_cameras' launch argument num_cameras_arg = DeclareLaunchArgument( - 'num_cameras', - default_value='1', - description='Number of cameras (1 or 2)' + "num_cameras", default_value="1", description="Number of cameras (1 or 2)" ) # Launch configuration to access 'num_cameras' argument - num_cameras = LaunchConfiguration('num_cameras') + num_cameras = LaunchConfiguration("num_cameras") # Package Directories pkg_name = "robot_description" # Name of the robot description package - robot_moveit_config = "robot_moveit_config" # Name of the MoveIt configuration package - share_dir = get_package_share_directory(pkg_name) # Path to the robot description package - moveit_config_pkg_path = get_package_share_directory(robot_moveit_config) # Path to the MoveIt config package + robot_moveit_config = ( + "robot_moveit_config" # Name of the MoveIt configuration package + ) + share_dir = get_package_share_directory( + pkg_name + ) # Path to the robot description package + moveit_config_pkg_path = get_package_share_directory( + robot_moveit_config + ) # Path to the MoveIt config package # Load and process URDF/XACRO file - xacro_file = os.path.join(share_dir, "urdf", "r5a_v_ros.urdf.xacro") # Path to the XACRO file + xacro_file = os.path.join( + share_dir, "urdf", "r5a_v_ros.urdf.xacro" + ) # Path to the XACRO file robot_description_config = xacro.process_file(xacro_file) # Process the XACRO file - robot_description = {"robot_description": robot_description_config.toxml()} # Convert to XML format + robot_description = { + "robot_description": robot_description_config.toxml() + } # Convert to XML format # Joint positions parameter (Define your joint positions here) joint_positions = [ # Position 0: Home position - 0.0, 0.0, 0.0, 0.0, 0.0, - + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, # Position 1: Extend first joint (Base rotation) - 0.5, 0.0, 0.0, 0.0, 0.0, - + 0.5, + 0.0, + 0.0, + 0.0, + 0.0, # Position 2: Extend second joint (Shoulder) - 0.0, 0.5, 0.0, 0.0, 0.0, - + 0.0, + 0.5, + 0.0, + 0.0, + 0.0, # Position 3: Extend third joint (Elbow) - 0.0, 0.0, 0.5, 0.0, 0.0, - + 0.0, + 0.0, + 0.5, + 0.0, + 0.0, # Position 4: Extend fourth joint (Wrist pitch) - 0.0, 0.0, 0.0, 0.5, 0.0, - + 0.0, + 0.0, + 0.0, + 0.5, + 0.0, # Position 5: Extend fifth joint (Wrist roll) - 0.0, 0.0, 0.0, 0.0, 0.5, - + 0.0, + 0.0, + 0.0, + 0.0, + 0.5, # Position 6: All joints at positive quarter range - 0.25, 0.25, 0.25, 0.25, 0.25, - + 0.25, + 0.25, + 0.25, + 0.25, + 0.25, # Position 7: All joints at negative quarter range - -0.25, -0.25, -0.25, -0.25, -0.25, - + -0.25, + -0.25, + -0.25, + -0.25, + -0.25, # Position 8: Alternate joints positive and negative - 0.5, -0.5, 0.5, -0.5, 0.5, - + 0.5, + -0.5, + 0.5, + -0.5, + 0.5, # Position 9: Arm Pointing towards Camera 1 - 1.5, -1.5, 0.0, 0.0, 0.0, + 1.5, + -1.5, + 0.0, + 0.0, + 0.0, ] # Test type parameter @@ -106,7 +146,9 @@ def generate_launch_description(): ) # Gazebo launch with a custom world file that includes a spotlight - world_file_path = os.path.join(share_dir, "worlds", "spotlight.world") # Path to the custom world file + world_file_path = os.path.join( + share_dir, "worlds", "spotlight.world" + ) # Path to the custom world file gazebo = IncludeLaunchDescription( PythonLaunchDescriptionSource( [ @@ -214,7 +256,7 @@ def generate_launch_description(): parameters=[ {"use_sim_time": True}, ], - condition=UnlessCondition(PythonExpression(['"', num_cameras, '" == "2"'])) + condition=UnlessCondition(PythonExpression(['"', num_cameras, '" == "2"'])), ) # Aruco Detector Double Node @@ -225,14 +267,13 @@ def generate_launch_description(): parameters=[ {"use_sim_time": True}, ], - condition=IfCondition(PythonExpression(['"', num_cameras, '" == "2"'])) + condition=IfCondition(PythonExpression(['"', num_cameras, '" == "2"'])), ) # Launch Actions actions = [ num_cameras_arg, # Added the launch argument SetParameter(name="use_sim_time", value=True), - # Event handlers for controller loading RegisterEventHandler( event_handler=OnProcessExit( @@ -252,7 +293,6 @@ def generate_launch_description(): on_exit=[move_group_node], ) ), - # Event handler to start other nodes after move_group_node starts RegisterEventHandler( event_handler=OnProcessStart( @@ -265,17 +305,15 @@ def generate_launch_description(): ], ) ), - # Event handler to shutdown when standard_joint_test_node exits RegisterEventHandler( event_handler=OnProcessExit( target_action=standard_joint_test_node, on_exit=[ - Shutdown(reason='Standard joint test completed'), + Shutdown(reason="Standard joint test completed"), ], ) ), - # Nodes to be launched gazebo, robot_state_publisher_node, From 8d481e55d08e683b2672a84cb2ea9ec2b17aa1bf Mon Sep 17 00:00:00 2001 From: chloegaugry Date: Mon, 21 Jul 2025 17:06:21 +0200 Subject: [PATCH 3/3] Ajout du fichier nom-du-fichier.ext --- cleanup_srdf_complete.sh | 133 ++++++ ...armr5.srdf.backup_complete_20250721_165728 | 451 ++++++++++++++++++ 2 files changed, 584 insertions(+) create mode 100755 cleanup_srdf_complete.sh create mode 100644 src/robot_moveit_config/config/armr5.srdf.backup_complete_20250721_165728 diff --git a/cleanup_srdf_complete.sh b/cleanup_srdf_complete.sh new file mode 100755 index 0000000..65a75c9 --- /dev/null +++ b/cleanup_srdf_complete.sh @@ -0,0 +1,133 @@ +#!/bin/bash +# Script complet pour nettoyer et corriger le fichier SRDF + +echo "🧹 Nettoyage complet du fichier SRDF..." + +WORKSPACE_PATH="$HOME/Robot5A-Simulation" +SRDF_FILE=$(find $WORKSPACE_PATH -name "armr5.srdf" -type f | head -1) + +if [ -z "$SRDF_FILE" ]; then + echo "❌ Fichier SRDF (armr5.srdf) non trouvé!" + exit 1 +fi + +echo "📁 Fichier SRDF trouvé : $SRDF_FILE" + +# Sauvegarde +BACKUP_FILE="${SRDF_FILE}.backup_complete_$(date +%Y%m%d_%H%M%S)" +cp "$SRDF_FILE" "$BACKUP_FILE" +echo "💾 Sauvegarde créée : $BACKUP_FILE" + +# Compter les problèmes avant nettoyage +ARUCO_BEFORE=$(grep -c "aruco_plane" "$SRDF_FILE" 2>/dev/null || echo "0") +echo "📊 Lignes aruco_plane avant nettoyage : $ARUCO_BEFORE" + +# ÉTAPE 1: Supprimer toutes les références aux aruco_plane +echo "🗑️ Suppression de toutes les références aruco_plane..." +sed -i '/aruco_plane/d' "$SRDF_FILE" + +# ÉTAPE 2: Ajouter les règles manquantes pour toutes les caméras +echo "📷 Ajout des règles de collision pour toutes les caméras..." + +# Créer un fichier temporaire avec les nouvelles règles +TEMP_FILE=$(mktemp) + +# Copier tout sauf la balise de fermeture +sed '$d' "$SRDF_FILE" > "$TEMP_FILE" + +# Ajouter les nouvelles règles pour les caméras manquantes +cat >> "$TEMP_FILE" << 'EOF' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +EOF + +# Remplacer le fichier original +mv "$TEMP_FILE" "$SRDF_FILE" + +# Vérifications finales +ARUCO_AFTER=$(grep -c "aruco_plane" "$SRDF_FILE" 2>/dev/null || echo "0") +CAMERAS_TOTAL=$(grep -c "camera_link" "$SRDF_FILE") + +echo "" +echo "✅ Nettoyage terminé !" +echo "📊 Références aruco_plane supprimées : $ARUCO_BEFORE" +echo "📊 Références aruco_plane restantes : $ARUCO_AFTER" +echo "📷 Total lignes caméras : $CAMERAS_TOTAL" +echo "" +echo "🔧 Maintenant recompilez :" +echo " cd $WORKSPACE_PATH" +echo " colcon build --packages-select robot_moveit_config" +echo " source install/setup.bash" +echo " ros2 launch robot_control visual_sim.launch.py" diff --git a/src/robot_moveit_config/config/armr5.srdf.backup_complete_20250721_165728 b/src/robot_moveit_config/config/armr5.srdf.backup_complete_20250721_165728 new file mode 100644 index 0000000..f6f4b84 --- /dev/null +++ b/src/robot_moveit_config/config/armr5.srdf.backup_complete_20250721_165728 @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +