ROS

[ROS] 3. roscore, rosmaster, rosnode

Jawy 2024. 10. 8. 16:33

참고한 강의 : https://www.youtube.com/playlist?list=PLieE0qnqO2kSYIxWAN6UvaMe_op2p2_Pw

 

Robot_Operating_System_ROS

 

www.youtube.com

 


  • ROS는 기본적으로 node들 간의 통신으로 동작한다.
  • Node 간 통신이 이루어질 때, ROS Master를 거쳐간다. 이처럼 ROS Master는 전반적으로 node들을 관리한다.

https://www.clearpathrobotics.com

  • 이때 모든 터미널들 합해서 ROS Master는 단 하나만 존재할 수 있다.

roscore

S roscore
  • 실행 결과는 다음과 같다.
started roslaunch server http://localhost:32987/
ros_comm version 1.16.0


SUMMARY
========

PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.16.0

NODES

auto-starting new master
process[master]: started with pid [84934]
ROS_MASTER_URI=http://localhost:11311/

setting /run_id to 6ab63fbc-8224-11ef-b954-8f451d5453e1
process[rosout-1]: started with pid [84944]
started core service [/rosout]

 

  • 'auto-starting new master' 부분에서 알 수 있듯이 ROS Master를 실행시킨다.
  • roscore == ros master 실행시키는 명령어

rosrun

$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
  • rosrun 명령어는 원하는 단 하나의 node를 실행시켜주는 명령어이다.
  • 이때 물론 roscore 등으로 ROS Master가 실행되고 있는 상태여야 한다.

roslaunch

$ roslaunch gcamp_gazebo gazebo_world.launch
  • roslaunch 명령어를 통해 .launch 파일을 실행시키면, 파일 내의 모든 노드들은 물론, ROS Master 또한 실행시킨다.

rosnode list

  • 현재 어떤 노드가 작동중인지 파악하기 위해서는 rosnode 커맨드를 사용한다.
$ roslaunch gcamp_gazebo gazebo_world.launch

# 새 터미널에
$ rosnode list
/gazebo
/gazebo_gui
/joint_state_publisher
/robot_state_publisher
/rosout
/rviz

rqt_graph

$ rqt_graph
  • rqt_graph 명령어를 통해서는 노드들 간의 연결 관계를 파악할 수 있다.
  • 상단에 어떤 항목들을 보이게 할 것인지 선택할 수 있지만 자세한 것은 나중에..
  • 노드가 제대로 연결이 되었는지, 내가 의도한대로 상호작용이 이루어지고 있는 지 확인하고 싶을 때 사용하면 될 듯하다.

rqt_graph 실행 화면

  • node는 동그라미, 네모는 topic, service 등의 통신 방식
  • 앞서 rosnode list에 열거된 노드들은 다 동그라미로 표현된 것을 확인할 수 있다.

rosnode info

  • 하나의 node에 대한 구체적인 정보를 알고 싶을 땐 rosnode info 명령어를 사용한다.
  • 예시로 위 노드들 중 '/rviz' node에 대한 정보를 출력해보자.
$ rosnode info /rviz
--------------------------------------------------------------------------------
Node [/rviz]
Publications: 
 * /clicked_point [geometry_msgs/PointStamped]
 * /initialpose [geometry_msgs/PoseWithCovarianceStamped]
 * /move_base_simple/goal [geometry_msgs/PoseStamped]
 * /rosout [rosgraph_msgs/Log]

Subscriptions: 
 * /clock [rosgraph_msgs/Clock]
 * /scan [sensor_msgs/LaserScan]
 * /tf [tf2_msgs/TFMessage]
 * /tf_static [tf2_msgs/TFMessage]

Services: 
 * /rviz/get_loggers
 * /rviz/load_config
 * /rviz/load_config_discarding_changes
 * /rviz/reload_shaders
 * /rviz/save_config
 * /rviz/set_logger_level


contacting node http://localhost:35703/ ...
Pid: 6125
Connections:
 * topic: /rosout
    * to: /rosout
    * direction: outbound (36155 - 127.0.0.1:47604) [44]
    * transport: TCPROS
 * topic: /clock
    * to: /gazebo (http://localhost:42927/)
    * direction: inbound (60736 - localhost:48819) [52]
    * transport: TCPROS
 * topic: /tf
    * to: /robot_state_publisher (http://localhost:37139/)
    * direction: inbound (56928 - localhost:52193) [47]
    * transport: TCPROS
 * topic: /tf
    * to: /gazebo (http://localhost:42927/)
    * direction: inbound (60824 - localhost:48819) [53]
    * transport: TCPROS
 * topic: /tf_static
    * to: /robot_state_publisher (http://localhost:37139/)
    * direction: inbound (56926 - localhost:52193) [46]
    * transport: TCPROS
 * topic: /scan
    * to: /gazebo (http://localhost:42927/)
    * direction: inbound (60794 - localhost:48819) [58]
    * transport: TCPROS
  • 위 결과를 보면, 내 환경의 IP 주소나 포트 번호가 적나라하게 드러나 있다.
  • 이는 보안상의 문제를 야기할 수 있으며, ROS2에서는 보완되었다고 한다.

'ROS' 카테고리의 다른 글

[ROS] 2. WS 생성과 GAZEBO  (3) 2024.09.24
[ROS] 1. 시작하기  (1) 2024.09.23
[ROS] 0. 기초적인 LINUX 문법  (0) 2024.09.23