我使用RestSharp发送帖子并获取对机器人的调用,该机器人通过LAN与我的计算机通过交换机连接。我的来电:
public Vector3 getEffectorPos()
{
var c = new RestClient("http://" + robotIP);
var r = new RestRequest("/present/effector_position.json", Method.GET);
List<String> queryResult = c.Execute<List<String>>(r).Data;
string[] tmp = queryResult[0].Split('[', ']');
Vector4 x = parseStringToFloat4(tmp[2]);
Vector4 y = parseStringToFloat4(tmp[4]);
Vector4 z = parseStringToFloat4(tmp[6]);
Vector3 pos = new Vector3(x.w, y.w, z.w);
effPos.setPos(x.w, y.w, z.w);
effPos.cos = x.x;
effPos.sin = -x.y;
return pos;
}
因为机器人有静态IP 192.168.200.99我每次想要运行项目时都必须切换到.200子网中的静态IP地址。当我第一次启动项目时,如果未连接机器人,我会收到NullReference或Bad Gateway等错误。
但是现在如果我忘记从动态ip切换到静态ip并且程序无法连接到机器人Unity崩溃。然后,即使我切换回静态IP,Unity也会崩溃,看起来似乎没有任何帮助,但等待一段时间之后,如果没有我做任何事情,它将再次工作。
似乎我对帖子调用没有同样的问题:
public bool postEffectroPos(Vector3 pos, float speed_n)
{
var client = new RestClient("http://" + robotIP);
var request = new RestRequest("/present/effector_position_with_speed.json", Method.POST) { RequestFormat = RestSharp.DataFormat.Json };
effectorPos a = new effectorPos();
a.x = pos.x;
a.y = pos.y;
a.z = pos.z;
a.speed = speed_n;
request.AddBody(a);
bool move = false;
try
{
client.ExecuteAsync(request, response =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
string[] tmp = response.Content.Split(':');
string t = tmp[1].Remove(tmp[1].Length - 1);
move = bool.Parse(t);
//Debug.Log(move);
}
else
{
Debug.Log(response.StatusCode);
}
});
}
catch (Exception error)
{
Debug.Log(error);
}
return move;
}
post调用是异步但我还没弄清楚如何使用async返回一个值(总是返回零或false,具体取决于类型),我需要get调用的返回值。