やりたいこと
frame_grabber.exeを用いてRPLiDARから取得したデータ(x,y,z)をyに注目して並び替えたい
#RPLIDAR SCAN DATA
#COUNT=457
#Angule Distance Quality
358.3411 742.0 188
0.9668 735.0 188
1.7468 736.0 188
2.4060 734.0 188
3.0597 733.0 188
3.7134 732.0 188
4.2462 733.0 188
4.9054 731.0 188
5.5591 730.0 188
6.3391 727.0 188
6.8719 728.0 188
7.6520 726.0 188
8.3112 725.0 188
8.9648 725.0 188
9.6240 728.0 188
こんな感じにRPLiDARからデータを取得できる!
これをzを消してyを並び替える
想定環境
・Jupyter-notebook
実際にやってみる
f = open("./a.pts",'r')
data = f.read()
datas_list = data.split('\n')
datas_float = []
for data_list in datas_list:
datas_float.append(data_list.split(' '))
まず初めにptsファイルを読み込む ※これは,txtファイルと同様に読み込めるみたい
次に改行ごとに分けて,スペースごとに区切って,一個ずつのデータとして見る
datas_floatの中身:list
datas_float[ i ]:list
datas_float[ i ][ j ]:str
datas_float[ i ]:list
datas_float[ i ][ j ]:str
x座標 | y座標 | z座標 |
---|---|---|
'352.1228' | '2101.0' | '188' |
'352.7765' | '2165.0' | '188' |
'353.5620' | '1787.0' | '188' |
・ | ・ | ・ |
・ | ・ | ・ |
・ | ・ | ・ |
z座標はいらなくて,x座標,y座標だけをfloat型で取り出せるようにしたい
データの数は1397
そしてこの時はまだstr型
これをfloat型に変換する
x_list = []
y_list = []
x座標,y座標それぞれのリストを作成する
for i in range (len(datas_float)-1):
for ii in range(2):
if(ii % 2 == 1):
x_list.append(datas_float[i][0]) # [i][0]はx座標
else:
y_list.append(datas_float[i][1]) # [i][1]はy座標
# [1][2]はz座標
この時点ではstr
x_list | y_list |
---|---|
'352.1228' | '2101.0' |
'352.7765' | '2165.0' |
・ | ・ |
・ | ・ |
・ | ・ |
'351.0132' | '1583.0' |
list_float = []
for i in range(len(x_list)):
num = []
num.append(float(x_list[i]))
num.append(float(y_list[i]))
list_float.append(num)
x座標とy座標を結合させる
list_float_sorted = sorted(list_float, key=lambda x: x[1])
list_float_sorted[:5]
要素1に着目てして並び替える
list_float
要素0 | 要素1 |
---|---|
201.9979 | 156.0 |
211.6515 | 159.0 |
・ | ・ |
・ | ・ |
・ | ・ |
9.1241 | 2749.0 |
これで昇順の並び替え完了しました!!
おまけ
list_float_sorted = sorted(list_float, key=lambda x: x[1],reverse=True)
list_float_sorted[:5]
keyの後に"reverse=True"を指定すると,昇順から降順になる!!