[ROS2] ROS 기초(Node, Package, Launch, Parameter)
ROS란
ROS(Robot Operating System)은 로봇 애플리케이션 구축에 필요한 SW 라이브러리와 툴 모음을 말한다. 로봇이 움직일 때를 생각해보면, 통신, 제어, 계측 등 다양한 분야의 지식이 필요하고 이것을 유기적으로 연결해야 자연스럽게 로봇의 움직임을 만들 수 있다. 이 많은 것을 모두 공부하고 로봇을 만드려면 적어도 1년이 걸릴 텐데, 이를 쉽게 하도록 도와주는 것이 ROS이다.
Node
ROS에서 하나 또는 여러 목적을 달성하기 위한 기능 단위를 말한다. 바퀴 구동을 위한 모터를 조작하는 노드, 레이저의 센서 데이터를 전달하는 노드를 예로 들 수 있다. 각 노드들은 앞으로 나올 topic, service, action, parameter 들을 전달하거나 받을 수 있다.
Node 확인을 위해서 turtlesim 을 켜보자.
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
이제 아래 명령을 통해서 노드가 실행중인지 확인할 수 있다.
ros2 node list
/turtlesim 노드에 대한 정보를 알고 싶다면 아래 명령을 통해서 확인할 수 있다.
ros2 node info /turtlesim
이제 두 노드가 어떻게 정보를 주고 받는지 확인해보자.
rqt_graph
Package
패키지는 특정 기능을 가진 노드들을 그룹으로 만들어 관리하기 쉽게 만들어 놓은 단위이다. 그래서 보통은 패키지를 직접 만들어 이 워크스페이스 안에서 작업한다.
워크스페이스인 ros2_ws를 생성하고 안에 src 폴더도 함께 만들어준다.
mkdir -p ~/ros2-study/src
cd ~/ros2-study/src
파이썬을 기준으로 하기 때문에 아래와 같은 명령을 통해 패키지를 생성한다. C++을 기준으로 할 때는 명령어가 달라지므로 주의해야 한다.
ros2 pkg create --build-type ament_python --node-name my_first_node my_first_package
이제 패키지가 생성되었기 때문에 실행해보자. 항상 build는 워크 스페이스인 ros2_ws에서 해야 한다. 빌드가 완료되었다면, setup.bash를 설정해주어야 한다.
cd ~/ros2-study
colcon build
source install/local_setup.bash
이제 생성된 노드를 실행해보자.
ros2 run my_first_package my_first_node
참고로, ros를 실행하고 패키지를 빌드, 생성할 때 ros 환경 세팅과 setup을 해줘야 하는데 alias를 설정하면 복잡하게 하지 않아도 된다. bashrc 파일을 아래와 같이 수정하면 된다. 참고로 ros_domain_id 설정은 유의해야 하는데, 여러 사람들과 같은 네트워크에서 ROS를 실행해야 할 때 같은 domain id를 같은 걸 쓰면 다른 사람이 실행하는 것과 겹칠 수 있으므로 유의해야 한다.
sudo vim ~/.bashrc
# .bashrc
alias humble = "source /opt/ros/humble/setup.bash; ros_domain; echo \"ROS2 humble is activated!\""
alias ros_domain = "export ROS_DOMAIN=13"
Launch
로봇의 기능을 수행하기 위해서는 여러 개의 노드를 실행해야 한다. 매번 많은 노드를 실행하고 중지시키지 않고 한 번의 명령으로 노드를 실행하고 중지시킬 수 있다. 그것이 바로 Launch이다.
먼저, src/ros2-study/setup.py 파일을 아래 내용으로 수정한다. 이는 my_first_package 패키지 아래 launch 폴더 내 '.launch.py'로 끝나는 파일을 모두 패키지에 포함한다는 내용이다.
from setuptools import find_packages, setup
import os
import glob
package_name = 'my_first_package'
setup(
name=package_name,
version='0.0.0',
packages=find_packages(exclude=['test']),
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
('share/' + package_name + '/launch', glob.glob(os.path.join('launch', '*.launch.*')))
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='soeun',
maintainer_email='soeun@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
],
},
)
이렇게 script를 수정한 후에 빌드를 한다. 참고로 빌드 명령에 --symlink-install이라는 옵션을 추가하면 실행에 필요한 파일을 install 폴더에 복사하지 않고 symlink를 생성한다. 즉, 원본 파일을 직접 사용한다는 뜻이다.
cd ~/ros2-study
colcon build --symlink-install
Parameter
파라미터는 노드의 Configuration 정보다. 모든 노드들은 자신의 파라미터를 가지고 있다.
먼저 파라미터 리스트를 확인하려면 다음과 같은 명령을 사용한다.
ros2 param list
파라미터 값을 조회하거나 수정하려면 아래와 같은 명령을 사용하면 된다.
ros2 param get /turtlesim background_g # 조회
ros2 param set /turtlesim background_g 100 # 변경
현재 설정된 파라미터 값을 저장하고 싶다면 아래 명령을 통해서 저장할 수 있다.
ros2 param dump /turtlesim > turtlesim.yaml
이렇게 설정된 turtlesim.yaml 값을 /turtlesim 노드에 반영하려면 아래 명령어를 사용한다.
ros2 param load /turtlesim turtlesim.yaml