Python — клиент roscpp не может вызвать службу rospy

Я пытаюсь использовать клиент roscpp для вызова rospy сервера. К сожалению, мои звонки от моего клиента всегда терпят неудачу, даже если мой сервер работает правильно и без проблем. Я включил код для клиента и сервера ниже вместе с полученным выводом (я могу включить CMakeList.txt и package.xml по запросу, но я почти уверен, что проблема где-то в следующих файлах).

service.py:

#!/usr/bin/env python

from std_srvs.srv import Empty, EmptyResponse
import rospy

def serviceCall(call):
print "service called"return EmptyResponse()

def serviceCall_server():
rospy.init_node('service_server')
s = rospy.Service('a_new_service', Empty, serviceCall)
print "Ready to receive service calls."rospy.spin()

if __name__ == "__main__":
serviceCall_server()

client.cpp:

#include <ros/ros.h>
#include <std_srvs/Empty.h>

int main(int argc, char** argv){
ros::init(argc, argv, "service_client");
ros::NodeHandle n;
ros::Rate r(30);

ros::ServiceClient service_call = n.serviceClient<std_srvs::Empty>("/a_new_service", 100);

std_srvs::Empty srv;
service_call.waitForExistence();
if (service_call.call(srv))
{
ROS_ERROR("Successfully called service a_new_service");
}
else
{
ROS_ERROR("Failed to call service a_new_service");
}

}

файл запуска:

<launch>
<node name="server" pkg="test" type="server.py" output="screen"/>
<node name="client" pkg="test" type="client" output="screen" />
</launch>

вывод из файла запуска:

core service [/rosout] found
process[server-1]: started with pid [25659]
process[client-2]: started with pid [25660]
[ INFO] [1485448779.402439557]: waitForService: Service [/a_new_service] has not been advertised, waiting...
Ready to receive service calls.
[ INFO] [1485448779.630636002]: waitForService: Service [/a_new_service] is now available.
[ERROR] [1485448779.630685730]: Failed to call service a_new_service

Запуск файла запуска приводит к сбою вызова службы (см. Последнюю строку выходных данных). я могу позвонить вызов rosservice / a_new_service {} от терминала успешно, что заставляет меня поверить, что я делаю что-то не так с моим клиентом, но я не уверен, что не так.

РЕДАКТИРОВАТЬ: Таким образом, при дальнейшем исследовании это, кажется, ошибка с файлом запуска, так как я могу вызвать и сервер и клиент, используя rosrun, и заставить их успешно общаться. У кого-нибудь есть идеи, почему файл запуска может вызвать ошибку при вызове? Особенно учитывая тот факт, что вызов waitForService сообщает, что сервер доступен.

0

Решение

Мне удалось решить мою собственную проблему, изменив

ros::ServiceClient service_call = n.serviceClient<std_srvs::Empty>("/a_new_service", 100);

в

ros::ServiceClient service_call = n.serviceClient<std_srvs::Empty>("/a_new_service");

Я все еще не совсем уверен, почему код позволяет мне скомпилировать это, так как я не вижу никакой информации о API ROS относительно того, что могло бы означать значение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]