지난 포스팅까지 ROS의 기본적인 개념과 원리에 대해서 공부를 하였다(물론 파일 시스템을 다룰 때 ROS 쉘 명령어의 일부인 rospack, roscd, rosls 등에 대해서도 다루긴 했다). 따라서 이번 포스팅부터는 본격적으로 ROS에서 사용되는 명령어들에 대해서 공부를 할 예정이다.
쉘이 무엇인지부터 시작해서 한번 다뤄보도록 하자.
참고한 링크들은 다음과 같다.
https://cafe.naver.com/openrt/2828
https://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem
https://quad-lab.gitbook.io/linux-ubuntu/linux
https://wiki.ros.org/ROS/Tutorials/UsingRosEd
https://chrismartine-e.medium.com/creating-your-own-linux-shell-1cbaaae2c41c
쉘에 대해서 알기 위해선 리눅스의 구조를 먼저 알아야 한다. 리눅스의 구조는 다음과 같이 4가지로 구분된다.
사용자가 직접 명령을 내리는 응용 프로그램에 명령이 입력되면, 쉘(shell)이 명령을 해석하고, 이 해석된 명령은 커널(kernel)로 전달된다. 커널은 하드웨어를 제어하는 코드를 통해 소프트웨어와 커뮤니케이션을 하며, 시스템의 모든 자원을 통제/관리하는 역할을 수행한다.
이전에 ROS에서는 편의성을 위해서 rosbash라는 것을 만들어놓았다고 설명하였다. bash 쉘 명령어를 ROS에 맞게 최적화 하고 사용하는 방법이다.
💡 rosbash
rosbash 패키지는 bash 함수 및 tab키를 통한 자동완성 기능을 지원하는, 편리성을 위해 작성된 패키지이다.source /opt/ros/noetic/setup.bash
이런 코드를 입력하는 것도 다 rosbash를 source하기 위함이다.
주로 사용하는 rosbash 명령어로 roscd, rosls, rosed가 있다. 이 중 roscd와 rosls는 예전에 다루었으며, rosed만 새롭게 다뤄볼 것이다.
roscd의 사용법은 다음과 같다.
$ roscd <package-or-stack>[/subdir]
예를 들어서
$ roscd roscdpp
그리고 나서 현재 내 위치를 $ pwd 명령어를 통해서 알 수 있다.
$ roscd log
이렇게 한번에 log 폴더로 이동하는 등 유용하게 사용할 수 있다.
rosls 역시 roscd와 마찬가지로 rosbash의 일부이다. roscd와 마찬가지로, 절대경로를 사용하지 않더라도 바로 내가 원하는 패키지나 스택에 대해서 ls 명령어를 적용 가능하다.
$ rosls <package-or-stack>[/subdir]
rosed는 ROS에서 편집을 하기 위해 사용하는 명령어이다.
$ rosed <package_name> <file_name>
예를 들어
$ rosed turtlesim package.xml
사용자가 설정한 에디터로 해당 파일을 열어 편집할 수 있게 해주는 명령어이다. 급하게 간단한 파일을 수정할 때 사용된다.
사용되는 에디터의 경우 ~/.bashrc 파일에 export EDITOR="내가원하는에디터" 이렇게 환경변수로 지정하면 된다.