Ubuntu下 ROS TCP socket通信

最近在完成调度系统与AGV之间到通信,由于调度系统与AGV不采用ros多机通信,因此特地写了一个基于python的ROS TCP socket通信

特点:通信断线自动重连

工作流程:调度系统给AGV发送一个位置指令,需要将调度系统的通信协议通过python socket解析出数据,然后发送目标位置给底层move_base 包,让AGV自动运动起来。

难点:自动重连、数据解析、ROS action消息发布、多线程运行socket、数据处理和ROS

1.数据解析

调度系统将十六进制数打包成字符串发送,所以接收到数据后,确保帧头帧尾是对应的,接着再对字符串进行分割,如ffab变成0xff,0xab。

调度系统将10变成了十六进制0a发送过来,得到字符串'0a'先进行字符串分割

int(x,base)

  • x -- 字符串或数字。
  • base -- 进制数,默认十进制。

int(x,16)意思将里面的字符串或数字表示为16进制数转换成10进制,其实直接转换就好了,没必要再chr().当初在flow国外网站看见别人这样去解析,但是没有多去思考

即 int('0a',16)   = 10

chr(i) 

参数

  • i -- 可以是10进制也可以是16进制的形式的数字。

返回值

返回值是当前整数对应的 ASCII 字符。


实例

以下展示了使用 chr() 方法的实例:

>>>print chr(0x30), chr(0x31), chr(0x61) # 十六进制

0 1 a

你可能感兴趣的:(ROS,python)