ros - 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 ???
解决方案
首先,您需要生成 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);
}
推荐阅读
- pandas - 如何应用规则按行合并两个熊猫数据框?
- php - 每 5 秒使用 PHP 从数据库中获取数据
- python - 在二维中加速一个点
- scheme - 如何在方案中运行布尔值列表?
- python - 为什么 f = g = h = [] 将列表设置为永远相等?
- python - python用循环附加到嵌套列表
- python - 带异常处理的 generator.close() 解释
- python - 安装 PyTorch 1.4 的问题 - “没有找到与 torch===1.4.0 匹配的发行版”
- python - ValueError: y 在 0 类中只有 1 个样本,协方差定义不正确。而QDA分类
- php - 使用 woocommerce 产品详细信息污染数组或 json