4. roscore, rosmaster, rosnode
์ด์ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ ์คํ์์ผฐ๋ ๊ฒ์ด ๊ธฐ์ต๋์๋์??
$ roslaunch gcamp_gazebo gazebo_world.launch
์ด ๋ช ๋ น์ ์คํํ๋
- ๋ก๋ด์ด ํฌํจ๋
gazebo
๊ฐ ์คํ๋๊ณ
- ์ฌ๋ฌ ์ผ์์ ๋ก๋ด์ ์ํ๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ณผ ์ ์๋
rviz
๋ ์คํ๋์์ต๋๋ค.
- ๊ทธ๋ฆฌ๊ณ
teleop
์ ์คํ์์ผฐ๋๋, ์ด ๋ก๋ด์ ์กฐ์ข ํ ์๋ ์์์ต๋๋ค.
์ด ์ผ๋ จ์ ๊ณผ์ ๋ค์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ก๋์ง ์ดํด๋ด ๋๋ค.
ROS Basic Process
- ํฐ๋ฏธ๋์ ๋ค์ ๋ณผ๊น์?
$ cd ~/gcamp_ws
$ sds
$ roslaunch gcamp_gazebo gazebo_world.launch
... logging to /home/kimsooyoung/.ros/log/7f9651be-4e53-11eb-b4c9-9cb6d08bf543/roslaunch-kimsooyoung-XPS-13-9370-32277.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
xacro: in-order processing became default in ROS Melodic. You can drop the option.
started roslaunch server http://localhost:35661/
SUMMARY
========
PARAMETERS
* /gazebo/enable_ros_network: True
* /joint_state_publisher/use_gui: False
* /robot_description: <?xml version="1....
* /rosdistro: melodic
* /rosversion: 1.14.10
* /use_sim_time: True
NODES
/
gazebo (gazebo_ros/gzserver)
gazebo_gui (gazebo_ros/gzclient)
joint_state_publisher (joint_state_publisher/joint_state_publisher)
robot_state_publisher (robot_state_publisher/robot_state_publisher)
rviz (rviz/rviz)
urdf_spawner (gazebo_ros/spawn_model)
auto-starting new master
process[master]: started with pid [32301]
ROS_MASTER_URI=http://localhost:11311
...
๋ญ๊ฐ ๋ง์ด ์คํ ๋ ๊ฒ์ด ๋ณด์ด๋๋ฐ์, NODES ๋ถ๋ถ์ ์ง์คํด๋ด ์๋ค.
์คํ๋ ๋ชจ๋ NODES๋ค์ด ํ์๋๊ณ , ROS_MASTER๊ฐ ์คํ๋ฉ๋๋ค.
ROS๋ ๊ฐ ํ๋ก์ธ์ค๋ค์ Node์ ๋จ์๋ก ๊ด๋ฆฌํฉ๋๋ค.
๋ ธ๋๋ค๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์๋, ์ด๋ค ๋ ธ๋๊ฐ ์๊ฒผ๊ณ , id๋ ๋ช๋ฒ์ด๊ณ ๋ฑ์ ์ ๋ณด๊ฐ ๊ณต์ ๋์ด์ผ ํ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ๊ฒ์ด ROS Master๋ผ๊ณ ์ดํดํ์๋ฉด ๋ฉ๋๋ค.
image from : clearpathrobotics
roscore command
์ฒ์ ROS๋ฅผ ์ค์นํ ๋ค ์คํ์์ผฐ๋ roscore
๋ ๋ญ๊น์??
- ํฐ๋ฏธ๋์ ๋ค์ ๋ณผ๊น์?
started roslaunch server http://localhost:41409/
ros_comm version 1.14.10
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.10
NODES
auto-starting new master
process[master]: started with pid [3554]
ROS_MASTER_URI=http://localhost:11311/
setting /run_id to 6f20f9e2-4e58-11eb-b4c9-9cb6d08bf543
process[rosout-1]: started with pid [3576]
started core service [/rosout]
roscore
๋ ROS Master๋ฅผ ์คํ์ํค๋ ๋ช
๋ น์
๋๋ค! ROS Master API์ ๋ํด ๋ ๊ณต๋ถํ๊ณ ์ถ๋ค๋ฉด ๋ค์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
- ROS Master๋ ํ๋๋ง ์กด์ฌํ ์ ์์ต๋๋ค.
roscore
๋ฅผ ์ฌ๋ฌ๋ฒ ์คํ์ํค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋ฌ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
RLException: roscore cannot run as another roscore/master is already running.
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://localhost:11311/
The traceback for the exception was written to the log file
roslaunch
๋ฅผ ํตํด ์คํ์ํค๋ฉด, ์๋์ผ๋ก ROS Master๋ ํจ๊ป ์คํ๋ฉ๋๋ค.
$ roslaunch gcamp_gazebo gazebo_world.launch
(...)
auto-starting new master
process[master]: started with pid [32301]
ROS_MASTER_URI=http://localhost:11311
rosnode command
ํ์ฌ ์ด๋ค ๋ ธ๋๊ฐ ์๋์ค์ธ์ง, ๋ฆฌ์คํธ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ค์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ roslaunch gcamp_gazebo gazebo_world.launch
# ์ ํฐ๋ฏธ๋์ ์ด๊ณ ๋ค์ ์ปค๋งจ๋๋ฅผ ์
๋ ฅํฉ๋๋ค.
$ rosnode list
/gazebo
/gazebo_gui
/joint_state_publisher
/robot_state_publisher
/rosout
gazebo_world.launch
๋ launch ํ์ผ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์คํ์ํค๋ฉด ์๋์ผ๋ก ROS Master๊ฐ ์คํ๋๋ค๊ณ ํ์ฃ ? ROS Master์ ๊ด๋ จ์๋ Node๋ /rosout
์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง 4๊ฐ์ Node๋ค์ด ์คํ์ค์ธ๋ฐ์. gazebo๊ด๋ จ Node๊ฐ 2๊ฐ, gazebo์์์ ์ฐ๋ฆฌ์ ๋ก๋ด์ spawn ์ํค๊ณ , ๋ก๋ด์ ์ฌ๋ฌ ์ํ๋ฅผ ์ง์์ ์ผ๋ก ์ก์ ํ๋ Node๊ฐ 2๊ฐ ์คํ์ค์ธ ๋ชจ์ต์ด ๋ณด์ ๋๋ค.
- ํน์ Node์ ๋ํด์ ๋ ์์ธํ ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด, ๋ค์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
$ rosnode info /joint_state_publisher
Node [/joint_state_publisher]
Publications:
* /joint_states [sensor_msgs/JointState]
* /rosout [rosgraph_msgs/Log]
Subscriptions:
* /clock [rosgraph_msgs/Clock]
Services:
* /joint_state_publisher/get_loggers
* /joint_state_publisher/set_logger_level
contacting node http://localhost:42569/ ...
Pid: 4086
Connections:
* topic: /joint_states
* to: /robot_state_publisher
* direction: outbound (40207 - 127.0.0.1:33150) [14]
* transport: TCPROS
* topic: /rosout
* to: /rosout
* direction: outbound (40207 - 127.0.0.1:33148) [10]
* transport: TCPROS
* topic: /clock
* to: /gazebo (http://localhost:42511/)
* direction: inbound
* transport: TCPROS
(...)
- ํด๋น Node์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ค๋ฅธ Node๋ค์ ์ด๋ ํ ๊ฒ์ด ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ ํ ๋ฐ์ดํฐ๊ฐ ์ค๊ณ ๊ฐ๋์ง ์ ์ ์์ต๋๋ค.
- ๋๋ถ์ด, ์์ง ๋ฐฐ์ฐ์ง ์์์ง๋ง ์ด Node์์ ํ์๋๋ ๊ทธ ๋ฐ์ ์ฌ๋ฌ ํต์ ๋ค์ ๋ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ฌ์ค ํ ์คํธ๋ก ๋ณด๊ธฐ๊ฐ ๋ถํธํ ๊ฒ์ด ์ฌ์ค์ ๋๋ค. ์ ์ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ์๋ง ๋๋ถ๋ถ ROS ์ฌ์ฉ์๋ถ๋ค๊ป์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ์กฐ๋ฅผ ํ์ ํ์์ง ์์๊น ์ถ์ต๋๋ค.
rqt ๋ง๋ณด๊ธฐ
$ rqt_graph
QT window๊ฐ ํ๋ ๋ฑ์ฅํ ๊ฒ์ ๋๋ค.
์๋จ์ ์ฌ๋ฌ ์ต์ ๋ค์ด ๋ณด์ด๋๋ฐ์, ๊ฐ ์ต์ ๋ค์ ๋ํ ์ค๋ช ์ ์ฐ์ ์๋ตํ๊ณ , ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด๋ด ์๋ค.
- ์ต์ข ํ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(๊ทธ๋ํ ๋ฐฐ์น ๊ตฌ์กฐ๋ ์ ์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ฌ์ง์ด ๊ฐ์ ํ๊ฒฝ์์๋ ๋งค๋ฒ ๋ฐ๋๊ณค ํฉ๋๋ค. ๐)
์์ ์ดํด๋ณด์๋ Node๋ค์ด ์ด๋ ํ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด์๋์ง ์ดํด๋ณผ ์ ์์ฃ ?
์ด๋ ๊ฒ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์
ํ๊ณ , ๋ ์์ธํ ๋ด์ฉ์ rosnode
์ปค๋งจ๋๋ก ๋ค์ ๊ฒ์ํ ์ ์์ ๊ฒ์
๋๋ค.
- ์ด์ ๊ฐ์์์, ํค๋ณด๋๋ก ๋ก๋ด์ ์กฐ์ข ํด๋ดค๋ ๊ฒ์ ๊ธฐ์ตํ์๋์? ๋ค์์ ์ปค๋งจ๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
rqt_graph
๋ฅผ ๋ค์ ์คํ์์ผ ์ด๋ ํ ๋ณํ๊ฐ ์๊ฒผ๋์ง ์ดํด๋ด
์๋ค.
teleop_twist_keyboard
๋ผ๋ Node๊ฐ ์ถ๊ฐ๋์์ต๋๋ค!! ๊ทธ๋ฆฌ๊ณ /cmd_vel์ ํตํด /gazebo์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค!!
- ๋ค์,
rosnode info
๋ก ๊ตฌ์ฒด์ ์ธ ์ ๋ณด๋ฅผ ์์๋ด๋ณผ๊น์?
$ rosnode info /teleop_twist_keyboard
--------------------------------------------------------------------------------
Node [/teleop_twist_keyboard]
Publications:
* /cmd_vel [geometry_msgs/Twist]
* /rosout [rosgraph_msgs/Log]
Subscriptions:
* /clock [rosgraph_msgs/Clock]
Services:
* /teleop_twist_keyboard/get_loggers
* /teleop_twist_keyboard/set_logger_level
contacting node http://localhost:42905/ ...
Pid: 6480
Connections:
* topic: /rosout
* to: /rosout
* direction: outbound (34171 - 127.0.0.1:45192) [9]
* transport: TCPROS
* topic: /cmd_vel
* to: /gazebo
* direction: outbound (34171 - 127.0.0.1:45194) [13]
* transport: TCPROS
* topic: /clock
* to: /gazebo (http://localhost:42511/)
* direction: inbound
* transport: TCPROS
/cmd_vel์ด ์ ๋ฑ์ฅํ๊ณ , rosrun์ ๋ ๋ญ๊ณ , ์ด๋ค์ ์ด๋ป๊ฒ ๋ง๋ค๊ณ , ์ด๋ป๊ฒ ์ฐ๊ฒฐ์ํค๋์ง ๋ฑ๋ฑ ์ฌ๋ฌ ๊ถ๊ธ์ฆ๋ค์ด ์๊ธฐ์ จ์ ๊ฒ์ ๋๋ค.
๋ค์ ๊ฐ์๋ค์์ ๊ณ์ํด์ ์ง๊ณ ๋์ด๊ฐ๋๋ก ํ๊ฒ ์ต๋๋ค. ๐๐๐