ROS系统 实现客户端Client和服务端Server
服務(wù)編程流程:
- 創(chuàng)建服務(wù)器
- 創(chuàng)建客戶端
- 添加編譯選項
- 運行可執(zhí)行程序
實現(xiàn)客戶端Clien
創(chuàng)建功能包
cd ~/catkin_ws/src catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim如何實現(xiàn)一個客戶端
- 初始化ROS節(jié)點
- 創(chuàng)建一個Client實例
- 發(fā)布服務(wù)請求數(shù)據(jù)
- 等待Server處理之后的應(yīng)答結(jié)果
在剛創(chuàng)建的 learning_service 目錄中的src文件夾下創(chuàng)建一個 cpp文件
cd ~/catkin_ws/src/learning_service/src touch turtle_spawn.cpp在 turtle_spawn.cpp 文件中寫入以下代碼。
下面代碼實現(xiàn)功能:請求/spawn服務(wù),服務(wù)數(shù)據(jù)類型turtlesim::Spawn
在CMakeLists.txt中添加以下代碼:
add_executable(turtle_spawn src/turtle_spawn.cpp) target_link_libraries(turtle_spawn ${catkin_LIBRARIES})編譯項目
cd ~/catkin_ws catkin_make設(shè)置環(huán)境變量,讓系統(tǒng)能夠找到該工作空間
source devel/setup.bash啟動ROS Master
roscore啟動小海龜仿真器
rosrun turtlesim turtlesim_node啟動自定義的海龜控制節(jié)點,會在客戶端中生成一個新的小海龜。
rosrun learning_service turtle_spawn用Python創(chuàng)建客戶端步驟:
cd ~/catkin_ws/src/learning_service創(chuàng)建 scripts 文件夾
mkdir scripts cd scripts創(chuàng)建 turtle_spawn.py Python文件
touch turtle_spawn.py用Python創(chuàng)建客戶端代碼:
下面代碼實現(xiàn)功能: 請求/spawn服務(wù),服務(wù)數(shù)據(jù)類型turtlesim::Spawn
Python代碼不需要重新編譯,可以直接執(zhí)行。
rosrun learning_service turtle_spawn.py實現(xiàn)服務(wù)端Server
如何實現(xiàn)一個服務(wù)器
- 初始化ROS節(jié)點
- 創(chuàng)建Server實例
- 循環(huán)等待服務(wù)請求,進(jìn)入回調(diào)函數(shù)
- 在回調(diào)函數(shù)中完成服務(wù)功能的處理,并反饋應(yīng)答數(shù)據(jù)。
在創(chuàng)建的 learning_service 目錄中的src文件夾下創(chuàng)建一個 turtle_command_server.cpp文件
cd ~/catkin_ws/src/learning_service/src touch turtle_command_server.cpp在 turtle_command_server.cpp 文件中寫入以下代碼。
下面代碼實現(xiàn)功能:執(zhí)行/turtle_command服務(wù),服務(wù)數(shù)據(jù)類型std_srvs/Trigger
注:
可以通過以下指令 顯示服務(wù)類型的所有信息
例如:
rossrv show std_srvs/Trigger在CMakeLists.txt中添加以下代碼:
add_executable(turtle_command_server src/turtle_command_server.cpp) target_link_libraries(turtle_command_server ${catkin_LIBRARIES})
編譯項目
設(shè)置環(huán)境變量,讓系統(tǒng)能夠找到該工作空間
source devel/setup.bash啟動ROS Master
roscore啟動小海龜仿真器
rosrun turtlesim turtlesim_node啟動自定義的海龜控制節(jié)點,會在客戶端中生成一個新的小海龜。
rosrun learning_service turtle_command_server以下指令相當(dāng)于海龜?shù)拈_關(guān),發(fā)送一次,海龜就會啟動,再次發(fā)送時,就會讓海龜停止運動。
rosservice call /turtle_command "{}"
用Python創(chuàng)建服務(wù)端步驟:
cd ~/catkin_ws/src/learning_service創(chuàng)建 scripts 文件夾
mkdir scripts cd scripts創(chuàng)建 turtle_command_server.py Python文件
touch turtle_command_server.py用Python創(chuàng)建客戶端代碼:
下面代碼實現(xiàn)功能: 執(zhí)行/turtle_command服務(wù),服務(wù)數(shù)據(jù)類型std_srvs/Trigger
啟動ROS Master
roscore啟動小海龜仿真器
rosrun turtlesim turtlesim_nodePython代碼不需要重新編譯,可以直接執(zhí)行。
rosrun learning_service turtle_command_server.py以下指令相當(dāng)于海龜?shù)拈_關(guān),發(fā)送一次,海龜就會啟動,再次發(fā)送時,就會讓海龜停止運動。
rosservice call /turtle_command "{}"總結(jié)
以上是生活随笔為你收集整理的ROS系统 实现客户端Client和服务端Server的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS系统 C++或Python实现话题
- 下一篇: ROS系统 服务数据的定义与使用