Skip to content

Determinism in simulation_manipulation with ros2 Humble #248

@naroasc

Description

@naroasc

Hi,

I am trying to create a new controller for the Turtlebot3 with the OpenManipulator-X. in ros2 Humble. I am using /cmd_vel for the turtlebot3 and /arm_controller/joint_trajectory for the OpenManipulator_X. However I am facing some issues.

First of all, when I launch Gazebo, it seems that the Turtlebot3 slightly moves, it does not stay in the same position.

Additionally the main issue is that I can't get the same simulations results regarding the position of both systems even if the conditions are the same. I have tried to put the same seed and change the friction of the wheel but it does not work. It seems that sometimes theta have a little bit of perturbation but I don't know how to fix it.

Any ideas? Thank you in advance.

This is the log:

ros2 launch turtlebot3_manipulati
on_gazebo gazebo.launch.py
[INFO] [launch]: All log files can be found below /root/.ros/log/2025-09-18-08-23-28-167390-ac9ea64ed5d4-63009
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [robot_state_publisher-1]: process started with pid [63019]
[INFO] [spawner-2]: process started with pid [63021]
[INFO] [gzserver-3]: process started with pid [63023]
[INFO] [gzclient-4]: process started with pid [63025]
[INFO] [spawn_entity.py-5]: process started with pid [63027]
[robot_state_publisher-1] 1758183808.781017 [42] robot_stat: selected interface "lo" is not multicast-capable: disabling multicast
[robot_state_publisher-1] [INFO] [1758183808.785756689] [robot_state_publisher]: got segment base_footprint
[robot_state_publisher-1] [INFO] [1758183808.785796818] [robot_state_publisher]: got segment base_link
[robot_state_publisher-1] [INFO] [1758183808.785802068] [robot_state_publisher]: got segment base_scan
[robot_state_publisher-1] [INFO] [1758183808.785805588] [robot_state_publisher]: got segment camera_link
[robot_state_publisher-1] [INFO] [1758183808.785808928] [robot_state_publisher]: got segment camera_rgb_frame
[robot_state_publisher-1] [INFO] [1758183808.785812168] [robot_state_publisher]: got segment camera_rgb_optical_frame
[robot_state_publisher-1] [INFO] [1758183808.785815658] [robot_state_publisher]: got segment caster_back_left_link
[robot_state_publisher-1] [INFO] [1758183808.785818958] [robot_state_publisher]: got segment caster_back_right_link
[robot_state_publisher-1] [INFO] [1758183808.785822138] [robot_state_publisher]: got segment dummy_mimic_fix
[robot_state_publisher-1] [INFO] [1758183808.785825488] [robot_state_publisher]: got segment end_effector_link
[robot_state_publisher-1] [INFO] [1758183808.785828598] [robot_state_publisher]: got segment gripper_left_link
[robot_state_publisher-1] [INFO] [1758183808.785831658] [robot_state_publisher]: got segment gripper_right_link
[robot_state_publisher-1] [INFO] [1758183808.785834778] [robot_state_publisher]: got segment imu_link
[robot_state_publisher-1] [INFO] [1758183808.785837888] [robot_state_publisher]: got segment link1
[robot_state_publisher-1] [INFO] [1758183808.785841148] [robot_state_publisher]: got segment link2
[robot_state_publisher-1] [INFO] [1758183808.785844158] [robot_state_publisher]: got segment link3
[robot_state_publisher-1] [INFO] [1758183808.785847118] [robot_state_publisher]: got segment link4
[robot_state_publisher-1] [INFO] [1758183808.785850088] [robot_state_publisher]: got segment link5
[robot_state_publisher-1] [INFO] [1758183808.785852968] [robot_state_publisher]: got segment wheel_left_link
[robot_state_publisher-1] [INFO] [1758183808.785856048] [robot_state_publisher]: got segment wheel_right_link
[spawn_entity.py-5] 1758183808.914959 [42] python3: selected interface "lo" is not multicast-capable: disabling multicast
[spawner-2] 1758183808.915590 [42] spawner: selected interface "lo" is not multicast-capable: disabling multicast
[gzserver-3] 1758183808.934263 [42] gzserver: selected interface "lo" is not multicast-capable: disabling multicast
[spawner-2] [INFO] [1758183808.943405044] [spawner_joint_state_broadcaster]: waiting for service /controller_manager/list_controllers to become available...
[spawn_entity.py-5] [INFO] [1758183808.949705018] [spawn_entity]: Spawn Entity started
[spawn_entity.py-5] [INFO] [1758183808.950005656] [spawn_entity]: Loading entity published on topic robot_description
[spawn_entity.py-5] [INFO] [1758183808.951267849] [spawn_entity]: Waiting for entity xml on robot_description
[spawn_entity.py-5] [INFO] [1758183808.953274367] [spawn_entity]: Waiting for service /spawn_entity, timeout = 30
[spawn_entity.py-5] [INFO] [1758183808.953521216] [spawn_entity]: Waiting for service /spawn_entity
[gzserver-3] ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
[gzserver-3] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
[gzserver-3] ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
[gzserver-3] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
[gzserver-3] ALSA lib confmisc.c:1334:(snd_func_refer) error evaluating name
[gzserver-3] ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
[gzserver-3] ALSA lib conf.c:5701:(snd_config_expand) Evaluate error: No such file or directory
[gzserver-3] ALSA lib pcm.c:2664:(snd_pcm_open_noupdate) Unknown PCM default
[gzserver-3] AL lib: (EE) ALCplaybackAlsa_open: Could not open playback device 'default': No such file or directory
[spawn_entity.py-5] [INFO] [1758183809.456592061] [spawn_entity]: Calling service /spawn_entity
[gzserver-3] [INFO] [1758183810.275977690] [camera_controller]: Publishing camera info to [/pi_camera/camera_info]
[spawn_entity.py-5] [INFO] [1758183810.337018214] [spawn_entity]: Spawn status: SpawnEntity: Successfully spawned entity [turtlebot3_manipulation_system]
[gzserver-3] [INFO] [1758183810.382192527] [diff_drive]: Wheel pair 1 separation set to [0.287000m]
[gzserver-3] [INFO] [1758183810.382224157] [diff_drive]: Wheel pair 1 diameter set to [0.066000m]
[gzserver-3] [INFO] [1758183810.382527825] [diff_drive]: Subscribed to [/cmd_vel]
[gzserver-3] [INFO] [1758183810.383157972] [diff_drive]: Advertise odometry on [/odom]
[gzserver-3] [INFO] [1758183810.383955557] [diff_drive]: Publishing odom transforms between [odom] and [base_footprint]
[gzserver-3] [INFO] [1758183810.392466009] [gazebo_ros2_control]: Loading gazebo_ros2_control plugin
[gzserver-3] [INFO] [1758183810.393657942] [gazebo_ros2_control]: Starting gazebo_ros2_control plugin in namespace: /
[gzserver-3] [INFO] [1758183810.393673522] [gazebo_ros2_control]: Starting gazebo_ros2_control plugin in ros 2 node: gazebo_ros2_control
[gzserver-3] [INFO] [1758183810.394442398] [gazebo_ros2_control]: connected to service!! robot_state_publisher
[gzserver-3] [INFO] [1758183810.394895265] [gazebo_ros2_control]: Received urdf from param server, parsing...
[gzserver-3] [INFO] [1758183810.394917725] [gazebo_ros2_control]: Loading parameter files /workspaces/mobile_manipulator_ws/install/turtlebot3_manipulation_gazebo/share/turtlebot3_manipulation_gazebo/config/gazebo_controller_manager.yaml
[gzserver-3] [INFO] [1758183810.400891041] [gazebo_ros2_control]: Loading joint: wheel_left_joint
[gzserver-3] [INFO] [1758183810.400904781] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.400910361] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.400915741] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.400923641] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.400929691] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.400935921] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.400947621] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401017751] [gazebo_ros2_control]: Loading joint: wheel_right_joint
[gzserver-3] [INFO] [1758183810.401028200] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401033270] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401037220] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401042280] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401045760] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401049760] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401062450] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401107430] [gazebo_ros2_control]: Loading joint: joint1
[gzserver-3] [INFO] [1758183810.401116330] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401122280] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401126400] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401130840] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401134250] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401137900] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401143420] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401197480] [gazebo_ros2_control]: Loading joint: joint2
[gzserver-3] [INFO] [1758183810.401204669] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401208159] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401211829] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401216469] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401219709] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401223469] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401226909] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401270669] [gazebo_ros2_control]: Loading joint: joint3
[gzserver-3] [INFO] [1758183810.401278729] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401283419] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401288879] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401293379] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401296819] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401300569] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401303989] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401386308] [gazebo_ros2_control]: Loading joint: joint4
[gzserver-3] [INFO] [1758183810.401395768] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401399508] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401403228] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401407618] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401410928] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401414748] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401418168] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401460908] [gazebo_ros2_control]: Loading joint: gripper_left_joint
[gzserver-3] [INFO] [1758183810.401468678] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401473588] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401477128] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401481138] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401484418] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401488388] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401491798] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401549798] [gazebo_ros2_control]: Loading joint: gripper_right_joint
[gzserver-3] [INFO] [1758183810.401559357] [gazebo_ros2_control]: Joint 'gripper_right_joint'is mimicking joint 'gripper_left_joint' with multiplier: 1
[gzserver-3] [INFO] [1758183810.401563697] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401567297] [gazebo_ros2_control]: position
[gzserver-3] [INFO] [1758183810.401571857] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401576067] [gazebo_ros2_control]: velocity
[gzserver-3] [INFO] [1758183810.401579487] [gazebo_ros2_control]: found initial value: 0.000000
[gzserver-3] [INFO] [1758183810.401583227] [gazebo_ros2_control]: Command:
[gzserver-3] [INFO] [1758183810.401586587] [gazebo_ros2_control]: position
[gzserver-3] [WARN] [1758183810.401662787] [gazebo_ros2_control]: Skipping sensor in the URDF named 'battery' which is not in the gazebo model.
[gzserver-3] [INFO] [1758183810.401670827] [gazebo_ros2_control]: Loading sensor: imu
[gzserver-3] [INFO] [1758183810.401674717] [gazebo_ros2_control]: State:
[gzserver-3] [INFO] [1758183810.401681327] [gazebo_ros2_control]: orientation.x
[gzserver-3] [INFO] [1758183810.401685787] [gazebo_ros2_control]: orientation.y
[gzserver-3] [INFO] [1758183810.401689417] [gazebo_ros2_control]: orientation.z
[gzserver-3] [INFO] [1758183810.401692937] [gazebo_ros2_control]: orientation.w
[gzserver-3] [INFO] [1758183810.401696547] [gazebo_ros2_control]: angular_velocity.x
[gzserver-3] [INFO] [1758183810.401700097] [gazebo_ros2_control]: angular_velocity.y
[gzserver-3] [INFO] [1758183810.401703467] [gazebo_ros2_control]: angular_velocity.z
[gzserver-3] [INFO] [1758183810.401706957] [gazebo_ros2_control]: linear_acceleration.x
[gzserver-3] [INFO] [1758183810.401710457] [gazebo_ros2_control]: linear_acceleration.y
[gzserver-3] [INFO] [1758183810.401713817] [gazebo_ros2_control]: linear_acceleration.z
[gzserver-3] [INFO] [1758183810.401726417] [resource_manager]: Initialize hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401776066] [resource_manager]: Successful initialization of hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401810906] [resource_manager]: 'configure' hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401814966] [resource_manager]: Successful 'configure' of hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401819436] [resource_manager]: 'activate' hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401822906] [resource_manager]: Successful 'activate' of hardware 'TurtleBot3ManipulationSystem'
[gzserver-3] [INFO] [1758183810.401866996] [gazebo_ros2_control]: Loading controller_manager
[gzserver-3] [INFO] [1758183810.412076978] [gazebo_ros2_control]: Loaded gazebo_ros2_control.
[gzserver-3] [INFO] [1758183810.446119364] [controller_manager]: Loading controller 'joint_state_broadcaster'
[spawner-2] [INFO] [1758183810.452254290] [spawner_joint_state_broadcaster]: Loaded joint_state_broadcaster
[gzserver-3] [INFO] [1758183810.452944366] [controller_manager]: Configuring controller 'joint_state_broadcaster'
[gzserver-3] [INFO] [1758183810.453037275] [joint_state_broadcaster]: 'joints' or 'interfaces' parameter is empty. All available state interfaces will be published
[spawner-2] [INFO] [1758183810.458323945] [spawner_joint_state_broadcaster]: Configured and activated joint_state_broadcaster
[INFO] [spawn_entity.py-5]: process has finished cleanly [pid 63027]
[INFO] [spawner-2]: process has finished cleanly [pid 63021]
[INFO] [spawner-6]: process started with pid [63371]
[INFO] [spawner-7]: process started with pid [63373]
[INFO] [spawner-8]: process started with pid [63376]
[spawner-8] 1758183810.788566 [42] spawner: selected interface "lo" is not multicast-capable: disabling multicast
[spawner-6] 1758183810.789422 [42] spawner: selected interface "lo" is not multicast-capable: disabling multicast
[spawner-7] 1758183810.790663 [42] spawner: selected interface "lo" is not multicast-capable: disabling multicast
[gzserver-3] [INFO] [1758183810.806652028] [controller_manager]: Loading controller 'imu_broadcaster'
[gzserver-3] [INFO] [1758183810.811298192] [controller_manager]: Loading controller 'arm_controller'
[gzserver-3] [WARN] [1758183810.820085772] [arm_controller]: [Deprecated]: "allow_nonzero_velocity_at_trajectory_end" is set to true. The default behavior will change to false.
[gzserver-3] [INFO] [1758183810.821544154] [controller_manager]: Loading controller 'gripper_controller'
[spawner-8] [INFO] [1758183810.824041440] [spawner_imu_broadcaster]: Loaded imu_broadcaster
[gzserver-3] [INFO] [1758183810.825885939] [controller_manager]: Configuring controller 'imu_broadcaster'
[spawner-8] [INFO] [1758183810.831827525] [spawner_imu_broadcaster]: Configured and activated imu_broadcaster
[spawner-7] [INFO] [1758183810.833091748] [spawner_arm_controller]: Loaded arm_controller
[gzserver-3] [INFO] [1758183810.833649125] [controller_manager]: Configuring controller 'arm_controller'
[gzserver-3] [INFO] [1758183810.833749515] [arm_controller]: No specific joint names are used for command interfaces. Using 'joints' parameter.
[gzserver-3] [INFO] [1758183810.833771374] [arm_controller]: Command interfaces are [position] and state interfaces are [position velocity].
[gzserver-3] [INFO] [1758183810.833796214] [arm_controller]: Using 'splines' interpolation method.
[gzserver-3] [INFO] [1758183810.834178532] [arm_controller]: Controller state will be published at 200.00 Hz.
[gzserver-3] [INFO] [1758183810.835880472] [arm_controller]: Action status changes will be monitored at 20.00 Hz.
[spawner-6] [INFO] [1758183810.841319372] [spawner_gripper_controller]: Loaded gripper_controller
[gzserver-3] [INFO] [1758183810.841735179] [controller_manager]: Configuring controller 'gripper_controller'
[gzserver-3] [INFO] [1758183810.841768989] [gripper_controller]: Action status changes will be monitored at 20.000000 Hz.
[spawner-7] [INFO] [1758183810.842232036] [spawner_arm_controller]: Configured and activated arm_controller
[spawner-6] [INFO] [1758183810.849106307] [spawner_gripper_controller]: Configured and activated gripper_controller
[INFO] [spawner-8]: process has finished cleanly [pid 63376]
[INFO] [spawner-7]: process has finished cleanly [pid 63373]
[INFO] [spawner-6]: process has finished cleanly [pid 63371]

This is a video for the movement of the turtlebot3:

Grabacion.2025-09-18.103720.mp4

And even without the controller, the behaviour of the system is different with the same conditions:

Simulation 1 (RMSE of theta = 0.30081):

Image

Simulation 2 (RMSE of theta = 0.030126):

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions