현상
시뮬(--sim)에서 DdsBridge가 게시하는 /rbq/odometry, /rbq/imu, /rbq/joint_states의 header.stamp가 Unix wall clock이다.
같은 버스에서 sensor_bridge(ros_gz_bridge, use_sim_time: true)가 게시하는 /rbq/imu/IMU_state stamp는 /clock과 같다.
시간축이 둘이다. 시뮬 시각이 벽시계보다 느려지면 odom stamp는 벽을 따라가고 /clock은 뒤처진다.
재현
--sim 스택과 물리 시뮬을 띄운 뒤:
ros2 topic echo /clock --once
ros2 topic echo /rbq/imu/IMU_state --field header.stamp --once
ros2 topic echo /rbq/odometry --field header.stamp --once
ros2 topic info /rbq/odometry -v
/rbq/odometry publisher는 _CREATED_BY_BARE_DDS_APP_. ROS 노드가 아니라 use_sim_time 파라미터가 없다.
같은 세션, 4 s 간격 예:
|
Δstamp |
/clock |
4.15 s |
/rbq/odometry |
4.50 s |
코드
rbq_sdk_cpp/include/Timer.hpp:
static double GetTime() {
std::chrono::time_point<std::chrono::system_clock> t =
std::chrono::system_clock::now();
auto timestamp = std::chrono::duration_cast<std::chrono::nanoseconds>(
t.time_since_epoch()).count();
return (timestamp * 1.0e-9);
}
--sim과 무관하게 Unix epoch다.
scripts/sim.bash의 --sim은 물리 시뮬 연결이다. stamp를 /clock으로 바꾸는 플래그는 없다.
sensor_bridge.launch.py의 ros_gz_bridge만 use_sim_time: True. /rbq/imu/IMU_state는 이 경로. /rbq/odometry는 DdsBridge payload라 타지 않는다.
기대
--sim이면 /rbq/odometry의 header.stamp가 /clock과 같은 시간축이도록 설정하기.
/clock과의 차이가 시간에 따라 커지지 않는다 (dt_odom ≈ dt_clock).
stamp를 채우는 곳은 --sim일 때의 Timer::GetTime() 또는 DdsBridge. 시뮬 시각 소스는 이미 받는 sim tick이거나 /clock. /clock 전에는 stamp를 올리지 않거나, 첫 clock 이후부터 맞춘다.
현상
시뮬(
--sim)에서 DdsBridge가 게시하는/rbq/odometry,/rbq/imu,/rbq/joint_states의header.stamp가 Unix wall clock이다.같은 버스에서
sensor_bridge(ros_gz_bridge,use_sim_time: true)가 게시하는/rbq/imu/IMU_statestamp는/clock과 같다.시간축이 둘이다. 시뮬 시각이 벽시계보다 느려지면 odom stamp는 벽을 따라가고
/clock은 뒤처진다.재현
--sim스택과 물리 시뮬을 띄운 뒤:/rbq/odometrypublisher는_CREATED_BY_BARE_DDS_APP_. ROS 노드가 아니라use_sim_time파라미터가 없다.같은 세션, 4 s 간격 예:
/clock/rbq/odometry코드
rbq_sdk_cpp/include/Timer.hpp:--sim과 무관하게 Unix epoch다.scripts/sim.bash의--sim은 물리 시뮬 연결이다. stamp를/clock으로 바꾸는 플래그는 없다.sensor_bridge.launch.py의ros_gz_bridge만use_sim_time: True./rbq/imu/IMU_state는 이 경로./rbq/odometry는 DdsBridge payload라 타지 않는다.기대
--sim이면/rbq/odometry의header.stamp가/clock과 같은 시간축이도록 설정하기./clock과의 차이가 시간에 따라 커지지 않는다 (dt_odom ≈ dt_clock).stamp를 채우는 곳은
--sim일 때의Timer::GetTime()또는 DdsBridge. 시뮬 시각 소스는 이미 받는 sim tick이거나/clock./clock전에는 stamp를 올리지 않거나, 첫 clock 이후부터 맞춘다.