ROS實現1個客戶端向2個伺服器請求service

2021-09-24 05:14:27 字數 2988 閱讀 9337

建立工作空間,並在工作空間中建立src資料夾,返回ws資料夾,編譯工作空間

mkdir ws/src

cd ws

catkin_make

在工作空間中建立程式包

catkin_create_pkg my_pkg std_msgs rospy roscpp
進入程式包中,在程式包中建立msg和srv資料夾,在msg資料夾中建立msg1.msg檔案(空的即可,本例中不需要message型別),在srv資料夾中建立兩個檔案:srv1.srv和srv2.srv

srv1.srv中輸入以下**:

int32 a

int32 b

int32 c

---int32 sum

srv2.srv中輸入以下**:

int32 a

int32 b

int32 c

---int32 multiply

---表示分割客戶端與伺服器的資料型別,前面三個是客戶端的請求的資料型別,後面是伺服器的資料型別。

開啟package.xml檔案,把以下兩句取消注釋

message_generation

message_runtime

開啟cmakelist.txt檔案,做如下修改

find_package(catkin required components

roscpp

rospy

std_msgs

message_generation

)add_message_files(

files

msg1.msg

)add_service_files(

files

srv1.srv

srv2.srv

)generate_messages(

dependencies

std_msgs

)catkin_package(

# include_dirs include

# libraries my_pkg

catkin_depends roscpp rospy std_msgs message_runtime

# depends system_lib

)include_directories(include $)

add_executable(request src/request.cpp) #這裡括號裡面,前面是節點名,後面是對應的cpp檔案

add_executable(response src/response.cpp)

add_executable(response2 src/response2.cpp)

add_dependencies(request my_pkg_generate_messages_cpp)

add_dependencies(response my_pkg_generate_messages_cpp)

add_dependencies(response2 my_pkg_generate_messages_cpp)

target_link_libraries(request

$)target_link_libraries(response

$)target_link_libraries(response2

$)

在ws/src/my_pkg/src中建立3個cpp檔案,

request.cpp

#include "ros/ros.h"

#include "my_pkg/srv1.h"

#include "my_pkg/srv2.h"

#include int main(int argc, char **ar**)

return 0;

}

response.cpp

#include "ros/ros.h"

#include "my_pkg/srv1.h"

bool add(my_pkg::srv1::request &req,

my_pkg::srv1::response &res)

int main(int argc, char **ar**)

response2.cpp

#include "ros/ros.h"

#include "my_pkg/srv2.h"

bool multiply(my_pkg::srv2::request &req,

my_pkg::srv2::response &res)

int main(int argc, char **ar**)

返回工作空間目錄,編譯工作空間

catkin_make
啟動ros

roscore
開啟新的終端,進入工作空間目錄 ws,並且source一下

source devel/setup.bash

rosrun my_pkg response

再開啟新的終端,進入工作空間目錄 ws,並且source一下

source devel/setup.bash

rosrun my_pkg response2

再開啟新的終端,進入工作空間目錄 ws,並且source一下,即可執行。

source devel/setup.bash

rosrun my_pkg request

總結,先建立工作空間,編譯工作空間,建立程式包,建立msg srv檔案,修改package.xml檔案和cmakelist.txt檔案,編寫cpp或py檔案,重新編譯工作空間,最後執行ros即可。

ROS服務端與客戶端

usr bin env python coding utf 8 import time,thread import rospy from geometry msgs.msg import twist from std srvs.srv import trigger,triggerresponse p...

服務端向客戶端傳輸檔案

23.1 閱讀須知 所以如果不符合你的需求就不用往下了。這是用socket傳輸檔案的服務端 include sockaddr in include socket include socket include printf include exit include bzero define serve...

TortoiseSVN客戶端使用的2個配置問題

軟體開發中,都需要涉及到 管理工具。在visual studio中一般都是使用team foundation server,簡稱tfs。團隊中一般有一台伺服器作為tfs server端,然後vs端本身整合了tfs的客戶端,當然也可以使用web版檢視work items和bugs等等。1.很多公司都使...