https://github.com/gazebosim/ros_gz/tree/jazzy/ros_gz_sim_demos
ros_gz/ros_gz_sim_demos at jazzy · gazebosim/ros_gz
Integration between ROS (1 and 2) and Gazebo simulation - gazebosim/ros_gz
github.com
1. ros_gz_sim_demos관련 파일들은 아래의 경로에 있을 것이다.

2. 아래의 명령어를 입력해보자.
ros2 launch ros_gz_sim gz_sim.launch.py gz_args:="shapes.sdf"
- ros2 launch : ros2에서 launch파일을 실행하는 명령어이다.
- ros_gz_sim : ros2와 gazebo를 연결하는 패키지이다.
- gz_sim.launch.py : gazebo sim을 실행하는 launch파일이다.
- gz_args : gazebo실행시에 추가적인 인자를 전달하는 역할을 한다.
- shapes.sdf : gz_sim 실행시에 추가로 전달할 인자이며, 이는 gazebo에서 사용할 sdf파일이다.

3. Air pressure
- 3-1. 아래의 명령어를 입력해보자
ros2 launch ros_gz_sim_demos air_pressure.launch.py
- ros2 launch : ros2에서 launch파일을 실행하는 명령어이다.
- ros_gz_sim_demos : ros2와 gazebo sim을 연동하는 예제 패키지이다.
- air_pressure.launch.py : 공기 압력 센서를 포함한 gazebo sim 환경을 실행하는 launch파일이다.

- 3-2. 위의 예제에서 공기 압력 센서는 gazebo에서 작동하며, ROS2 토픽을 통해서 데이터를 publishing할 것 이다.
- 그래서 잘 되는지 확인을 위해서 ros2 topic list를 입력하고 센서 데이터가 잘 출력되는지 확인하자.
# 토픽 확인
ros2 topic list
# 센서 데이터 확인
ros2 topic echo /air_pressure


- 3-3. Qos( quiality of service)설정을 추가해서 topic echo를 해보자.
- Qos를 'Best Effort'로 설정해서, 신뢰성이 낮더라도 가능한 많은 데이터를 수신하게 한다.
ros2 topic echo /air_pressure --qos-reliability best_effort
# 이는 한개의 메시지만 받고 종료
ros2 topic echo /air_pressure --qos-reliability best_effort --once
# 신뢰성이 높은 모드로 진행. ( 데이터 손실 없이 모든 메시지 수신 )
- ros2 topic echo : 지정된 토픽의 메시지를 수신해서 터미널에 출력한다.
- /air_pressure : 수신할 토픽의 이름이다. 공기압력 센서 데이터가 publish되는 ros2 토픽이다.
- --qos-reliability best_effor : 해당 설정은 데이터를 최대한 수신하지만, 일부 손실이 발생하여도 재전송을 요청하지 않는 방식이다. ( best effort는 센서 데이터같이 지속적으로 발생하는 값을 처리할때 사용함 )
==> 해당 연습에서 발생하는 오류 내용
[gazebo-1] Warning [Utils.cc:132] [/sdf/world[@name="sensors"]/model[@name="force_torque_demo"]/link[@name="base_plate"]/static:/opt/ros/jazzy/opt/gz_sim_vendor/share/gz/gz-sim8/worlds/sensors.sdf:L209]: XML Element[static], child of element[link], not defined in SDF. Copying[static] as children of [link].
[parameter_bridge-2] [WARN] [1741227977.755085710] [ros_gz_bridge]: New subscription discovered on topic '/air_pressure', requesting incompatible QoS. No messages will be sent to it. Last incompatible policy: RELIABILITY_QOS_POLICY
[parameter_bridge-2] [WARN] [1741227977.755104540] [ros_gz_bridge]: New publisher discovered on topic '/air_pressure', offering incompatible QoS. No messages will be sent to it. Last incompatible policy: RELIABILITY_QOS_POLICY
[gazebo-1] Warning [Utils.cc:132] [/sdf/model[@name="force_torque_demo"]/link[@name="base_plate"]/static:<data-string>:L3]: XML Element[static], child of element[link], not defined in SDF. Copying[static] as children of [link].
[gazebo-1] Warning [Utils.cc:132] [/sdf/model[@name="force_torque_demo"]/link[@name="base_plate"]/static:<data-string>:L3]: XML Element[static], child of element[link], not defined in SDF. Copying[static] as children of [link].
- 1번째는 SDF관련 경고이다.
- 이는 /opt/ros/jazzy/opt/gz_sim_vendor/share/gz/gz-sim8/worlds에 존재하는 sensor.sdf가 원인이다.
구체적으로는 코드(207줄)를 보면 <model name="force_torque_demo">의 <link name="base_plate">안의 <static>부분이다. - 해결법...
- 1. /opt/ros/jazzy/opt/gz_sim_vendor/share/gz/gz-sim8/worlds에 존재하는 sensors.sdf는 내가 만든 것이 아니다. 그래서 수정하는 방식보다는 cp를 해서 할거다. 위의 디렉토리에서 cp를 해주자... ( 사진 1 참고 )
- 2. custum_sensor.sdf에 가서 <static>부분을 날리자. ( 사진 2 참고 )
- 3. 이제 launch 파일을 수정할것이다. ros_gz_sim_demos에 존재하는 launch파일에서 해당 파일을 읽어오는 부분을 수정하자. ( 사진 3 4 참고 )
- 이는 /opt/ros/jazzy/opt/gz_sim_vendor/share/gz/gz-sim8/worlds에 존재하는 sensor.sdf가 원인이다.




- 2번째는 QoS 불일치 경고이다
- 이는 /air_pressure 토픽에서 ros2와 gazebo간의 QoS정책이 일치하지 않아서 메시지가 전달되지 않는 문제다.
- 경고 메시지를 보면 한쪽에서는 'reliable(신뢰성 있는 전송)'을 요구하나, 다른쪽에서는 'best effort(최대한 전송)'을 사용하기 때문이다.
- 해결법...
- 1. 우선 /air_pressure의 QoS를 확인해보자. ros2 topic info /air_pressure --verbose
- 2. 자세히 보면 publisher의 reliability는 best_effort이며, subscription의 reliability는 reliable이다.(사진 5)
- 3. 우리는 publisher와 subsription의 타입에 서로 맞춰야한다.
- 4. 그러면 우리는 /opt/ros/jazzy/share/ros_gz_sim_demos/launch의 air_pressure.launch에서 publisher가 reliable타입으로 받게 변경할것이다. ( 사진 6 )
- 5. 위와 같이 하면 에러가 안날것이며 rqt의 모니터링 화면에서도 볼수있을것이다.
- 1. 우선 /air_pressure의 QoS를 확인해보자. ros2 topic info /air_pressure --verbose



'gazebo' 카테고리의 다른 글
| ros_gz_bridge ( cmd , yaml , namespace ) (0) | 2025.03.07 |
|---|---|
| gazebo sim demos - 2 ( camera , diff drive ) (2) | 2025.03.06 |
| Launch Gazebo from ROS2 (0) | 2025.03.04 |
| gazebo world만들고 model 띄워보기 (0) | 2025.03.01 |
| gazebo : building a world 튜토리얼 (1) | 2025.02.07 |