当前位置:首页 >> 编程语言 >> 【RK3399Pro学习笔记】十、ROS服务端Server的编程实现,尼康s230(dslr controller尼康)

【RK3399Pro学习笔记】十、ROS服务端Server的编程实现,尼康s230(dslr controller尼康)

cpugpu芯片开发光刻机 编程语言 1
文件名:【RK3399Pro学习笔记】十、ROS服务端Server的编程实现,尼康s230 【RK3399Pro学习笔记】十、ROS服务端Server的编程实现

目录如何实现一个服务器C++编写程序配置CMakeLists.txt编译并运行python创建并编写脚本运行

平台:华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本:Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615


记录自【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 —— 古月居GYH P14 14.服务端Server的编程实现

如何实现一个服务器 初始化ROS节点;创建Server实例;循环等待服务请求,进入回调函数;在回调函数中完成服务功能的处理,并反馈应答数据。 C++ 编写程序 nano ~/catkin_workspace/src/learning_service/src/turtle_command_server.cpp /***********************************************************************Copyright 2020 GuYueHome (www.guyuehome.com).***********************************************************************//*** 该例程将执行/turtle_command服务,服务数据类型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回调函数,输入参数req,输出参数resbool commandCallback(std_srvs::Trigger::Request &req,std_srvs::Trigger::Response &res){pubCommand = !pubCommand;// 显示请求数据ROS_INFO("Publish turtle velocity command [%s]", pubCommand==true?"Yes":"No");// 设置反馈数据res.success = true;res.message = "Change turtle command state!";return true;}int main(int argc, char **argv){// ROS节点初始化ros::init(argc, argv, "turtle_command_server");// 创建节点句柄ros::NodeHandle n;// 创建一个名为/turtle_command的server,注册回调函数commandCallbackros::ServiceServer command_service = n.advertiseService("/turtle_command", commandCallback);// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10);// 循环等待回调函数ROS_INFO("Ready to receive turtle command.");// 设置循环的频率ros::Rate loop_rate(10);while(ros::ok()){// 查看一次回调函数队列ros::spinOnce();// 如果标志为true,则发布速度指令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);}//按照循环频率延时loop_rate.sleep();}return 0;} 配置CMakeLists.txt nano ~/catkin_workspace/src/learning_service/CMakeLists.txt

添加

add_executable(turtle_command_server src/turtle_command_server.cpp)target_link_libraries(turtle_command_server ${catkin_LIBRARIES})

编译并运行 cd ~/catkin_workspacecatkin_make# 新建一个终端source ~/catkin_workspace/devel/setup.bashroscore# 新建一个终端source ~/catkin_workspace/devel/setup.bashrosrun turtlesim turtlesim_node # 新建一个终端source ~/catkin_workspace/devel/setup.bashrosrun learning_service turtle_command_server# 新建一个终端source ~/catkin_workspace/devel/setup.bashrosservice call /turtle_command "{}"rqt_graph

python 创建并编写脚本 nano ~/catkin_workspace/src/learning_service/scripts/turtle_command_server.py #!/usr/bin/env python# -*- coding: utf-8 -*-############################################################################ Copyright 2020 GuYueHome (www.guyuehome.com). ############################################################################ 该例程将执行/turtle_command服务,服务数据类型std_srvs/Triggerimport rospyimport thread,timefrom geometry_msgs.msg import Twistfrom std_srvs.srv import Trigger, TriggerResponsepubCommand = False;turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)def command_thread():while True:if pubCommand:vel_msg = Twist()vel_msg.linear.x = 0.5vel_msg.angular.z = 0.2turtle_vel_pub.publish(vel_msg)time.sleep(0.1)def commandCallback(req):global pubCommandpubCommand = bool(1-pubCommand)# 显示请求数据rospy.loginfo("Publish turtle velocity command![%d]", pubCommand)# 反馈数据return TriggerResponse(1, "Change turtle command state!")def turtle_command_server():# ROS节点初始化rospy.init_node('turtle_command_server')# 创建一个名为/turtle_command的server,注册回调函数commandCallbacks = rospy.Service('/turtle_command', Trigger, commandCallback)# 循环等待回调函数print "Ready to receive turtle command."thread.start_new_thread(command_thread, ())rospy.spin()if __name__ == "__main__":turtle_command_server() 运行 sudo chmod +x ~/catkin_workspace/src/learning_service/scripts/turtle_command_server.py# 新建一个终端source ~/catkin_workspace/devel/setup.bashroscore# 新建一个终端source ~/catkin_workspace/devel/setup.bashrosrun turtlesim turtlesim_node # 新建一个终端source ~/catkin_workspace/devel/setup.bashrosrun learning_service turtle_command_server.py # 新建一个终端source ~/catkin_workspace/devel/setup.bashrosservice call /turtle_command "{}"rqt_graph

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接