# 1 자유도 로봇의 토픽 데이터

1 자유도 로봇 토픽 데이터 모음(csv 형식, timestamp 포함)

{% file src="<https://114453328-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LmOTWbz2dgMNQsbqUOW%2Fuploads%2FwsNfGMmQrcayfNODiVp4%2Fwearable_2022.zip?alt=media&token=0105d364-5a3e-429b-97ab-c10a2f094c3e>" %}

#### 노드

* /robot\_state\_publisher: /joint\_states 토픽에서 조인트 각도를 읽고 로봇 모델의  링크 위치를 업데이트하여  /robot\_description 토픽으로  URDF로 퍼블리쉬
* /joint\_state\_broadcaster: ros2\_control 패키지. 하드웨어나 시뮬레이터로부터 조인트 상태를 읽고   /joint\_states 토픽으로 퍼블리쉬
* /joint\_state\_publisher:  /robot\_description 토픽에서  URDF를 읽어서 조인트 를 찾고, 조인트 상태를 읽어서 /joint\_states 토픽으로 퍼블리쉬
* /joint\_trajetory\_controller: 조인트 위치 제어기
* /controller\_manager: 제어기 인터페이스
* /gazebo\_ros2\_control: ros2\_control과 gazebo 연결 인터페이스

#### 토픽

* /robot\_description: URDF 로봇 모델
* /joint\_states: 현재 조인트 상태.

#### 노드 그래프

![](https://i.imgur.com/cjjiKTY.png)

***

#### Gazebo에 로봇 로드

1. /gazebo/spawn\_entity에 로봇 URDF 전달하여 gazebo 월드에 로봇 로드 . 참고: `robot_description.csv`

#### 조인트 제어 명령

![](http://daikimaekawa.github.io/images/ros_control/gazebo_transmission.png)

1. /joint\_trajectory\_controller  노드에 follow\_joint\_trajectory 액션 요청
2. Controller Manager에서 제어기 동작: 현재 조인트 각도(/joint\_states)와 목표 조인트 각도(액션으로 받은)를 비교하여 제어. `joint_trajectory_controller/state.csv` 참고
   1. ros2\_control의 제어기로 부터 나온 결과조인트 값은 URDF의 ros2\_control 태그에 정의된 조인트값과 연결 된다.
3. ros2\_control 의 하드웨어 인터페이스 통해서 gazebo에 전달. 참고: <https://github.com/ros-controls/gazebo\\_ros2\\_control/blob/master/gazebo\\_ros2\\_control/src/gazebo\\_system.cpp>
4. 휴먼 모델의 링크 위치 변화는 `tf_static.csv` 참고

#### 조인트 상태 읽기

1. gazebo에서 로봇의 조인트 상태를 ros2\_control의 하드웨어 인터페이스 통해서 읽음
2. /joint\_state\_broadcaster 노드가 로봇의 조인트 상태를 /joint\_states 토픽으로 업데이트
