ros(6) service server编程实现
生活随笔
收集整理的這篇文章主要介紹了
ros(6) service server编程实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
創(chuàng)建代碼
turtle_command_server.cpp
/*** 該例程將執(zhí)行/turtle_command服務(wù),服務(wù)數(shù)據(jù)類型std_srvs/Trigger*/#include <ros/ros.h> #include <geometry_msgs/Twist.h> #include <std_srvs/Trigger.h>ros::Publisher turtle_vel_pub; bool pubCommand = false;// service回調(diào)函數(shù),輸入?yún)?shù)req,輸出參數(shù)res bool commandCallback(std_srvs::Trigger::Request &req,std_srvs::Trigger::Response &res) {pubCommand = !pubCommand;// 顯示請求數(shù)據(jù)ROS_INFO("Publish turtle velocity command [%s]", pubCommand==true?"Yes":"No");// 設(shè)置反饋數(shù)據(jù)res.success = true;res.message = "Change turtle command state!"return true; }int main(int argc, char **argv) {// ROS節(jié)點(diǎn)初始化ros::init(argc, argv, "turtle_command_server");// 創(chuàng)建節(jié)點(diǎn)句柄ros::NodeHandle n;// 創(chuàng)建一個名為/turtle_command的server,注冊回調(diào)函數(shù)commandCallbackros::ServiceServer command_service = n.advertiseService("/turtle_command", commandCallback);// 創(chuàng)建一個Publisher,發(fā)布名為/turtle1/cmd_vel的topic,消息類型為geometry_msgs::Twist,隊(duì)列長度10turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);// 循環(huán)等待回調(diào)函數(shù)ROS_INFO("Ready to receive turtle command.");// 設(shè)置循環(huán)的頻率ros::Rate loop_rate(10);while(ros::ok()){// 查看一次回調(diào)函數(shù)隊(duì)列ros::spinOnce();// 如果標(biāo)志為true,則發(fā)布速度指令if(pubCommand){geometry_msgs::Twist vel_msg;vel_msg.linear.x = 0.5;vel_msg.angular.z = 0.2;turtle_vel_pub.publish(vel_msg);}//按照循環(huán)頻率延時loop_rate.sleep();}return 0; }修改cmake
add_executable(turtle_command_server src/turtle_command_server.cpp) target_link_libraries(turtle_command_server ${catkin_LIBRARIES})編譯
catkin_make
運(yùn)行
roscore
rosrun turtlesim turtlesmi_node
rosrun service_example?turtle_command_server
rosservice call /turtle_command tab鍵
總結(jié)
以上是生活随笔為你收集整理的ros(6) service server编程实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。