前言
这两条在搞基于ros的uwb定位系统,需要在ubantu系统中接受uwb装置的数据,所以写这篇文字记录一下。
在ubantu中查看新加入端口
我们将uwb的usb接口插入电脑,之后打开ubantu的终端,输入下面的指令,可以查看新增端口口。
dmesg | grep ttyS*
开放端口权限
打开了端口之后,我们如果使用python直接读取,回报错没有权限,所以我们现在要给他开启权限,需要使用下面的代码。
sudo chmod 777 /dev/ttyUSB0
书写python代码接受端口数据
#! /usr/bin/env python
##指定解释器
import rospy
import serial
import time
if __name__ == '__main__':
rospy.init_node("Hello")
#输出日志信息
rospy.loginfo("Hello World!!!!")
serial_port = serial.Serial(
port='/dev/ttyUSB0',
baudrate=115200,
bytesize=serial.EIGHTBITS,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
)
data_list = []
start_flag = 0
time.sleep(1)
while True:
if serial_port.inWaiting() > 10:
data = serial_port.read()
data = data.decode('utf-8')
if data =='m':
start_flag = 1
if start_flag==1:
data_list.append(data)
# print(data,end='')
if data == "\n" and start_flag==1:
print("".join(data_list))
start_flag = 0
data_list.clear() #清空列表
一些其他收获
1.串口直接读如的数据打印出来前面会带个b,为了清除这个b,我需要使用下面这个代码进行解码,解码之后,读如的就是正常的字符了
data = data.decode('utf-8')
2.我要直接接受一个数据包,之后将这个数据包打印出去,我做法是每收到一个字节,就将这个字节加入到一个列表中,最后打印出来的这个列表并不是我们想要的,他还是一个字符一个字符的,并不是一个字符串,我们需要将列表转换成字符串,代码如下。
data_bao = ''.join(data_list)