참고한 강의 : https://www.youtube.com/playlist?list=PLieE0qnqO2kSYIxWAN6UvaMe_op2p2_Pw
Robot_Operating_System_ROS
www.youtube.com
- ROS는 기본적으로 node들 간의 통신으로 동작한다.
- Node 간 통신이 이루어질 때, ROS Master를 거쳐간다. 이처럼 ROS Master는 전반적으로 node들을 관리한다.
- 이때 모든 터미널들 합해서 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 명령어를 통해서는 노드들 간의 연결 관계를 파악할 수 있다.
- 상단에 어떤 항목들을 보이게 할 것인지 선택할 수 있지만 자세한 것은 나중에..
- 노드가 제대로 연결이 되었는지, 내가 의도한대로 상호작용이 이루어지고 있는 지 확인하고 싶을 때 사용하면 될 듯하다.
- 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 |