setup.py data_files, *.launch.py

빌드까지 했는데 ros2 launch가 내 파일을 못 찾는다면?

경로로 띄우면

그 폴더에서만 됩니다

지금까지는 파일이 있는 폴더에서 경로로 띄웠습니다. 다른 폴더에서는 그 이름을 패키지 이름으로 여겨 찾지 못합니다. 패키지에 넣어 설치하면 어디서든 ros2 launch 패키지 파일로 부르고, 7편의 FindPackageShare로도 찾을 수 있습니다.

오류 줄은 앞부분만 보였습니다.

자리

패키지 안 launch 폴더에 둡니다

ros2 pkg create --build-type ament_python my_turtle로 만든 패키지(5강 3편) 맨 위에 launch 폴더를 만들고 런치 파일을 넣습니다. 런치 파일은 패키지마다 launch 폴더에 모아 두는 것이 관례입니다.

data_files

setup.py에 한 줄 더합니다

data_files는 빌드할 때 어떤 파일을 설치 폴더의 어디로 복사할지 적은 목록입니다. launch/ 안의 파일을 모두 share/my_turtle/launch로 복사하라는 줄을 더합니다.

공식 튜토리얼과 같은 내용을 줄만 나눠 적었습니다. 8강 6편의 YAML 파일도 config 폴더를 같은 방식으로 더합니다.

빠뜨리면

이 줄이 없으면 못 찾습니다

ros2 launch는 소스 폴더가 아니라 설치 폴더 install/my_turtle/share/my_turtle에서 파일을 찾습니다. data_files에 share/<pkg>/launch 줄이 없으면 런치 파일이 복사되지 않아, 빌드가 성공해도 파일을 못 찾습니다.

이름

파일 이름은 launch.py로 끝나게

ros2 launch가 런치 파일로 알아보고 Tab으로 자동 완성하려면 이름이 launch.py로 끝나야 합니다. _launch.py도 .launch.py도 됩니다.

package.xml의 exec_depend ros2launch는 ros2 launch 명령과 세 형식(2편)이 갖춰져 있게 해 줍니다. 공식 튜토리얼이 권하는 줄입니다.

따라 하기

빌드하고 패키지 이름으로 띄웁니다

워크스페이스 루트에서 빌드하고, 새 터미널에서 source 한 뒤 패키지 이름으로 부릅니다(5강 6·7편). 이제 어느 폴더에서든 같은 명령으로 띄울 수 있습니다.

--symlink-install(5강 8편)로 빌드하면 설치 폴더의 런치 파일이 소스를 가리켜, 고친 내용이 바로 반영됩니다. 새 런치 파일을 더하거나 setup.py를 고쳤을 때는 다시 빌드합니다.

다음 강

분명 보냈는데 안 오는 메시지가 있다면?

11강 1편메시지가 안 오는 이유 10강 목록