차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
| activity:public:2021:ros:6 [2021/10/03 15:41:27] – [1.2. Twist] yhy01625 | activity:public:2021:ros:6 [2021/10/03 21:10:19] (현재) – 99dohyung | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ======ROS STUDY #6 : Topic 퍼블리시 실습====== | ||
| + | |||
| + | {{youtube> | ||
| + | |||
| + | =====1. 만들어야 하는 패키지 분석===== | ||
| + | |||
| + | ====1.1. CMD_VEL이란? | ||
| + | {{: | ||
| + | |||
| + | 터틀봇의 속도 제어 명령을 내릴 때 사용하는 토픽이다. | ||
| + | 일반적으로 로봇의 이동을 제어하기 위해 많이 사용된다. | ||
| + | 형식은 geometry_msgs/ | ||
| + | |||
| + | ====1.2. Twist==== | ||
| + | <sxh bash> | ||
| + | linear.x | ||
| + | linear.y | ||
| + | linear.z | ||
| + | angular.x | ||
| + | angular.y | ||
| + | angular.z | ||
| + | </ | ||
| + | Twist 메시지 형식은, Vector3 형식을 기반으로 한다. | ||
| + | x,y,z축 방향으로의 선속도(linear), | ||
| + | |||
| + | =====2. topic 패키지 생성===== | ||
| + | <sxh bash> | ||
| + | catkin_create_pkg cmd_vel_pub message_generation roscpp geometry_msgs message_runtime | ||
| + | catkin_create_pkg [만들 패키지 이름] [의존성 패키지1] [의존성 패키지2]... | ||
| + | </ | ||
| + | catkin_ws로 이동 후, 터미널에서 위의 명령어 입력 | ||
| + | |||
| + | ====2.1. package.xml==== | ||
| + | <sxh xml title: | ||
| + | <package format=" | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | |||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====2.2. CMakeLists.txt==== | ||
| + | 작성한 노드를 빌트 할때 즉 소스코드 작성 후 실행파일을 만들때 사용되는 옵션들 | ||
| + | <sxh cpp title: | ||
| + | cmake_minimum_required(VERSION 2.8.3) | ||
| + | project(cmd_vel_pub) | ||
| + | |||
| + | find_package(catkin REQUIRED COMPONENTS message_generation roscpp geometry_msgs) | ||
| + | |||
| + | include_directories(${catkin_INCLUDE_DIRS}) | ||
| + | |||
| + | add_message_files(FILES Cmd_vel_msg.msg) | ||
| + | generate_messages(DEPENDENCIES geometry_msgs) | ||
| + | |||
| + | ##캐킨 패키지 옵션으로 라이브러리, | ||
| + | catkin_package( | ||
| + | INCLUDE_DIRS | ||
| + | CATKIN_DEPENDS roscpp geometry_msgs | ||
| + | DEPENDS | ||
| + | ) | ||
| + | |||
| + | ########### | ||
| + | ## Build ## | ||
| + | ########### | ||
| + | |||
| + | ## | ||
| + | add_executable(cmd_vel_pub src/ | ||
| + | add_dependencies(cmd_vel_pub ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) | ||
| + | target_link_libraries(cmd_vel_pub ${catkin_LIBRARIES}) | ||
| + | |||
| + | add_executable(sub_test src/ | ||
| + | add_dependencies(sub_test ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) | ||
| + | target_link_libraries(sub_test ${catkin_LIBRARIES}) | ||
| + | </ | ||
| + | |||
| + | =====3. 메세지(msg) 등록===== | ||
| + | <sxh cpp title: | ||
| + | geometry_msgs/ | ||
| + | </ | ||
| + | |||
| + | |||
| + | =====4. 노드 코드 작성===== | ||
| + | |||
| + | ====4.1. 퍼블리셔(publisher)==== | ||
| + | <sxh cpp title: | ||
| + | #include " | ||
| + | #include " | ||
| + | |||
| + | #define PUB_NODE_NAME " | ||
| + | #define SUB_NODE_NAME " | ||
| + | #define TOPIC_NAME " | ||
| + | |||
| + | float vel_x, vel_y; | ||
| + | |||
| + | int main(int argc, char **argv){ | ||
| + | ros:: | ||
| + | ros:: | ||
| + | geometry_msgs:: | ||
| + | |||
| + | ros:: | ||
| + | ros::Rate loop_rate(0.3); | ||
| + | |||
| + | cmd_vel.linear.x =0; | ||
| + | cmd_vel.linear.y =0; | ||
| + | |||
| + | while (ros:: | ||
| + | |||
| + | std::cout << "input velocity" | ||
| + | std::cin >> vel_x >> vel_y; | ||
| + | |||
| + | float current_x = cmd_vel.linear.x; | ||
| + | float current_y = cmd_vel.linear.y; | ||
| + | |||
| + | |||
| + | loop_rate.sleep();// | ||
| + | |||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ====4.2. 서브스크라이버(subscriber)==== | ||
| + | <sxh cpp title: | ||
| + | #include " | ||
| + | #include " | ||
| + | |||
| + | #define PUB_NODE_NAME " | ||
| + | #define SUB_NODE_NAME " | ||
| + | #define TOPIC_NAME " | ||
| + | |||
| + | void messageCb(const geometry_msgs:: | ||
| + | ROS_INFO(" | ||
| + | ROS_INFO(" | ||
| + | ROS_INFO(" | ||
| + | ROS_INFO(" | ||
| + | ROS_INFO(" | ||
| + | ROS_INFO(" | ||
| + | } | ||
| + | |||
| + | int main(int argc, char **argv){ | ||
| + | ros:: | ||
| + | ros:: | ||
| + | |||
| + | // ros:: | ||
| + | ros:: | ||
| + | |||
| + | ros:: | ||
| + | |||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||