차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
| activity:public:2021:ros:4 [2021/09/23 14:41:52] – ↷ 문서가 activity:staff:2021:rosstudy:4에서 activity:public:2021:ros:4(으)로 이동되었습니다 99dohyung | activity:public:2021:ros:4 [2021/10/03 15:20:31] (현재) – [ROS STUDY #3: ROS 노드 간의 구조2, 터틀봇 시뮬레이션] yhy01625 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ======ROS STUDY #3: ROS 노드 간의 구조2, 터틀봇 시뮬레이션====== | ||
| + | |||
| + | {{youtube> | ||
| + | =====1. 터틀봇 시뮬레이션 토픽 분석===== | ||
| + | |||
| + | ====1.1. 터틀봇3 토픽 받아오기==== | ||
| + | |||
| + | 터틀봇3을 구동하면 turtlebot3_core 노드와 turtlebot3_lds 노드가 실행되고 각 노드에서 퍼블리시하는 조인트 상태, 모터 구동부, IMU 등의 내용을 토픽으로 받아볼 수 있다. | ||
| + | <sxh bash> | ||
| + | roslaunch turtlebot3_bringup turtlebot3_robot.launch --screen | ||
| + | </ | ||
| + | |||
| + | 터틀봇 원격 제어에서 했던 것처럼 Remote PC에서 다음과 같이 turtlebot3_teleop_key.launch 파일을 실행한다. | ||
| + | <sxh bash> | ||
| + | roslaunch turtlebot3_telecop turtlebot3_teleop_key.launch --screen | ||
| + | </ | ||
| + | |||
| + | rqt_graph를 실행하면 좀 더 자세한 노드 및 토픽 정보를 얻을 수 있다. | ||
| + | <sxh bash> | ||
| + | rqt_graph | ||
| + | </ | ||
| + | |||
| + | ====1.2. 터틀봇3의 서브스크라이브 토픽==== | ||
| + | |||
| + | ^ 이름 ^ 형태 ^ 기능 ^ | ||
| + | | motor_power | std_msgs/ | ||
| + | | reset | std_msgs/ | ||
| + | | sound | turtlebot3_msgs/ | ||
| + | | cmd_vel | geomertry_msgs/ | ||
| + | |||
| + | ====1.3. 서브스크라이브 토픽으로 로봇 제어==== | ||
| + | |||
| + | 정지시키기 | ||
| + | <sxh bash> | ||
| + | rostopic pub / | ||
| + | </ | ||
| + | 속도제어: | ||
| + | |||
| + | x축 방향으로 0.02m/s 속도로 전진 | ||
| + | <sxh bash> | ||
| + | rostopic pub /cmd_vel geometry_msgs/ | ||
| + | x: 0.02 | ||
| + | y: 0.0 | ||
| + | z: 0.0 | ||
| + | angular: | ||
| + | x: 0.0 | ||
| + | y: 0.0 | ||
| + | z: 0.0” | ||
| + | </ | ||
| + | |||
| + | z축을 기준으로 반시계 방향으로 1.0rad/s 속도로 회전 | ||
| + | <sxh bash> | ||
| + | rostopic pub /cmd_vel geometry_msgs/ | ||
| + | x: 0.0 | ||
| + | y: 0.0 | ||
| + | z: 0.0 | ||
| + | angular: | ||
| + | x: 0.0 | ||
| + | y: 0.0 | ||
| + | z: 1.0” | ||
| + | </ | ||
| + | |||
| + | ====1.4. 퍼블리시 토픽==== | ||
| + | |||
| + | 터틀봇3이 퍼블리시하는 토픽은 크게 상태진단 관련 토픽, 디버그 관련 토픽, 센서 관련 토픽으로 나눌 수 있고 그 이외에 조인트 관련 토픽, 제어기 정보 관련 토픽, 오드메트리 및 변환 관련 토픽 등이 있다. | ||
| + | ^ 이름 ^ 형태 ^ 기능 ^ | ||
| + | | sensor_state | turtlebot3_msgs/ | ||
| + | | battery_state | sensor_msgs/ | ||
| + | | scan | sensor_msgs/ | ||
| + | | imu | seonsor_msgs/ | ||
| + | | odom | nav_msgs/ | ||
| + | | tf | tf2_msgs/ | ||
| + | | joint_states | sensor_msgs/ | ||
| + | | diagnostics | diagnostic_msgs/ | ||
| + | | version_info | turtlebot3_msgs/ | ||
| + | | cmd_ver_rc100 | geometry_msgs/ | ||
| + | |||
| + | ====1.5. 퍼블리시 토픽으로 로봇 상태 파악==== | ||
| + | |||
| + | sensor_state 토픽은 임베디도 보드 OpenCR에 연결된 아날로그 센서들을 주로 다루는데 다음 예제와 같이 bumper, cliff, button, left_encoder, | ||
| + | <sxh bash> | ||
| + | rostopic echo / | ||
| + | </ | ||
| + | |||
| + | odom 토픽을 이용하면 오도메트리 정보를 얻을 수 있다. | ||
| + | <sxh bash> | ||
| + | rostopic echo /odom | ||
| + | </ | ||
| + | |||
| + | tf 토픽은 XY 평면상에서 로봇의 중심 위치인 base_footprint와 오도메트리 정보인 odom과의 좌표 변환과 같이 상대 좌표 형태로 기술된 로봇의 각 조인트들의 자세(위치와 방향) 정보이다. | ||
| + | <sxh bash> | ||
| + | rostopic echo /tf | ||
| + | </ | ||
| + | |||
| + | rqt의 tf_tree 플러그인을 사용해 GUI 환경에서도 확인할 수 있다. | ||
| + | <sxh bash> | ||
| + | rosrun rqt_tf_tree rqt_tf_tree | ||
| + | </ | ||
| + | |||
| + | =====2. ROS Namespace===== | ||
| + | |||
| + | ====2.1. roslaunch 사용법==== | ||
| + | |||
| + | roslaunch는 하나 이상의 정해진 노드를 실행시킬 수 있다. 그 밖의 기능으로 노드를 실행할 때 패키지의 매개변수나 노드 이름 변경, 노드 네임스페이스 설정 등의 옵션을 붙일 수 있는 ROS 명령어이다. roslaunch는 *.launch라는 파일을 사용하여 실행 노드를 설정한다. | ||
| + | <sxh bash> | ||
| + | roslaunch 패키지명 roslaunch 파일 | ||
| + | </ | ||
| + | |||
| + | topic_publisher와 topic_subscriber에서 퍼블리쉬 노드와 서브스크라이버 노드를 각각 두 개씩 구동하여 서로 별도의 메시지 통신을 해보자. roslaunch에 사용되는 파일은 *.launch라는 파일명을 가지며 해당 패키지 폴더에 launch라는 폴더를 생성하고 그 폴더 안에 넣어야 한다. | ||
| + | <sxh bash> | ||
| + | roscd ros_tutorials_topic | ||
| + | mkdir launch | ||
| + | cd launch | ||
| + | gedit union.launch | ||
| + | < | ||
| + | <node pkg=" | ||
| + | <node pkg=" | ||
| + | <node pkg=" | ||
| + | <node pkg=" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | <sxh bash> | ||
| + | rosnode list | ||
| + | </ | ||
| + | |||
| + | 결과적으로 topic_publisher hem가 topic_publisher1과 publisher1과topic_publisher2로이름이바뀌어두개의노드가실행되었다. topic_subscriber 노드도 topic_subscriber1 과 topic_subscriber2로 이름이 바뀌어 실행되었다. 문제는 " | ||
| + | <sxh bash> | ||
| + | rqt_graph | ||
| + | </ | ||
| + | |||
| + | union.launch을 수정하자. | ||
| + | <sxh bash> | ||
| + | roscd ros_tutorials_service/ | ||
| + | gedit union.launch | ||
| + | < | ||
| + | <group ns=" | ||
| + | <node pkg=" | ||
| + | <node pkg=" | ||
| + | </ | ||
| + | <group ns=" | ||
| + | <node pkg=" | ||
| + | <node pkg=" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | 수정을 한 후 rqt 그래프를 보자. | ||
| + | <sxh bash> | ||
| + | rqt_graph | ||
| + | </ | ||
| + | |||
| + | ====2.2. namespace 예시==== | ||
| + | |||
| + | namespace는 이름 충돌을 막을 수 있는 옵션이다. 예를 들어 노드가 / | ||