tenfoldpaper / multipanda_ros2

Apache License 2.0
11 stars 3 forks source link

Segmentation fault due to uninitialized `mj_pose_service_node_` while launching `franka_sim.launch.py` #2

Open Ekanshh opened 2 weeks ago

Ekanshh commented 2 weeks ago

Issue

Environment Setup:

Description

I encountered a segmentation fault error while launching franka_sim.launch.py. After investigating based on the logs, I found that there was a null reference in this conditional statement. It seems that mj_pose_service_node_ did not initialize before calling mj_pose_service_node_->hasUpdates(), which leads to the segmentation fault.

Logs

ros2 launch franka_bringup franka_sim.launch.py
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [816571]
[INFO] [joint_state_publisher-2]: process started with pid [816573]
[INFO] [franka_control2_node-3]: process started with pid [816575]
[INFO] [spawner-4]: process started with pid [816577]
[INFO] [rviz2-5]: process started with pid [816579]
[robot_state_publisher-1] [INFO] [1719599712.170395662] [robot_state_publisher]: got segment panda_hand
[robot_state_publisher-1] [INFO] [1719599712.170445887] [robot_state_publisher]: got segment panda_hand_tcp
[robot_state_publisher-1] [INFO] [1719599712.170450620] [robot_state_publisher]: got segment panda_leftfinger
[robot_state_publisher-1] [INFO] [1719599712.170453523] [robot_state_publisher]: got segment panda_link0
[robot_state_publisher-1] [INFO] [1719599712.170456073] [robot_state_publisher]: got segment panda_link1
[robot_state_publisher-1] [INFO] [1719599712.170458346] [robot_state_publisher]: got segment panda_link2
[robot_state_publisher-1] [INFO] [1719599712.170460630] [robot_state_publisher]: got segment panda_link3
[robot_state_publisher-1] [INFO] [1719599712.170462949] [robot_state_publisher]: got segment panda_link4
[robot_state_publisher-1] [INFO] [1719599712.170465194] [robot_state_publisher]: got segment panda_link5
[robot_state_publisher-1] [INFO] [1719599712.170467431] [robot_state_publisher]: got segment panda_link6
[robot_state_publisher-1] [INFO] [1719599712.170469700] [robot_state_publisher]: got segment panda_link7
[robot_state_publisher-1] [INFO] [1719599712.170472090] [robot_state_publisher]: got segment panda_link8
[robot_state_publisher-1] [INFO] [1719599712.170474393] [robot_state_publisher]: got segment panda_rightfinger
[franka_control2_node-3] [WARN] [1719599712.176108674] [controller_manager]: [Deprecated] Passing the robot description parameter directly to the control_manager node is deprecated. Use '~/robot_description' topic from 'robot_state_publisher' instead.
[franka_control2_node-3] text not specified in the mj_yaml tag
[franka_control2_node-3] [INFO] [1719599712.176310807] [resource_manager]: Loading hardware 'FrankaMujocoHardwareInterface' 
[franka_control2_node-3] [INFO] [1719599712.184769504] [resource_manager]: Initialize hardware 'FrankaMujocoHardwareInterface' 
[franka_control2_node-3] [INFO] [1719599712.184851736] [FrankaMujocoMultiHardwareInterface]: Initial checks all passed
[joint_state_publisher-2] [INFO] [1719599712.411248883] [joint_state_publisher]: Waiting for robot_description to be published on the robot_description topic...
[rviz2-5] [INFO] [1719599712.478287069] [rviz2]: Stereo is NOT SUPPORTED
[rviz2-5] [INFO] [1719599712.478394712] [rviz2]: OpenGl version: 4.6 (GLSL 4.6)
[rviz2-5] [INFO] [1719599712.493141498] [rviz2]: Stereo is NOT SUPPORTED
[franka_control2_node-3] [INFO] [1719599712.722204765] [panda_gripper_sim_node]: Started gripper sim
[franka_control2_node-3] [INFO] [1719599712.722521040] [resource_manager]: Successful initialization of hardware 'FrankaMujocoHardwareInterface'
[franka_control2_node-3] [INFO] [1719599712.722595423] [resource_manager]: 'configure' hardware 'FrankaMujocoHardwareInterface' 
[franka_control2_node-3] [INFO] [1719599712.722601096] [resource_manager]: Successful 'configure' of hardware 'FrankaMujocoHardwareInterface'
[franka_control2_node-3] [INFO] [1719599712.722608398] [resource_manager]: 'activate' hardware 'FrankaMujocoHardwareInterface' 
[franka_control2_node-3] [INFO] [1719599712.722612493] [FrankaMujocoMultiHardwareInterface]: Started
[franka_control2_node-3] [INFO] [1719599712.722615834] [resource_manager]: Successful 'activate' of hardware 'FrankaMujocoHardwareInterface'
[franka_control2_node-3] [INFO] [1719599712.724859987] [controller_manager]: franka_control2_node
[franka_control2_node-3] [INFO] [1719599712.724879452] [controller_manager]: update rate is 1000 Hz
[franka_control2_node-3] [INFO] [1719599712.724976211] [controller_manager]: RT kernel is recommended for better performance
[franka_control2_node-3] Stack trace (most recent call last) in thread 816775:
[franka_control2_node-3] #8    Object "", at 0xffffffffffffffff, in 
[franka_control2_node-3] #7    Source "../sysdeps/unix/sysv/linux/x86_64/clone3.S", line 81, in __clone3 [0x7f4c3532684f]
[franka_control2_node-3] #6    Source "./nptl/pthread_create.c", line 442, in start_thread [0x7f4c35294ac2]
[franka_control2_node-3] #5    Object "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30", at 0x7f4c356dc252, in 
[franka_control2_node-3] #4    Object "/home/sharma/Documents/thesis/code_ws/build/franka_control2/franka_control2_node", at 0x62b41ac221d2, in main::{lambda()#1}::operator()() const
[franka_control2_node-3] #3    Object "/opt/ros/humble/lib/libcontroller_manager.so", at 0x7f4c35b807a4, in controller_manager::ControllerManager::write(rclcpp::Time const&, rclcpp::Duration const&)
[franka_control2_node-3] #2    Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7f4c355af9ac, in hardware_interface::ResourceManager::write(rclcpp::Time const&, rclcpp::Duration const&)
[franka_control2_node-3] #1    Object "/opt/ros/humble/lib/libhardware_interface.so", at 0x7f4c355ccf3f, in hardware_interface::System::write(rclcpp::Time const&, rclcpp::Duration const&)
[franka_control2_node-3] #0    Object "/home/sharma/Documents/thesis/code_ws/build/franka_hardware/libfranka_hardware.so", at 0x7f4c2e493065, in franka_hardware::FrankaMujocoMultiHardwareInterface::write(rclcpp::Time const&, rclcpp::Duration const&)
[franka_control2_node-3] Segmentation fault (Address not mapped to object [0x380])
[ERROR] [franka_control2_node-3]: process has died [pid 816575, exit code -11, cmd '/home/sharma/Documents/thesis/code_ws/install/franka_control2/lib/franka_control2/franka_control2_node --ros-args --params-file /tmp/launch_params_xlir758c --params-file /home/sharma/Documents/thesis/code_ws/install/franka_bringup/share/franka_bringup/config/sim_controllers.yaml -r joint_states:=franka/joint_states'].
[INFO] [launch]: process[franka_control2_node-3] was required: shutting down launched system
[INFO] [rviz2-5]: sending signal 'SIGINT' to process[rviz2-5]
[INFO] [spawner-4]: sending signal 'SIGINT' to process[spawner-4]
[INFO] [joint_state_publisher-2]: sending signal 'SIGINT' to process[joint_state_publisher-2]
[INFO] [robot_state_publisher-1]: sending signal 'SIGINT' to process[robot_state_publisher-1]
[rviz2-5] [INFO] [1719599712.849927856] [rclcpp]: signal_handler(signum=2)
[robot_state_publisher-1] [INFO] [1719599712.851182912] [rclcpp]: signal_handler(signum=2)
[INFO] [robot_state_publisher-1]: process has finished cleanly [pid 816571]
[INFO] [joint_state_publisher-2]: process has finished cleanly [pid 816573]
[INFO] [rviz2-5]: process has finished cleanly [pid 816579]
[ERROR] [spawner-4]: process[spawner-4] failed to terminate '5' seconds after receiving 'SIGINT', escalating to 'SIGTERM'
[INFO] [spawner-4]: sending signal 'SIGTERM' to process[spawner-4]
[ERROR] [spawner-4]: process has died [pid 816577, exit code -15, cmd '/opt/ros/humble/lib/controller_manager/spawner joint_state_broadcaster --ros-args'].
Ekanshh commented 2 weeks ago

After investigating based on the logs, I found that there was a null reference in this conditional statement. It seems that mj_pose_service_node_ did not initialize before calling mj_pose_service_node_->hasUpdates(), which leads to the segmentation fault.

Work-around

  1. Pass mj_yaml in the robot_description
    robot_description = Command(
        [
            FindExecutable(name="xacro"),
            " ",
            franka_xacro_file,
            " arm_id:=panda",
            " hand:=",
            load_gripper,
            " scene_xml:=",
            scene_xml,
            " mj_yaml:=",
            mj_yaml,
        ]
    )
  2. Modify this conditional statement to if(mj_pose_service_node_ && mj_pose_service_node_->hasUpdates()).

I am not sure whether these two workarounds can be a potential solution to fix the error. It needs more investigation. I would appreciate your thoughts and any guidance on this issue.