Skip to content

Dongubak/ros2_tut

Repository files navigation

ROS2 공식문서 스터디 및 정리 레파지토리

위 레파지토리는 ROS2공식 문서를 공부한 뒤 정리하는 공간입니다.

진도

25.07.18
https://docs.ros.org/en/rolling/Tutorials/Beginner-CLI-Tools/Introducing-Turtlesim/Introducing-Turtlesim.html
25.07.21
https://docs.ros.org/en/rolling/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.html#ros2-topic-echo
25.07.23
https://www.youtube.com/watch?v=aFMDvkCr9vY&list=PL0xYz_4oqpvhj4JaPSTeGI2k5GQEE36oi&index=36 25.07.24
https://youtu.be/aFMDvkCr9vY?si=E21GxEVJ9kKe_RSY

목차




VSCODE terminal에서 ros 실행시 발생하는 오류

vscode terminal에서 ros실행 시 오류가 발생한다.

아래코드는 공식문서에서 제시한 예시코드이다.

ros2 run turtlesim turtlesim_node

위 문제를 해결하기 위해서는 settings.json을 수정해주어야 한다.

아래 코드를 추가하자

{
    ...
    "terminal.integrated.env.linux": {
        "GTK_PATH": ""
    },
    ...
}



파이썬 가상환경 만들기

1. 가상환경을 만들기 위한 venv 설치
2. 가상환경 생성
3. 해당 환경에서 파이프 업그레이트
4. jupyter설치

1. 가상환경을 만들기 위한 venv 설치

$ sudo apt install python3.12-venv

2. 가상환경 생성

$ python3 -m venv ~/venv
$ source ~/venv/bin/activate

3. 해당 환경에서 파이프 업그레이드

$ pip install --upgrade pip

4. jupyter 설치

$ pip install jupyter



도메인

같은 공유기 내에서 묶는 도구로서 도메인을 사용한다.

즉 도메인이 같은 디바이스끼리 연결됨

alias sz="source ~/.zshrc; echo \"bashrc is reloaded\""
alias ros_domain="export ROS_DOMAIN_ID=13; echo \"ROS_DOMAIN_ID=13\""
alias rolling="source /opt/ros/rolling/setup.zsh; ros_domain; echo \"ROS2 rolling is activated!\""

ROS_DOMAIN_ID를 13번으로 함




service

1. 서비스 조회하기
2. 서비스 타입 조회하기
3. 요청타입과 응답타입 조회하기
4. 서비스 호출하기
5. 리셋 서비스 호출하기
6. 추가 거북이를 스폰하기

서비스 리스트를 확인하면 호출할 수 있는 서비스를 조회할 수 있다.

╰─ ros2 service list      
/clear
/kill
/reset
/spawn
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/get_type_description
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically

서비스의 타입을 조회할 수 있다.

╰─ ros2 service type /turtle1/teleport_absolute
turtlesim_msgs/srv/TeleportAbsolute

해당 타입의 요청 타입과 응답타입을 조회할 수 있다.

╰─ ros2 interface show turtlesim_msgs/srv/TeleportAbsolute
float32 x
float32 y
float32 theta

해당 요청타입을 참고하여 서비스를 호출할 수 있다.

╰─ ros2 service call /turtle1/teleport_absolute turtlesim_msgs/srv/TeleportAbsolute "{x: 2, y: 2, theta: 1.57}"
waiting for service to become available...
requester: making request: turtlesim_msgs.srv.TeleportAbsolute_Request(x=2.0, y=2.0, theta=1.57)

response:
turtlesim_msgs.srv.TeleportAbsolute_Response()

alt text

현재 위치가 바뀐것을 확인 할 수 있다. theta값은 거북이가 바라보는 방향을 의미한다.

리셋하는 서비스를 호출할 수 있다.

╰─ ros2 service call /reset std_srvs/srv/Empty 
waiting for service to become available...
requester: making request: std_srvs.srv.Empty_Request()

response:
std_srvs.srv.Empty_Response()

alt text

리셋 시 초기위치로 바뀐것을 확인할 수 있다.

거북이 스폰하는 서비스 호출하기

╭─  │  ~ ··························································································· ✔ │ at 17:23:46  
╰─ ros2 service type /spawn
turtlesim_msgs/srv/Spawn
╭─  │  ~ ··························································································· ✔ │ at 17:25:49  
╰─ ros2 interface show turtlesim_msgs/srv/Spawn
float32 x
float32 y
float32 theta
string name # Optional.  A unique name will be created and returned if this is empty
---
string name
╭─  │  ~ ··························································································· ✔ │ at 17:26:04  
╰─ ros2 service call /spawn turtlesim_msgs/srv/Spawn "{x: 1, y: 1, theta: 0, name: ''}"
waiting for service to become available...
requester: making request: turtlesim_msgs.srv.Spawn_Request(x=1.0, y=1.0, theta=0.0, name='')

response:
turtlesim_msgs.srv.Spawn_Response(name='turtle2')



topic22

topic를 조회할 수 있으며 -v옵션을 통해 발행 타입과 구독타입을 알 수 있다.

Published topics는 터틀이 발행하는 토픽들이며 Subscribed topics는 터틀이 구독하는 토픽이다.

╰─ ros2 topic list -v
Published topics:
 * /parameter_events [rcl_interfaces/msg/ParameterEvent] 2 publishers
 * /rosout [rcl_interfaces/msg/Log] 2 publishers
 * /turtle1/color_sensor [turtlesim_msgs/msg/Color] 1 publisher
 * /turtle1/pose [turtlesim_msgs/msg/Pose] 1 publisher
 * /turtle2/color_sensor [turtlesim_msgs/msg/Color] 1 publisher
 * /turtle2/pose [turtlesim_msgs/msg/Pose] 1 publisher

Subscribed topics:
 * /parameter_events [rcl_interfaces/msg/ParameterEvent] 1 subscriber
 * /turtle1/cmd_vel [geometry_msgs/msg/Twist] 1 subscriber
 * /turtle2/cmd_vel [geometry_msgs/msg/Twist] 1 subscriber

특정 topic에 대한 정보를 조회할 수 있다.

╰─ ros2 topic info /turtle1/pose
Type: turtlesim_msgs/msg/Pose
Publisher count: 1
Subscription count: 0

특정 토픽이 발행하는 값을 터미널에서 조회할 수 있다.

╰─ ros2 topic echo /turtle1/pose
x: 5.544444561004639
y: 5.544444561004639
theta: 0.0
linear_velocity: 0.0
angular_velocity: 0.0

rqt로 조회시 해당 토픽을 터미널에서 구독하는 것을 그래프로 확인할 수 있다.

$ rqt

alt text

터틀의 위치를 변경시킨 뒤 터미널에서 구독값이 변경된 것을 확인할 수 있다.

╰─ ros2 service call /turtle1/teleport_absolute turtlesim_msgs/srv/TeleportAbsolute "{x: 5, y: 5, theta: 1.1}"
waiting for service to become available...
requester: making request: turtlesim_msgs.srv.TeleportAbsolute_Request(x=5.0, y=5.0, theta=1.1)

response:
turtlesim_msgs.srv.TeleportAbsolute_Response()


╰─ ros2 topic echo /turtle1/pose
x: 5.0
y: 5.0
theta: 1.100000023841858
linear_velocity: 0.0
angular_velocity: 0.0

teleport_absolute service를 호출하여 위치를 변경시키면 pose를 구독하는 터미널에서 변경된 pose값을 얻을 수 있다.




turtlesim and turtlesim_teleop_key

Using turtlesim_teleop_key, we can move turtle.

bash code below

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key

install rqt plugin

bash code below

$ sudo apt update
$ sudo apt install '~nros-rolling-rqt*'

select service caller

Click on the Service dropdown list to see turtlesim's services, and select the /spawn service.

pose 토픽을 구독하는 노드 만들어 보기

pose 구독 노드

Node

실행 중인 모든 노드의 이름을 표시합니다.

ros2 node list

alt text

노드에 대한 자세한 정보에 액세스할 수 있습니다.

ros2 node info <node_name>

alt text

ros2 node info구독자, 게시자, 서비스 및 작업 목록을 반환합니다. 즉, 해당 노드와 상호 작용하는 ROS 그래프 연결입니다.

alt text




Topic

What is Topic

ROS 2는 복잡한 시스템을 여러 모듈형 노드로 나눕니다. 토픽은 노드 간 메시지 교환을 위한 버스 역할을 하는 ROS 그래프의 핵심 요소입니다.

alt text

rqt

We can use rqt, opening plugin > introspection > node grpah.

rqt

alt text

The graph is depicting how the /turtlesim node and the /teleop_turtle node are communicating with each other over a topic. The /teleop_turtle node is publishing data (the keystrokes you enter to move the turtle around) to the /turtle1/cmd_vel topic, and the /turtlesim node is subscribed to that topic to receive the data.

About

ROS2 공식문서 공부

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors