我正在构建一个机器人,需要对其进行远程控制。我决定通过使用zeromq来做到这一点。我将从计算机(服务器)将x和y坐标发送到机器人(客户端)。因此,我需要将消息以数字形式发送,以便使机器人进入坐标。我该怎么做呢?我对编程非常陌生(如您所知),我目前有以下代码:
import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://127.0.0.1:5555")
while True:
socket.send_string("Robot Ready")
coordinates= socket.recv_string()
print("From server",coordinates)
#And here i want to use the received coordinates to give the robot commands#
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5555")
while True:
msg = socket.recv()
print(msg)
smsg = input("Enter coordinates : ")
socket.send_string(smsg)`
我将代码更新为此(它可以正常工作,但我觉得这没必要很长时间):
import zmq
context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://127.0.0.1:5555")
while True:
socket.send_string("AGV Ready")
x_start = float(socket.recv())
socket.send_string("X-coordinate registred")
y_start = float(socket.recv())
socket.send_string('Y-coordinate registred')
x_end = float(socket.recv())
socket.send_string("X-coordinate registred")
y_end = float(socket.recv())
print("Start position: ",x_start, y_start)
print("End position: ", x_end, y_end)
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5555")
while True:
msg = socket.recv()
print(msg)
smsg = input("Pick up product at x,y : ")
smsg_new = smsg.split(',')
socket.send_string(smsg_new[0])
socket.recv()
socket.send_string(smsg_new[1])
socket.recv()
smsg2 = input("Leave product at x,y : ")
smsg2_new = smsg2.split(',')
socket.send_string(smsg2_new[0])
socket.recv()
socket.send_string(smsg2_new[1])
答案 0 :(得分:1)
我假设输入应为整数。所以我建议
socket.send_string(int(smsg))
编辑:
期望的格式是什么? X和Y坐标是否应该用逗号等分隔?
如果同时发送X和Y,则应将用户输入限制为以下格式:
<X-coordinates>, <Y-coordinates>
然后分割字符串:
xy = smsg.split(',')
socket.send_string((int(xy[0]), int(xy[1]))
答案 1 :(得分:0)
我假设您的坐标将采用“ x y”的形式。
要解析坐标,您需要split()
和演员表。
将此添加到您的客户代码中:
sp = coordinates.split(' ') #This splits the string into a string array
#Using the specified delimiter
x = float(sp[0]) #This float() command converts the string into an number
y = float(sp[1])
print("X Cordinate: " + str(x))
print("Y Cordinate: " + str(y))
如果您的坐标以逗号分隔,则只需使用split(',')
即可。
编辑
每个评论中的建议,的确可以简化为
x, y = map(float, coordinates.split(' '))
您可以阅读有关map()
here的内容。但是,我仍然建议您在python casting上进行其他阅读。这是一项不容忽视的基本技能。
答案 2 :(得分:-1)
try:
value = int(strvalue)
except ValueError:
print("Failed to convert str to int.")