本教程记录如何用C++编写并检验简单的服务端和客户端。
编写服务端
这里我们将创建服务(server)节点add_two_ints_server,该结点接受两个整数并计算他们的和。请在你的软件包(这里是 learing_topic )中创建文件 src/add_two_ints_server.cpp ,具体代码及部分注释如下:
1 |
|
编写客户端
同样的我们需要在软件包(这里是 learning_topic)下创建 src/add_two_ints_client.cpp 文件,具体代码及部分注释如下:
1 |
|
构建节点
再来编辑一下learning_topic里面的CMakeLists.txt文件,文件位于~/catkin_ws/src/learning_topic/CMakeLists.txt,并将下面的代码添加在文件末尾:
1 | add_executable(add_two_ints_server src/add_two_ints_server.cpp) |
这将创建两个可执行文件add_two_ints_server和add_two_ints_client,默认情况下,它们将被放到软件包目录下的devel空间中,即~/catkin_ws/devel/lib/
现在可以运行 catkin_make 编译一下了
cd ~/catkin_ws/
catkin_make
检验客服端与服务端
运行服务
rosrun leanring_topic add_two_ints_server
运行客户端
rosrun leanring_topic add_two_ints_client 1 3
得到的结果
- 总结
通过以上练习就算简单的了解了ROS通信机制中的服务通信,但作为初学者,我们会遇到非常多的问题,这些问题中大多数都和代码错误以及编译过程中所需依赖的设置有着非常大的关系,所以自己手动操作非常重要!!
下面就分享一个小问题,自己在代码写完,以来设置完之后运行服务和客户端节点是返回问题如下图:
在确定完代码没有错误之后,根据CSDN博主小六说酒的提醒找到了问题所在。原来在CMakeList.txt 偷懒复制客户端client的依赖时,没有全部改过来,导致应该使client.cpp产生可执行文件client的地方写成了生成可执行文件server,导致可执行文件重复,出现了节点重复的问题.