joint_state_publisher_gui

모터도 없는 로봇의 고개를 어떻게 돌려 볼까?

역할

슬라이더 값을 /joint_states로

joint_state_publisher_gui는 URDF를 읽어 움직이는 joint와 그 범위를 찾고, joint마다 슬라이더를 만듭니다. 슬라이더 값은 /joint_states로 나가고, 5편의 robot_state_publisher가 이를 TF로 바꿉니다.

따라 하기

움직이는 모델을 띄웁니다

ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

3편에서 본 움직이는 joint가 든 모델입니다. RViz 창과 함께 슬라이더 창이 뜹니다. 1편에서 설치한 ros-jazzy-joint-state-publisher-gui가 이 창입니다.

슬라이더

움직이는 joint만 슬라이더가 됩니다

fixed joint는 슬라이더가 없습니다. revolute와 prismatic은 <limit>의 범위로, continuous는 −π~π로 슬라이더가 생깁니다. Randomize는 아무 값이나, Center는 0으로(0이 범위 밖이면 범위 가운데로) 되돌립니다.

결과

슬라이더를 밀면 고개가 돕니다

슬라이더를 움직이면 메시지가 나가고, TF가 바뀌고, RViz가 다시 그립니다. 그동안 URDF 파일은 한 글자도 바뀌지 않습니다. 모양은 URDF가, 지금 자세는 /joint_states가 정합니다.

엿듣기

/joint_states를 직접 봅니다

name과 position은 같은 순서로 짝을 이룹니다. head_swivel이 목록의 마지막이면 그 값도 position의 마지막입니다.

출력 일부만 보였습니다. 값은 슬라이더 위치에 따라 다릅니다.

주의

진짜 값이 있으면 끄고 씁니다

슬라이더는 하드웨어 없이 모델을 시험하는 도구입니다. 시뮬레이터나 실제 로봇이 관절 값을 내기 시작하면 GUI는 띄우지 않습니다. 두 곳이 같은 joint 값을 내면 모델이 두 자세를 오가며 떨립니다.

display.launch.py에 gui:=false를 주면 슬라이더 없는 joint_state_publisher가 기본값(대개 0)을 냅니다.

다음 편

지금까지 본 RViz 화면, 무엇이 어디 있을까요?

7편로봇이 보는 세상 13강 목록