ROS 기초 게시 자 와 구독 자
22863 단어 ROS
발표 자 실현
화제 기능 팩 만 들 기
$ cd ~/catkin_ws/src
$ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
기능 패키지 의 src 폴 더 에 velocity 만 들 기publisher. cpp 파일
일반 생 성 절차
// turtle1/cmd_vel , geometry_msgs::Twist
#include
#include
int main(int argc, char **argv){
// ROS
ros::init(argc, argv, "velocity_publisher");
//
ros::NodeHandle n;
// Publisher, /turtle1/cmd_vel topic, geometry_msgs::Twist, 10
ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);
//
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok()){
// geometry_msgs::Twist
geometry_msgs::Twist vel_msg;
vel_msg.linear.x = 0.5;
vel_msg.angular.z = 0.2;
//
turtle_vel_pub.publish(vel_msg);
ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]",
vel_msg.linear.x, vel_msg.angular.z);
//
loop_rate.sleep();
}
return 0;
}
CMakeLists. txt 에 build 영역 을 설정 합 니 다.
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
마지막 으로 게시 자 를 컴 파일 하고 실행 합 니 다.
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash # ,
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic velocity_publisher
홈 디 렉 터 리 에 환경 변 수 를 파일 로 설정 합 니 다. ctrl + h 는 숨겨 진 파일 을 표시 할 수 있 습 니 다. bashsrc 를 찾 아 마지막 줄 에 추가 합 니 다.
source /home/xxx/catkin_ws/devel/setup.bash #xxx
프로 세 스 가 ctrl + c 로 정지 할 수 있 습 니 다.
구독 자 실현
화제 기능 팩 은 기능 팩 의 src 폴 더 에 존재 합 니 다 posesubscriber. cpp 파일
일반 생 성 절차
// /turtle1/pose , turtlesim::Pose
#include
#include "turtlesim/Pose.h"
// ,
void poseCallback(const turtlesim::Pose::ConstPtr& msg){
//
ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}
int main(int argc, char **argv){
// ROS
ros::init(argc, argv, "pose_subscriber");
// ,
ros::NodeHandle n;
// Subscriber, /turtle1/pose topic, poseCallback
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
//
ros::spin();
return 0;
}
CMakeLists. txt 에 'build 영역' 설정
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
마지막 으로 구독 자 를 컴 파일 하고 실행 합 니 다.
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun learning_topic pose_subscriber
사용자 정의 화제
화제 기능 패키지 에 msg 폴 더 를 만 들 고 사용자 정의 화 제 를 저장 하 는 파일 을 msg 폴 더 에 Person. msg 를 만 들 고 데이터 인터페이스 로 사용 합 니 다.
string name
uint8 sex
uint8 age
uint8 unknown = 0 #
uint8 male = 1
uint8 female = 2
화제 기능 패키지 의 package. xml 에 기능 패키지 의 컴 파일 의존 과 실행 의존 도 를 추가 합 니 다.
<build_depend>message_generation</build_depend> # message
<exec_depend>message_runtime</exec_depend> #
CMakeLists. txt 에 컴 파일 옵션 추가
message_generation # find_package()
add_message_files(FILES Person.msg) # msg
generate_messages(DEPENDENCIES std_msgs)# , messages,services
message_runtime # catkin_package()
#
이 때 devel / include / 기능 패키지 디 렉 터 리 에서 msg 파일 이 정의 하 는 헤더 파일 을 생 성 합 니 다. 그 정 보 는 msg 에서 정의 하 는 내용 입 니 다.
이 사용자 정의 화 제 를 사용 하여 화제 기능 패키지 의 src 디 렉 터 리 에 person 을 만 듭 니 다.publisher.cpp
// /person_info , learning_topic::Person
#include
#include "learning_topic/Person.h"
int main(int argc, char **argv){
// ROS
ros::init(argc, argv, "person_publisher");
//
ros::NodeHandle n;
// Publisher, /person_info topic, learning_topic::Person, 10
ros::Publisher person_info_pub = n.advertise<learning_topic::Person>("/person_info", 10);
//
ros::Rate loop_rate(1);
int count = 0;
while (ros::ok()){
// learning_topic::Person
learning_topic::Person person_msg; // Person
person_msg.name = "Tom";
person_msg.age = 18;
person_msg.sex = learning_topic::Person::male;
//
person_info_pub.publish(person_msg);
ROS_INFO("Publish Person Info: name:%s age:%d sex:%d",
person_msg.name.c_str(), person_msg.age, person_msg.sex);
//
loop_rate.sleep();
}
return 0;
}
창설 personsubscriber.cpp
// /person_info , learning_topic::Person
#include
#include "learning_topic/Person.h"
// ,
void personInfoCallback(const learning_topic::Person::ConstPtr& msg){
//
ROS_INFO("Subcribe Person Info: name:%s age:%d sex:%d", msg->name.c_str(), msg->age, msg->sex);
}
int main(int argc, char **argv){
// ROS
ros::init(argc, argv, "person_subscriber");
//
ros::NodeHandle n;
// Subscriber, /person_info topic, personInfoCallback
ros::Subscriber person_info_sub = n.subscribe("/person_info", 10, personInfoCallback);
//
ros::spin();
return 0;
}
기능 패키지 의 CMakeLists. txt 의 컴 파일 규칙, build 표시 줄 을 설정 합 니 다.
add_executable(person_publisher src/person_publisher.cpp) #
target_link_libraries(person_publisher ${catkin_LIBRARIES}) #
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp) # ,
add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)
컴 파일
$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun learning_topic person_subscriber
$ rosrun learning_topic person_publisher
주: 게시 자 와 구독 자가 연결 되 었 을 때 ros master 는 더 이상 필요 하지 않 습 니 다. ros master 는 두 가지 연결 만 책임 지고 다른 연결 이 있어 야 필요 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Gazebo 시뮬레이터로 AR drone 2.0을 웹에서 조작농업이나 경비라든지 화상 인식할 수 있는 정보 수집 드론에 개인의 지속은 외로운 것입니다. 다음에 시뮬레이터 내의 드론을 웹과 GUI의 인터페이스에서 조작할 수 있도록 했습니다. 참고로 한 것은 이쪽 ※ROS의 ca...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.