[ROS] ROS๋ ๋ฌด์์ธ๊ฐ? (Robotics)
ROS๋?
๋ฐฐํฌ ๊ฐ๋ฅํ๊ณ , ๋ชจ๋ํ ๋์์ธ ๋ก๋ด ์ํํธ์จ์ด๋ฅผ ์ํ ๋ฏธ๋ค์จ์ด. ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์จ์ด๋ฅผ ๊ตฌ๋ํ๋ OS(์: ubuntu)๋ฅผ ์ค์นํ ํ apt๋ฑ์ ํจํค์ง ํด์ ์ด์ฉํ์ฌ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ค์นํ๋ค.
- Plumbing: publish-subscribe messaging infrastructure design์ ์ ๊ณตํ์ฌ ๋ฐฐํฌ ๊ฐ๋ฅํ ๋ชจ๋ํ ์์คํ ์ ๋น ๋ฅด๊ณ ๊ฐํธํ๊ฒ ๊ตฌํ ๊ฐ๋ฅํ๊ฒ ํจ
- Tools: ์คํ, ์ค๋จ, ๊ด์ธก, ๋๋ฒ๊น , ๋ก๊น , ํ ์คํ , ๋น์ฃผ์ผ๋ผ์ด์ง ๊ฐ๋ฅํ ๊ธฐ๋ณธ ๋๊ตฌ๋ฅผ ์ ๊ณต
- Capabilities: ๋ก๋ด ๊ฐ๋ฐ์ ํ์ํ ๋ค์ํ libraries๋ฅผ ์ ๊ณต
- Ecosystem: ๊ฐ๋ฐ ๋ถํฐ integration๊ณผ documentation์ ๊ฐํ ์ค์ ์ ๋๊ณ ์์ด ์ ์ธ๊ณ, ๊ฑฐ๋ํ ์ปค๋ฎค๋ํฐ์ ์ํด ์ํ๊ณ๊ฐ ํ์ฑ๋ ์ ์๊ณ ๊ทธ๋ก ์ธํด ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ณ ๋ก๋ด ๊ฐ๋ฐ์๋ค์ ๋น ๋ฅธ ๋ฐ์ ์ ๊ธฐ๋ํ ์ ์์ → ๋ฐฐํฌ ๊ฐ๋ฅํ๊ณ ๋ชจ๋ํ ๋์์ธ์ ์ถ๊ตฌํ๊ธฐ ๋๋ฌธ!
ROS์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ
- ํ๋ก๊ทธ๋จ ๊ฐ ํต์ ์ ๋งค์ฐ ๊ฐํธํ๊ฒ ์ค์ ๊ฐ๋ฅ (TCP/IP ๋ฑ์ ํต์ ์์ผ ๊ด๋ฆฌ๊ฐ ํ์ ์์ด ์ถ์์ ์ธ ๊ฐ๋ ์ผ๋ก ๊ตฌํ ๊ฐ๋ฅ)
- ํ๋์จ์ด ๋๋ผ์ด๋ฒ ํจํค์ง (Camera, LIDAR, Dynamixel ๋ฑ ๋ค์ํ ํ๋์จ์ด ์ธํฐํ์ด์ค ์กด์ฌ)
- ๋ค์ํ ํ์ + ์ ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌํจ (OpenCV ์์์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Eigen ์ ํ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ)
- ๋ชจ๋ํฐ๋ง / ๋๋ฒ๊น ๋๊ตฌ
ROS์ ํ๊ณ
- ์์ ์ฉ ์ ํ์ด ์๋ Open-source๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ง๋ณด์ ํ๊ฑฐ๋ ์ปค๋ฎค๋ํฐ์ ๋์์ ๋ฐ์์ผ ํจ
- Real-time programming ๋ฌธ์ ์กด์ฌ (ROS 1.0: ros_control + PREEMPT_RT / ROS 2.0: ํต์ ์์คํ (DDS) real-time safeํ, nodelet ํ์ฑํ)
- ํ๋ก์ ํธ๋ฅผ ์ํ ์ด๊ธฐ ๊ตฌ์ฑ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆผ
ROS1๊ณผ ROS2์ ์ฐจ์ด
- ๋ฉํฐ ํ๋ซํผ์์ ํธํ ๊ฐ๋ฅ (Ubuntu, Mac OS, Windows) → ROS1์์๋ WinROS์ ๊ฐ์ ๋ฐฉ๋ฒ์ ํ์ฉํด์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ธด ํ์ง๋ง ROS2์์๋ ์ ์์ผ๋ก ๋ฐฐํฌ๋์ด ๋ค์ํ Window์ฉ ํจํค์ง๋ค์ด ๋ฐฐํฌ๋๊ณ ์์
- Real-time ์ ์ ์ ๊ณต → ROS1์ ํต์ ๋ฐฉ์์ด TCP๋ฐฉ์์์ Data Distribution Service(DDS) ๋ฐฉ์์ผ๋ก ๋ฐ๋๊ฒ ๋๋ฉด์ Real Time Publish Subscribe (RTPS) ์ ๊ฐ์ด Real-time์ด ์ ๊ณต๋๋ publisher๋ฅผ ์ ์์ผ๋ก ์ง์ํ๋ค.
- ๋ณด์ ์ด์ ํด๊ฒฐ → ROS1.0์ ๊ฒฝ์ฐ์๋ ros master์ IP๊ฐ ๋ ธ์ถ๋๋ฉด ๋์ผ ๋คํธ์ํฌ ์ ๋ค๋ฅธ ์ฌ์ฉ์์ ์ํด ์ฝ๊ฒ ํดํน๋นํ ์ ์์๋ค. ํ์ง๋ง ROS2.0์์ DDS๊ธฐ๋ฐ ํต์ ํ๋กํ ์ฝ์ ํตํด ๋ณด์ ์ด์๋ฅผ ํต์ ๋จ์์๋ถํฐ ํด๊ฒฐ๋จ
- Node๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ํต์ ์ํ → Node๋ค์ ์ค์ฌํด์ฃผ๋ Roscore๊ฐ ์์ด์ง. ROS Master์ ์ฐ๊ฒฐ์ด ๋๊ธฐ๋ฉด ์์คํ ์ด ๋ง๋น๋๋ ๋จ์ ์ ๋ฐฉ์ง
- ํ๋์ ํ๋ก์ธ์๋ ์ฌ๋ฌ ๋ ธ๋ ์คํ ๊ฐ๋ฅ → ํ๋์จ์ด ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- Cmake๋ฅผ ์ฌ์ฉํ์ง ์๋ ํจํค์ง ์์ฑ ๊ฐ๋ฅ
- ํจํค์ง๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋น๋ ๊ฐ๋ฅ → ๋ชจ๋ ํจํค์ง๋ฅผ ๋์์ ๋น๋ํ๊ฒ ๋๋ ROS1์ ๋นํด ํจํค์ง์ ์ข ์์ฑ์ ์ค์์ฑ์ด ๋ฎ์์ง๊ฒ ๋จ
ROS์ ๊ตฌ์กฐ
- Nodes : ROS ํต์ ์ ์ด์ฉํ๋ ์คํ ๊ฐ๋ฅํ ๋ ธ๋
- Messages: Publish, subscribe ๋๋ ROS ๋ฐ์ดํฐ ํ์
- Service: Server์ Client๋ก ์ฌ์ด์ ์ ๋ฌ๋๋ ROS ๋ฐ์ดํฐ ํ์
- Topics: ๊ฐ์ topic์ ํตํด publisher์ subscriber๊ฐ ์ด์ด์ง
- Actions: Topic๊ณผ Service๊ฐ ํผํฉ๋ ํํ
- Master: ๋ ธ๋๋ผ๋ฆฌ ์๋ก๋ฅผ ์ฐพ์ ์ ์๋๋ก ๋์ (Topic ๊ด๋ฆฌ ๋ฑ)
- rosout: ROS์์ stdout/stderr
- roscore: Master + rosout + parameter server
ROS๋ ๋ค์์ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐ/์ฌ์ฉํ๊ธฐ ์ํ ํต์ ๊ตฌ์กฐ๋ฅผ ์ถ์ํํ์ฌ ์ฌ์ฉํ๊ธฐ ๊ฐํธํ๊ฒ ๋๋๋ค.
A, B ๋ ๋ ธ๋๊ฐ ํ๋์ Topic์ผ๋ก ํต์ ํ๋ค๊ณ ๊ฐ์ ํ ๋, ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์์๋ก ํต์ ์ ์ํํ๋ค.
โช ๋ฉ์์ง ๋ฐํ/๊ตฌ๋
- A ๋ ธ๋(Publisher)๋ Master์๊ฒ ๋ฐํํ Topic ์ด๋ฆ์ ์๋ฆฐ๋ค.
- B ๋ ธ๋(Subscriber)๋ Master์๊ฒ ๊ตฌ๋ ํ Topic ์ด๋ฆ์ ์๋ฆฐ๋ค.
- Master๋ ๊ตฌ๋ ํ Topic ์ด๋ฆ์ด ๋ฐํ ์ค์ธ์ง ํ์ธํ๋ค.
- ๋ฐํ ์ค์ด๋ฉด ๋ฐํ์(Publisher, A)์ ๊ตฌ๋ ์(Subscriber, B)๋ฅผ ์ฐ๊ฒฐํ๋ค.
- ๋ฐํ์(Publisher, A)๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ฉด Master์ ํต๊ณผ ์์ด ๊ตฌ๋ ์(Subscriber, B)์๊ฒ ๋ฐ๋ก ๋ฉ์์ง๊ฐ ์ ์ก๋๋ค.
- ๋ฉ์์ง๊ฐ ๊ตฌ๋ ์(Subscriber, B)์๊ฒ ๋์ฐฉํ๋ฉด callback ํจ์๊ฐ ํธ์ถ๋๋ค.
โช ์๋น์ค ์์ฒญ/์๋ต
- ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)๊ฐ ์๋ฒ ๋ ธ๋(Publisher, A)์๊ฒ ์๋น์ค๋ฅผ ์์ฒญํ๋ค.
- ์๋ฒ ๋ ธ๋(Publisher, A)๋ ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)์ ์์ฒญ์ ๋ฐ๊ณ ์ฒ๋ฆฌํ์ฌ ์๋ตํ๋ค.
- ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)๋ ์๋ฒ ๋ ธ๋(Publisher, A)์ ์๋ต์ ์์ ํ๋ค.
โช ์๋น์ค/๋ฉ์์ง ํผํฉ ํํ์ธ Action
- ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)๊ฐ ์๋ฒ ๋ ธ๋(Publisher, A)์๊ฒ "๋ก๋ด ํ์ด ๋ชฉํ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ก ํ๋ผ"๊ณ ์์ฒญํ๋ค.
- ์๋ฒ ๋ ธ๋(Publisher, A)๋ ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)์ ์์ฒญ์ ๋ฐ๊ณ ์ฒ๋ฆฌํ๋ค.
- ์๋ฒ ๋ ธ๋(Publisher, A)๋ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์๋ฃํ๋ค๋ฉด ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)์๊ฒ ์๋ตํ๋ค.
- ํด๋ผ์ด์ธํธ ๋ ธ๋(Subscriber, B)๋ ์๋ฒ ๋ ธ๋(Publisher, A)์ ์๋ต์ ์์ ํ๋ค. → ๋์์ ์คํจ/์ฑ๊ณต ์ฌ๋ถ ํ์ธ
ROS Actionlib
ํด๋ผ์ด์ธํธ๊ฐ Goal์ ๋ณด๋ด๋ฉด ์๋ฒ๊ฐ Goal์ ์์ ๋ฐ๊ณ ์๋์ ์์ํ๋ค. ์๋ ์ค์๋ ํ์ฌ ์งํ ์ ๋๋ฅผ Feedbackํ์ฌ ํด๋ผ์ด์ธํธ์์ ์ ์ ์๋๋ก ํ๊ณ , ์์ ์๋ฃ์ Result๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ๋ค. (Success/Fail) ํด๋ผ์ด์ธํธ๋ Result๋ฅผ ์์ ํ์ฌ ๋ค์ ์ผ์ ์ํํ ์ ์๋ค.
- Goal: ํด๋ผ์ด์ธํธ ๋ ธ๋๊ฐ ์๋ฒ ๋ ธ๋์๊ฒ ์ ์กํ๋ ๋ชฉํ ์ ๋ณด
- Feedback: ์๋ฒ ๋ ธ๋๊ฐ ํด๋ผ์ด์ธํธ ๋ ธ๋์๊ฒ ํ์ฌ ์คํ์ค์ธ ์ ๋ณด๋ฅผ feedback
- Result: ์๋ฒ ๋ ธ๋๊ฐ ์์ ์ ์๋ฃํ๊ฑฐ๋ ์ค๋จํ์ ๋, result๋ฅผ respondํจ
- (Client) Goal ์ ์ก ํจ์ ํธ์ถ
- (Server) Goal ์ ์คํํ๋ Callback ํจ์ ํธ์ถ
- (Server) Feedback ์ ์ก ํจ์ ํธ์ถ
- (Client) Feedback Callback ํจ์ ํธ์ถ
- (Server) action ์๋ฃ ํ result ์ ์ก ํจ์ ํธ์ถ
- (Client) Result Callback ํจ์ ํธ์ถ
ROS File System
- /opt/ros/{version}: ROS์ ๊ธฐ๋ณธ ์ค์น ์์น (์ดํ์ version์ melodic์ผ๋ก ๊ฐ์ )
- /opt/ros/melodic/share/: ROS ํจํค์ง๋ค์ด ์ค์น๋๋ ์์น (roscd {package-name} ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ)
- ~/.ros/log/ : ROS ์คํ log๋ค์ด ๋ชจ์ฌ ์๋ ๊ณณ (roscd log๋ก๋ ์ ๊ทผ ๊ฐ๋ฅ)
rospack # ros + pack(age): ํจํค์ง์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ๋๊ตฌ
roscd # ros + cd: ํจํค์ง์ ์ด๋ฆ๋ง์ผ๋ก cd ์ฒ๋ผ ํด๋๋ฅผ ์ด๋ํ ์ ์์
rosls # ros + ls: ์ฌ์ฉ์๊ฐ ์ง์ ํ ํจํค์ง๋ ์คํ, ๋๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ๋ก์ ๋ํด ๋ฐ๋ก ls๋ฅผ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค
ROS Workspace
Package๋ค์ ์์ฑํ๊ธฐ ์ํ ๊ณต๊ฐ์ผ๋ก, {workspace_name}/src/ ๊ฒฝ๋ก ์๋์ ํจํค์ง๋ค์ ๋์ ์ฌ์ฉํ๋ค. Workspace ์ค์ ์, {workspace_name}/devel/setup.bash ๋ฅผ ์คํ์์ผ ์ฃผ์ด์ผ ํ๋ค. (catkin_make ๋ช ๋ น์ด๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑ๋๋ ์คํฌ๋ฆฝํธ ํ์ผ)
$ mkdir –p ~/catkin_ws/src # workspace ํด๋ ์์ฑ
$ cd ~/catkin_ws # workspace ๋ก ์ด๋
$ catkin_make # ์ด๊ธฐ catkin_make ์คํ (devel ๊ณผ build ํด๋๊ฐ ์์ฑ๋จ)
์ดํ ~/.bashrc์ source ~/catkin_ws/devel/setup.bash ๋ฅผ ์ถ๊ฐํ๊ณ , source ~/.bashrc ๋ช ๋ น์ ์คํํ๋ค. (ํด๋น command๋ฅผ ์ ๋ ฅํด์ผ ๋ณ๊ฒฝ๋ ์ค์ ์ด ๋ฐ์๋จ)
# ROS environment setup
source /opt/ros/melodic/setup.bash
# User ROS workspace environment setup
# source {workspace_directory}/devel/setup.bash
source ~/catkin_ws/devel/setup.bash
# Alias
alias sb='source ~/.bashrc'
alias sb='source ~/.bashrc'
alias cw='cd ~/catkin_ws'
alias cs='cd ~/catkin_ws/src'
alias cm='cd ~/catkin_ws && catkin_make'
ROS Package
ROS์์ ์ฌ์ฉ๋๋ Software๋ package๋ผ๋ ๊ณณ์ ์ ๋ฆฌ๋์ด ์๋ค. Package์๋ node(์คํ ํ๋ก๊ทธ๋จ), ROS-independent library, Dataset, Configuration files, Third-party software๊ฐ ํฌํจ๋ ์ ์๋ค.
- CMakeLists.txt: ROS๋ CMake ๋น๋ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, CMake๋ฅผ ์ํด ์์ฑํ๋ค.
- package.xml: ์ถ๊ฐ์ ์ผ๋ก package ์ ๋ณด๋ฅผ ์ค๋ช ํ๋ ํ์ผ (ROS Package ์ ๋ณด ํ์ผ)
- include/: C++ ํค๋ ํ์ผ
- src/: C++ ์์ค ํ์ผ
- scripts/ : Python ์คํฌ๋ฆฝํธ
- msg/: Message (msg) ํ์ ์ ์
ROS ํจํค์ง๋ฅผ ๋ง๋ ๋ค๋ฉด CMake build ํํ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ฉฐ src ํด๋ ์์๋ toplevel์ CMakeLists.txt๊ฐ ์กด์ฌํ๋ค. ๊ฐ๊ฐ์ ๋๋ ํ ๋ฆฌ๋ฅผ ๋ชจ๋ add_subdirectoryํ์ฌ ๋ชจ๋ ํจํค์ง๊ฐ ๋น๋๋ ์ ์๋๋ก ํด์ผ ํ๋ค.
# ~/catkin_ws/src๋ก ์ด๋
$ cd ~/catkin_ws/src
# <package_name>์ด๋ผ๋ ํจํค์ง ์์ฑ
$ catkin_create_pkg <package_name> [depend 1] … [depend n]
# beginner_tutorials ํจํค์ง๋ฅผ
# roscpp, rospy, std_msgs์ depend๋ฅผ ๊ฐ์ง๊ณ ์์ฑ
$ catkin_create_pkg beginner_tutorials roscpp rospy std_msgs
catkin_create_pkg ๋ช ๋ น์ ํตํด package๋ฅผ ๋ง๋ค ์ ์๋ค.
ROS Commands
โช roscore: ROS Master์ Parameter ์๋ฒ, rosout ๋ ธ๋๋ฅผ ์คํ์์ผ์ฃผ๋ ๋๊ตฌ๋ก ROS ๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ ๋ฐ๋์ ๋จผ์ ์คํํด์ผ ํ๋ค. ex; rosrun ์คํ ์ roscore ๋จผ์ ์ผ๋ ๊ฒ
โช rosrun: ROS ํจํค์ง ๋ด๋ถ์ ๋ ธ๋๋ฅผ ์คํ์์ผ์ฃผ๋ ๋๊ตฌ $ rosrun {ํจํค์ง๋ช } {๋ ธ๋๋ช }
- ํ๋์ ๋ช ๋ น์ด๋ก ํ๋์ ๋ ธ๋๋ง ์คํ ๊ฐ๋ฅ
- ๊ฐ๋จํ ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ์ฉ์ผ๋ก ์ฃผ๋ก ์ฌ์ฉ
- ์๋์์ฑ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ๋น ๋ฅด๊ฒ ์ ๋ ฅ ๊ฐ๋ฅ
- roscore๊ฐ ๋์ํ๊ณ ์์ง ์์ผ๋ฉด ์คํ๋์ง ์์
โช roslaunch: ๋ค์์ ROS ๋ ธ๋๋ฅผ ์ผ๊ด์ ์ผ๋ก ์คํ์์ผ์ฃผ๋ ๋๊ตฌ $ roslaunch {ํจํค์ง๋ช } {launchํ์ผ๋ช }
- ROS์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ช ๋ น์ด ์ค ํ๋
- ํ๋์ ๋ช ๋ น์ด๋ก ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๋ฅผ ์ผ๊ด์ ์ผ๋ก ์คํ ๊ฐ๋ฅ
- launch ํ์ผ์ XML ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ ๋ค์ํ ๋ ธ๋์ ์คํ ์ต์ ์ ์ค์ ๊ฐ๋ฅ
- roscore๊ฐ ์คํ๋์ด ์์ง ์์ผ๋ฉด ์์ฒด์ ์ผ๋ก roscore๋ฅผ ์คํ์ํด
โช roscd: ํด๋น ROS ํจํค์ง์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ ๋๊ตฌ $ roscd {ํจํค์ง๋ช }
- ROS Master์ ๋ฑ๋ก๋ ํจํค์ง๋ค ์ค ํด๋น ํจํค์ง์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ ๋๊ตฌ
- ๋๋ ํ ๋ฆฌ์ ์์น๋ฅผ ์ธ์ธ ํ์ ์์ด ๊ฐ๋จํ๊ฒ ๋ช ๋ น์ด๋ฅผ ํตํด ์ด๋ ๊ฐ๋ฅ
โช rostopic: ROS ๋ฉ์์ง์ ๊ดํ ์กฐ์ ๋ฐ ๊ด์ธก์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋๊ตฌ
- topic์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ์ ์กํ ๋ ์ฌ์ฉํ๋ ๋๊ตฌ
- ์ฃผ๋ก ๋๋ฒ๊น ์ฉ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ํ ๋ ์ฌ์ฉ
- $ rostopic list: topic๋ค์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rostopic echo {ํ ํฝ๋ช }: {ํ ํฝ๋ช }์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rostopic pub {ํ ํฝ๋ช } {์๋ฃํ} {๊ฐ}: {ํ ํฝ๋ช }์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ๋ช ๋ น์ด
- $ rostopic info {ํ ํฝ๋ช }: {ํ ํฝ๋ช }์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rostopic hz {ํ ํฝ๋ช }: {ํ ํฝ๋ช }์ Publish ์ฃผ๊ธฐ(hz)๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
โช rosnode: ROS node๋ค์ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ
- ํน์ ๋ ธ๋์ ์์ธ ์ ๋ณด๋ฅผ ํ์ธํ๊ฑฐ๋ ๋ฐ์ดํฐ ์์ฒญ ๋ฑ์ ํ ์ ์๋ ๋ช ๋ น์ด
- ๊ฐ์ ๋ก ๋ ธ๋๋ฅผ kill ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- rostopic, rosservice์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ํ ์ต์ ๋ค์ด ์กด์ฌ
- $ rosnode list: node๋ค์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosnode info {๋ ธ๋๋ช }: {๋ ธ๋๋ช }์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosnode kill {๋ ธ๋๋ช }: {๋ ธ๋๋ช }์ ์ข ๋ฃํ๋ ๋ช ๋ น์ด
โช rosservice: ROS ์๋น์ค์ ๊ดํ ์กฐ์ ๋ฐ ๊ด์ธก์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋๊ตฌ
- $ rosservice list: service๋ค์ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosservice info {์๋น์ค๋ช }: {์๋น์ค๋ช }์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosservice find {์๋น์คํ์ }: {์๋น์คํ์ }์ ์ ๋ ฅ์ผ๋ก ๋ฐ๋ ์๋น์ค๋ฅผ ์ฐพ๋ ๋ช ๋ น์ด
- $ rosservice call {์๋น์ค๋ช }: {์๋น์ค๋ช }์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์์ฒญํ๋ ๋ช ๋ น์ด
โช rosparam: ROS Master์ parameter ์๋ฒ๋ฅผ ๊ด๋ฆฌํ ์ ์๊ฒ ํด์ฃผ๋ ๋๊ตฌ
- ROS ์ฝ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ์ญ ๋ณ์ ๋ชฉ๋ก์ธ ํ๋ผ๋ฏธํฐ ์๋ฒ๋ฅผ ๊ด๋ฆฌํ๋ ๋ช ๋ น์ด
- ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ์ธ๋ถ์์ ์ ์ดํ ์ ์๋ ์ฅ์ ์ด ์์
- roscore๋ฅผ ์คํํ๋ฉด background์์ ํ๋ผ๋ฏธํฐ ์๋ฒ๊ฐ ๊ฐ์ด ์คํ๋จ
- roscore๊ฐ ์ฌ์คํ๋๋ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ ์๋ฒ๋ ์ด๊ธฐํ๋จ
- $ rosparam list: ํ๋ผ๋ฏธํฐ ์๋ฒ์ ๋ฑ๋ก๋ ํ๋ผ๋ฏธํฐ ๋ชฉ๋ก์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosparam set {ํ๋ผ๋ฏธํฐ๋ช } {๊ฐ}: ์๋ก์ด ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฑ๋กํ๋ ๋ช ๋ น์ด
- $ rosparam get {ํ๋ผ๋ฏธํฐ๋ช }: ํน์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
โช rosbag: ROS์ ๊ฐ์ข ๋ฐ์ดํฐ๋ฅผ ๋ก๊น ํด์ฃผ๋ ๋๊ตฌ
- ROS์ ๋ฉ์์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฌ์ํด์ฃผ๋ ๋๊ตฌ
- ROS ์์์ ํผ๋ธ๋ฆฌ์๋๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋นํ ์์ฃผ ์ฌ์ฉ
- ๋ก๋ด์ ์ผ์๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ๋ฐ ์ฌ์ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- $ rosbag info {bag๋ฐ์ดํฐ๋ช }: bag ๋ฐ์ดํฐ์ ์์ธ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ๋ช ๋ น์ด
- $ rosbag record {์ต์ } {ํ์ผ๋ช } {ํ ํฝ๋ช }: ROS ํ ํฝ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด
- $ rosbag play {bag๋ฐ์ดํฐ๋ช }: bag ๋ฐ์ดํฐ๋ฅผ ์คํํ๋ ๋ช ๋ น์ด