xacro

다리가 네 개인 로봇이면 같은 글을 네 번 써야 할까?

문제

같은 숫자가 여기저기 흩어집니다

2편에서 본 다리 link입니다. 오른쪽 다리와 왼쪽 다리가 이름만 빼고 같습니다. 다리 길이를 0.7m로 바꾸려면 0.6을 두 군데, 그 절반인 0.3을 두 군데 고쳐야 합니다. 하나라도 빠뜨리면 모양이 어긋납니다.

xacro란

URDF를 찍어 내는 매크로 언어

xacro(XML Macros)는 URDF를 짧게 쓰게 돕는 도구입니다. .urdf.xacro 파일에 상수, 계산, 매크로를 써 두면 xacro 명령이 이를 풀어 보통 URDF로 내보냅니다.

파일 맨 위 robot 태그에 xmlns:xacro="http://www.ros.org/wiki/xacro"를 적어야 읽힙니다.

상수

xacro:property로 이름 붙이기

xacro:property로 값에 이름을 붙이고, 쓰는 곳에는 ${leglen}처럼 적습니다. 이제 다리 길이는 맨 위 한 줄만 고치면 됩니다.

계산

${ } 안에서 계산도 됩니다

사칙연산과 괄호를 쓸 수 있고, pi나 sin, cos도 있습니다. 3편에서 본 0.22도 몸통 반지름 0.2에 0.02를 더한 값이었습니다. 이렇게 적어 두면 몸통을 키울 때 다리가 저절로 따라 나갑니다.

wheeldiam=0.07, width=0.2는 urdf_tutorial 08-macroed.urdf.xacro의 값입니다.

매크로

xacro:macro로 틀을 찍어 냅니다

xacro:macro는 params로 값을 받는 틀입니다. <xacro:leg .../>라고 부를 때마다 틀이 펼쳐져 link와 joint가 생깁니다. reflect를 −1(오른쪽)과 1(왼쪽)로 주어 다리를 몸통 양쪽에 놓습니다.

따라 하기

xacro 파일도 그대로 띄웁니다

ros2 launch urdf_tutorial display.launch.py model:=urdf/08-macroed.urdf.xacro

이 런치 파일은 모델을 늘 xacro에 먼저 통과시킵니다. 펼친 결과는 둘째 명령으로 봅니다.

xacro $(ros2 pkg prefix --share urdf_tutorial)/urdf/08-macroed.urdf.xacro > robot.urdf

다음 편

글로 적은 모델은 누가 TF로 바꿔 줄까요?

5편모델을 TF로 13강 목록