質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

2370閲覧

GPSセンサで座標の取得をしたい

kuryu

総合スコア13

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2019/02/21 09:53

編集2019/02/21 10:45

前提・実現したいこと

GPSセンサを使って地点の座標を取得する
(高度、緯度、経度を出力する)

発生している問題・エラーメッセージ

typeerrorが出ているがその解決法が分からない(str型もしくはbytes型になっているのが大凡の原因であるのは理解したがその解決法としてどのようにプログラムを変更すれば良いか知りたい)

Traceback (most recent call last):
File "/home/pi/wpi3_GPS.py", line 102, in <module>
yyyymmddhhmmssff = datetime.datetime.strptime(gpzda[4] + '/' + gpzda[3] + '/' + gpzda[2] + ' ' + gpzda[1],"%Y/%m/%d %H%M%S.%f")
TypeError: can't concat bytes to str

該当のソースコード

python

1#!/usr/local/bin/python 2# -*- coding: utf-8 -*- 3 4import serial 5import datetime 6import os 7 8ser = serial.Serial( #みちびき対応GPS用の設定 9 port = "/dev/ttyS0", #シリアル通信を用いる 10 baudrate = 9600, #baudレート 11 parity = serial.PARITY_NONE, #パリティ 12 bytesize = serial.EIGHTBITS, #データのビット数 13 stopbits = serial.STOPBITS_ONE, #ストップビット数 14 timeout = None, #タイムアウト値 15 xonxoff = 0, #ソフトウェアフロー制御 16 rtscts = 0, #RTS/CTSフロー制御 17 ) 18 19#後で使う変数をあらかじめ宣言 20alt_lat_long = '0,0,0' #GPSから得られる、高度、緯度、経度の情報 21num_sat = '0' #GPSから得られる、衛星の個数の情報 22 23def sixty_to_ten(x): 24 ans = float(int(x) + ((x - int(x)))*100/60) 25 return ans 26 27#GGA用のファイル初期化 28f = open('datagga.csv','w') 29f.write('yyyy-mm-dd HH:MM:SS.ffffff ,a number of satellites ,high ,latitude ,longitude \n') #出力フォーマット 30f.close() 31 32#GSV用のファイル初期化 33f = open('datagsv.csv','w') 34f.write('No. ,Elevation in degrees ,degrees in true north \n') #仰角と方位角 35f.close() 36 37now = datetime.datetime.now() 38if os.path.exists("datagga.csv"): 39 new_name = "{0}_{1:%Y%m%d-%H%M%S}.{2}".format("datagga",now,"csv") 40 os.rename("datagga.csv",new_name) 41 42#出力フォーマット 43print ("yyyy-mm-dd HH:MM:SS.ffffff ,a number of satellites ,high ,latitude ,longitude") 44print ("No. ,Elevation in degrees ,degrees in true north \n") 45############################################################################## 46while True: 47 gps_data = ser.readline() #1行ごとに読み込み、処理を繰り返す 48 if not gps_data: 49 print("no data") 50 #GGA GPSセンサの位置情報を知る 51 #$GPGGA,UTC時刻,緯度,緯度の南北,経度,経度の東西,位置特定品質,使用衛星数, 52 #水平精度低下率,海抜高さ,高さの単位,ジオイド高さ,高さの単位,DGPS,差動基準地点 53 if (gps_data.startswith(b'$GPGGA')): #startswith:1行の先頭文字を検索する 54 gpgga = (gps_data.split(b",")) #split:1行をカンマで区切って変数にlist型で保存 55 #緯度と経度の情報を、listからfloatに直す 56 if gpgga[2]: 57 lat_60,long_60,altitude = float(gpgga[2]),float(gpgga[4]),float(gpgga[9]) 58 else: 59 lat_60,long_60,altitude = 0,0,0 #緯度の情報が無い 60 #緯度と経度を60進法から10進法に変換、東経と北緯で計算 61 if gpgga[3] == "W": lat_60 *= -1 62 if gpgga[5] == "S": long_60 *= -1 63 lat_10,long_10 = sixty_to_ten(lat_60/100),sixty_to_ten(long_60/100) 64 #csv形式で出力する用のデータを変数にまとめて保存する(なければ0とする) 65 alt_lat_long = "%3.2f,%5.6f,%5.6f" % (altitude,lat_10,long_10) if gpgga[9] else "0,0,0" #高度、緯度、経度 66############### 67 #GSA 特定タイプを見ることでGPSの通信状況を確認する 68 #$GPGSA,UTC時刻,特定タイプ,衛星番号,精度低下率(位置、水平、垂直) 69 #if (gps_data.startswith('$GPGSA')): print gps_data, #特定タイプ(2D,3D等)を確認するために表示。3の時が良好。 70############### 71 #GSV 受信した衛星の位置等の情報を記録する 72 #$GPGSV,UTC時刻,総センテンス数,このセンテンスの番号,総衛星数, 73 #衛星番号,衛星仰角,衛星方位角,キャリア/ノイズ比, を繰り返す 74 if (gps_data.startswith(b'$GPGSV')): 75 f = open('datagsv.csv','a') 76 gpgsv = (gps_data.split(b',')) 77 #衛星の個数を記録し、情報を追加する 78 if (gpgsv[2] == '1'): 79 num_sat = gpgsv[3] 80 f.write(gpgsv[1] + gpgsv[3] + '\n') 81 #それぞれの衛星の番号、仰角、方位角を追加する 82 if (len(gpgsv) == 4): num_sat = '0' 83 elif (len(gpgsv) >= 8): 84 gsv1 = gpgsv[4] + gpgsv[5] + gpgsv[6] #センテンス中一つ目の衛星 85 f.write(gsv1 + '\n') 86 if (len(gpgsv) >= 12): 87 gsv2 = gpgsv[8] + gpgsv[9] + gpgsv[10] #二つ目の衛星 88 f.write(gsv2 + '\n') 89 if (len(gpgsv) >= 16): 90 gsv3 = gpgsv[12] + gpgsv[13] + gpgsv[14] #三つ目の衛星 91 f.write(gsv3 + '\n') 92 if (len(gpgsv) == 20): 93 gsv4 = gpgsv[16] + gpgsv[17] + gpgsv[18] #四つ目の衛星 94 f.write(gsv4 + '\n') 95 f.close() 96############# 97 #ZDA NMEA出力における最後の行のため、時間を調べつつ一括ファイル出力する 98 #$GPZDA,UTC時刻(hhmmss.mm),日,月,西暦,時,分, 99 if (gps_data.startswith(b'$GPZDA')): 100 gpzda = (gps_data.split(b",")) 101 #GPSで取得したUTCの日付を保存する 102 yyyymmddhhmmssff = datetime.datetime.strptime(gpzda[4] + '/' + gpzda[3] + '/' + gpzda[2] + ' ' + gpzda[1],"%Y/%m/%d %H%M%S.%f") 103 time_and_number = "%s,%s" % (yyyymmddhhmmssff,num_sat) 104 #ファイル名を書き換える 105 #GGAのデータを標準出力、加えてcsvファイルに出力 106 f = open(new_name,'a') 107 f.write(time_and_number + ',' + alt_lat_long + '\n') 108 print(time_and_number + ',' + alt_lat_long) 109 f.close() 110 111

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/02/21 10:00

で、しつもんはなんでしょうか
bochan2

2019/02/21 10:08

何を質問するかを書かせないテンプレって変ですよね
guest

回答1

0

google翻訳
TypeError:バイトをstrに連結できません

そこんところ、どーなってるのかチェックしてみれば。

投稿2019/02/21 10:38

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問