[ROS 2로 시작하는 로봇 프로그래밍]에 기반한 정리글입니다.
ROS 위키에서는 "ROS는 로봇을 위한 오픈소스, 메타 운영 시스템이며, 하드웨어 추상화, 하위 디바이스 제어, 로보틱스에서 많이 사용되는 센싱, 인식, 지도 작성, 모션 플래닝 등의 기능 구현과 프로세스 사이의 메시지 패싱, 패키지 관리, 개발환경에 필요한 라이브러리와 다양한 개발, 디버깅 도구를 제공한다."
로 정의되어 있다.
즉, 로봇에 특화된 다양한 개발환경을 제공하는 로봇 소프트웨어 플랫폼이자 개발을 위한 툴이라고 볼 수 있다.
ROS는 윈도우, 리눅스와 같이 독립된 운영체제는 아니며 기존 운영체제를 이용한다. 우분투 같은 운영체제 위에 설치하며 로봇 응용프로그램에 필요한 필수 기능들을 라이브러리 형태로 제공하는데, 이를 미들웨어
또는 소프트웨어 프레임워크
라고 한다.
기본 운영체제 : Ubuntu 20.04 LTS (VM VirtualBox)
로봇 운영체제 : ROS 2 Foxy Fitzroy
기본 운영체제는 Ubuntu 20.04 LTS
를 사용한다. 기본 운영체제를 Linux Mint 20.x
를 추천하지만, 설치 결과 크게 차이가 없기에 필자가 기존에 쓰던 Ubuntu
를 계속 사용하기로 했다. 이를 VirtualBox
에 올려 가상환경으로 운영하기로 하며, 로봇 운영체제는 책에서 추천하는 ROS 2 Foxy Fitzroy
를 사용한다.
Ubuntu 내에서 지역 및 소스 설정이 필요하다.
// 지역 설정
$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
$ export LANG=en_US.UTF-8
// 소스 설정
$sudo apt update && sudo apt install curl gnupg2 lsb-release
$curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
$sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
ROS 2 패키지를 설치한다.
$ sudo apt update
$ sudo apt install ros-foxy-desktop ros-foxy-rmw-fastrtps* ros-foxy-rmw-cyclonedds*
모두 설치되었다면 아래 코드를 통해 패키지가 정상정으로 설치되었는지 확인할 수 있다.
$ source /opt/ros/foxy/setup.bash
$ ros2 run demo_nodes_cpp talker
ROS 2를 이용하여 로봇 프로그래밍을 개발할 때 필요한 라이브러리를 설치한다.
$ sudo apt-get update && sudo apt install -y \
build-essential \
cmake \
git \
libbullet-dev \
python3-colcon-common-extensions \
python3-flake8 \
python3-pip \
python3-pytest-cov \
python3-rosdep \
python3-setuptools \
python3-vcstool \
wget
$ python3 -m pip install -U \
argcomplete \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures \
pytest
$ sudo apt-get install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev \
libcunit1-dev
ROS 2 Foxy Fitzroy 설치가 끝나면 robot_ws 폴더를 생성한 후 빌드한다.
이는 환경설정을 하고 ROS 2 설치에 문제가 없는지 확인하는 과정이다.
$ source /opt/ros/foxy/setup.bash
$ mkdir -p ~/robot_ws/src
$ cd ~/robot_ws/
$ colcon build --symlink-install
환경설정과 빌드에 문제가 없으면 하위 폴더에 src, build, install, log 폴더가 생성된다.
위에서 ROS 2 설치 이후 source/opt/ros/foxy/setup.bash
설정 및 talker 노드, listener 노드를 실행하는 등 이와 같은 환경설정을 매번 반복하는 것은 불편하다.
따라서 Run commands를 모아두는 bashrc 파일에 alias, source, export를 설정한다.
$ vim ~/.bashrc
다음과 같은 내용을 파일 맨 끝에 추가한다.
source /opt/ros/foxy/setup.bash
source ~/robot_ws/install/local_setup.bash
source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash
source /usr/share/vcstool-completion/vcs.bash
source /usr/share/colcon_cd/function/colcon_cd.sh
export _colcon_cd_root=~/robot_ws
export ROS_DOMAIN_ID=7
export ROS_NAMESPACE=robot1
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export RCUTILS_CONSOLE_OUTPUT_FORMAT='[{severity}]: {message}'
export RCUTILS_COLORIZED_OUTPUT=1
export RCUTILS_LOGGING_USE_STDOUT=0
export RCUTILS_LOGGING_BUFFERED_STREAM=0
alias cw='cd ~/robot_ws'
alias cs='cd ~/robot_ws/src'
alias ccd='colcon_cd'
alias cb='cd ~/robot_ws && colcon build --symlink-install'
alias cbs='colcon build --symlink-install'
alias cbp='colcon build --symlink-install --packages-select'
alias cbu='colcon build --symlink-install --packages-up-to'
alias ct='colcon test'
alias ctp='colcon test --packages-select'
alias ctr='colcon test-result'
alias rt='ros2 topic list'
alias re='ros2 topic echo'
alias rn='ros2 node list'
alias killgazebo='killall -9 gazebo & killall -9 gzserver & killall -9 gzclient'
alias af='ament_flake8'
alias ac='ament_cpplint'
alias testpub='ros2 run demo_nodes_cpp talker'
alias testsub='ros2 run demo_nodes_cpp listener'
alias testpubimg='ros2 run image_tools cam2image'
alias testsubimg='ros2 run image_tools showimage'
이 책에서 ROS 2 개발환경의 IDE는 VSCode를 추천한다.
아래 사이트에서 .deb 파일을 받아 설치할 수 있다.
https://code.visualstudio.com/
$ sudo apt install ./filename.deb
이후 추후에 ROS 2 프로그래밍을 진행하기 위한 c/c++
을 VSCode
의 extensions
에서 설치한다.
이후 개발환경을 설정하면서, setting.json
, c_cpp_properties.json
, tasks.json
, launch.json
를 설정해야 한다. 만약 파일이 없다면 생성해야한다.
만약 .vscode
폴더 또한 없다면 생성한다.
$ mkdir ~/robot_ws/.vscode
이 파일은 VSCode의 사용자별 글로벌 환경설정을 지정하는 파일이다.
ROS 버전을 지정, colcon이 지원되는 Task를 사용한다는 설정, ROS에서만 사용되는 파일 형식이 무엇인지 지정하는 설정을 포함한다.
$ sudo vim ~/.config/Code/User/settings.json
{
"cmake.configureOnOpen" : false,
"editor.minimap.enabled": false,
"editor.mouseWheelZoom" : true,
"editor.renderControlCharacters" : true,
"editor.rulers" : [100],
"editor.tabSize" : 2,
"files.associations" : {
"*.repos" : "yaml",
"*.world" : "xml",
"*.xacro" : "xml"
},
"files.insertFinalNewline": true,
"files.trimTrailingWhitespace" : true,
"terminal.integrated.scrollback" : 1000000,
"workbench.iconTheme" : "vscode-icons",
"workbench.editor.pinnedTabSizing" : "compact",
"ros.distro" : "foxy",
"colcon.provideTasks" : true
}
C/C++ 관련 설정으로, 현재 지정한 작업공간의 운영체제 include의 경로, 컴파일 버전과 경로, IntelliSense 모드 등을 설정한다.
$ sudo vim ~/robot_ws/.vscode/c_cpp_properties.json
{
"configurations" : [
{
"name" : "Linux",
"includePath" : [
"${default}",
"${workspaceFolder}/**",
"/opt/ros/foxy/include/**"
],
"defines" : [],
"compilePath" : "/usr/bin/g++",
"cStandard" : "c99",
"cppStandard" : "c++14",
"intelliSenseMode" : "linux-gcc-x64"
}
],
"version" : 4
}
VSCode에서는 외부 프로그램을 CLI를 사용하여 연동하는 기술이 있는데, 이를 Task라고 한다.
ROS 2에서 빌드할 때 사용되는 colcon, build, test, clean 작업을 Task로 만든다.
이를 통해 VSCode에서 ctrl+shift+b 로 빌드할 수 있고, 기본 설정 이외의 Task도 실행 가능하다.
$ sudo vim ~/robot_ws/.vscode/tasks.json
{
"version" : "2.0.0",
"tasks" : [
{
"label" : "colcon: build",
"type" : "shell",
"command" : "colcon build --cmake-args '-DCMAKE_BUILD_TYPE=Debug'",
"problemMatcher" : [],
"group" : {
"kind" : "build",
"isDefault" : true
}
},
{
"label" : "colcon: test",
"type" : "shell",
"command" : "colcon test && colcon test-result"
},
{
"label" : "colcon: clean",
"type" : "shell",
"command" : "rm -rf build install log"
}
]
}
VSCode의 Launch는 디버깅 전 사용할 Task를 지정하거나 콘솔 기능을 설정할 수 있다.
$ sudo vim ~/robot_ws/.vscode/launch.json
{
"version" : "0.2.0",
"configurations" : [
{
"name" : "Debug-rclpy(debugpy)",
"type" : "python",
"request" : "launch",
"program" : "${file}",
"console" : "integratedTerminal"
},
{
"name" : "Debug-rclcpp(gdb)",
"type" : "cppdbg",
"request" : "launch",
"program" : "${workspaceFolder}/install/${input:package}/lib/${input:package}/${input:node}",
"args" : [],
"preLaunchTask" : "colcon: build",
"stopAtEntry" : true,
"cwd" : "${workspaceFolder}",
"externalConsole" : false,
"MIMode" : "gdb",
"setupCommands" : [
{
"description" : "Enable pretty-priting for gdb",
"text" : "-enable-pretty-printing",
"ignoreFailures" : true
}
]
}
],
"inputs" : [
{
"id" : "package",
"type" : "promptString",
"description" : "package name",
"default" : "topic_service_action_rclcpp_example"
},
{
"id" : "node",
"type" : "promptString",
"description" : "node name",
"default" : "argument"
}
]
}
ROS를 지원하는 IDE 중 하나이다. 이는 ROS 2의 RQt의 Plugin 개발 시 UI를 작성할 때 편리하다.
$ sudo apt install qtcreator // 설치
$ qtcreator // 실행
위의 QtCreator에 ROS 개발환경 설정을 미리 해둔 플러그인을 사용할 수 있다.
https://ros-qtc-plugin.readthedocs.io/en/latest/index.html
그러나 22.12.28 현재 install 링크로 접속할 수 없어 다른 블로그에 게시된 설치 방법과 설치 파일을 소개한다.
https://ola-page.tistory.com/43
(감사합니다. 혹시 문제시 연락 부탁드립니다.)
이번 포스팅에서는 ROS 2를 사용하기 위한 개발환경 구성을 다뤘다.
ROS 2 운영체제와 개발 라이브러리 설치, 편리한 개발환경 구축을 위한 Run command 설정 또한 진행했다. IDE인 VSCode를 설치하고 환경설정을 진행하였으며 UI를 작성하기 위한 QtCreator와 플러그인 또한 설치하였다.
다음 포스팅은 ROS 2의 데이터 통신 미들웨어인 DDS에 관하여 다룬다.