上次我们已经利用launch 文件和话题通信成功实现了小乌龟的位置与姿态的消息发布,这次我们将利用服务通信来实现这一功能。我们将以spawn(产卵,生成新的小乌龟)为例进行实践。
首先是对相关信息的获取:
rosservice type /spawn :我们能获得关于spawn 文件的节点信息,URI,文件名和相关参数;
再使用rossrv info turtlesim/Spawn获得spawn文件中的输入与响应代码,如下所示:
float32 x
float32 y
float32 theta
string name
---
string name
然后我们进行调用:
先写出rosservice call /spawn ,然后按tab键补齐后面的内容,对相关参数进行修改。
然后我们就会看到在相应界面上出现了两只小乌龟。
-------------------------------------------------------------------------------------------------------------
然后我们开始代码实现部分
首先在上次的文件夹中创建一个client.cpp文件进行编译,代码如下所示:
#include "ros/ros.h"
#include "turtlesim/Spawn.h"
int main(int argc, char*argv[]){
setlocale(LC_ALL,"");
ros::init(argc,argv,"call");
ros::NodeHandle n;
ros::ServiceClient client=n.serviceClient<turtlesim::Spawn>("/spawn");
turtlesim::Spawn spawn;
spawn.request.x=5.0;
spawn.request.y=5.0;
spawn.request.theta=1.57;
spawn.request.name="turtle2";
client.waitForExistence();
bool flag=client.call(spawn);
if(flag){
ROS_INFO("New turtle created successfully, name: %s",spawn.request.name.c_str());
}
else{
ROS_INFO("Failed to create");
}
return 0;
}
然后我们再对CMakeList.txt进行编译:
add_executable(call src/call.cpp)
add_dependencies(call ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(call
${catkin_LIBRARIES}
)
再编译,source,rosrun test01 call,效果如下:
832

被折叠的 条评论
为什么被折叠?



