차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | |||
activity:public:2021:ros:4 [2021/10/03 15:20:19] – [ROS STUDY #3: ROS 노드 간의 구조2, 터틀봇 시뮬레이션] yhy01625 | 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는 이름 충돌을 막을 수 있는 옵션이다. 예를 들어 노드가 / | ||