創建ROS消息發佈器(publisher)、訂閱器(subscriber)
發佈器和訂閱器都是可執行文件。對C++語言,我們在.cpp文件中創建,並編譯生成可執行文件,
一、發佈器:
1、cd到包目錄下,然後在src文件夾下創建.cpp文件;
2、.cpp文件包括以下部分:
①包含(include)依賴庫,如ros/ros.h、std_msgs/String.h、sstream等
②主函數部分: ros::init(argc,argv,"talker"); // 向ROS系統註冊當前節點
ros::NodeHandle n; // 爲當前節點定義一個節點句柄
// 向ROS節點網絡廣播:當前節點要向chatter話題發佈消息std_msgs/String,
// 消息緩衝區大小爲1000,需要這個消息的可以來和當前節點連接
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
ros::Rate loop_rate(10); // 定義消息發佈頻率
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "Hello word" ;
msg.data = ss.str();
chatter_pub.publish(msg); //發佈消息
ros::spinOnce();
loop_rate.sleep(); //休眠響應時間
}
二、訂閱器:
1、cd到包目錄下,然後在src文件夾下創建.cpp文件;
2、.cpp文件包括以下部分:
①包含(include)依賴庫,如ros/ros.h、std_msgs/String.h等
②回調函數部分:void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
消息以指針傳遞,在此函數體內完成對消息的處理
}
③主函數部分: ros::init(argc,argv,"listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter",1000,chatterCallback);
ros::spin();
三、CMakeLists.txt文件的設置:
1、添加可執行文件,即add_executable(talker src/talker.cpp);
add_executable(listener src/talker.cpp);
2、添加目標連接庫,即target_link_libraries(talker ${catkin_LIBRARIES});
target_link_libraries(listener ${catkin_LIBRARIES});
3、添加對生成的消息文件的依賴項,即add_dependencies(talker beginner_tutorials_generate_messages_cpp);
add_dependencies(listener beginner_tutorials_generate_messages_cpp);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.