首页 > 解决方案 > ros-sharp 服务调用示例

问题描述

我创建了示例 ros 服务来添加 2 个数字。我把代码放在git上:

https://github.com/Thazz/ros_service_example

我可以通过以下方式测试服务:

rosservice 调用 /add_numbers [1,2]

并得到响应“总和:3.0”什么可以,

但是不知道如何在 rosbridge 上使用 ros-sharp 进行相同的调用。

我尝试了来自: https ://github.com/siemens/ros-sharp/blob/master/Libraries/RosBridgeClientTest/RosSocketConsoleExample.cs的唯一示例 ,它工作正常,但仅适用于GetParamRequest

// Service Call:
rosSocket.CallService<rosapi.GetParamRequest, rosapi.GetParamResponse>("/rosapi/get_param", ServiceCallHandler, new rosapi.GetParamRequest("/rosdistro", "default"));

如何更改此行以调用我的 add_numbers ???

标签: ros

解决方案


首先,您需要生成 C# 服务文件。您可以使用ROS#提供的控制台工具来执行此操作:

RosMsgGen.exe -s SPECIFIC_PATH\ros_service_example-master\srv --recursive -n ros_service_example

生成后,AddNumbersRequest将如下所示:

/* 
 * This message is auto generated by ROS#. Please DO NOT modify.
 * Note:
 * - Comments from the original code will be written in their own line 
 * - Variable sized arrays will be initialized to array of size 0 
 * Please report any issues at 
 * <https://github.com/siemens/ros-sharp> 
 */

using Newtonsoft.Json;

namespace RosSharp.RosBridgeClient.MessageTypes.RosServiceExample
{
    public class AddNumbersRequest : Message
    {
        [JsonIgnore]
        public const string RosMessageName = "ros_service_example/AddNumbers";

        public double[] numbers;

        public AddNumbersRequest()
        {
            this.numbers = new double[0];
        }

        public AddNumbersRequest(double[] numbers)
        {
            this.numbers = numbers;
        }
    }
}

使用此类(以及还生成的AddNumbersResponse),您可以调用该服务:

//Use namespace
using RosSharp.RosBridgeClient.MessageTypes.RosServiceExample;

public static void Main(string[] args)
{
    ...

    //Prepare service request
    AddNumbersRequest request = new AddNumbersRequest(new double[] { 1, 2 });
    //Call service request
    rosSocket.CallService<AddNumbersRequest, AddNumbersResponse>("/add_numbers", ServiceCallHandler, request);

    ...
}

//Handler
private static void ServiceCallHandler(AddNumbersResponse message)
{
    Console.WriteLine("Sum: " + message.sum);
}

推荐阅读