1.はじめに
前のノートで第2番は、私たちが直接ポジショニングの実装方法をndt_matching使用しますが、オープンrvizを必要とし、2Dで初期位置を指定する姿勢推定を。GNSSを追加した後、あなたは最初の位置を見つけるndt_matching助けることができる、とndt_matchingマッチが失敗した場合、運動中のGNSSは、再配置を助けることができます。
ここでは、ドライ
2. GNSSは、コンフィギュレーションデータを読み込み、
私たちは、ブランドのGNSSデバイス、シリアルポート経由で読み込まれた情報を使用し、最初のポートは、次の図にAutowareで読み取るように設定されています。
設定が成功した後の最初の設定のシリアルGNSSのGNSS構成、当社のシリアルデバイス名GNSSデバイスは/ dev / ttyS0は、115200のボーレートの、保存して、シリアルGNSSオプションをクリックし、[OK]をクリックし、エラーメッセージが表示されます。
ERROR:[nmea_navsat_driver /タイプのノードを起動することはできませんnmea_topic_serial_reader]:nmea_navsat_driver ROSパス[ 0 ] =は/ opt / ROS /運動/共有/ ROS ROSパスを[ 1 ] = /ホーム/ A / autoware / ROS / SRC ROSパス[ 2 ] = /ホーム/ A / catkin_ws / SRC ROSパス[ 3 ] =は/ opt / ROS /運動/ 共有 ERROR:タイプのノードを起動することはできません[nmea_navsat_driver / nmea_topic_driver]:nmea_navsat_driver ROSパス[ 0 ] =は/ opt / ROS /運動/共有/ ROS ROSパス[ 1 ] = /ホーム/ A / autoware / ROS / SRC ROSパス[ 2] = /ホーム/ A / catkin_ws / SRC ROSパス[ 3 ] =は/ opt / ROS /運動/共有
Autowareこの場合、シリアルポートドライバがインストールされていないため、autoware / ROS / SRC /センシング/ドライバ/ GNSS /パッケージ/ nmea_navsat /スクリプト/ README.mdファイルは、ドライバをダウンロードする必要がありますよると、実行しています
$ sudoの apt-getをインストール ROS-運動-NMEA-navsatドライバを
更新されていない場合であってもよく、およびワークスペースautowareにソース、ダウンロードの送信元アドレスからダウンロードマウントします。https:ダウンロードした適切な運動のブランチに切り替えた後、//github.com/ros-drivers/nmea_navsat_driver.gitすなわち、これは、実行することができます。
そして、チェックシリアルGNSSオプションでは、出力がある、とGNSSデータが正常にデバイスを読んでいることを、文章中のコンテンツがある場合は、トピック/ nmea_sentenceを見て。/ Nmea_sentenceデータ内容:
--- ヘッダ: SEQ:223 スタンプ: 秒:1568168594 NSECS:571928024 frame_id:" / GPS " 文:" $×××××、0,7847.600,360.000,1.663,0.720,0.0000000,0.0000000,0.00,0.000、 0.000,0.000,0.000,0,0,0C * 0C 」
標準$ NMEA *****主流の規格の代表$ GPGGA、$ GPGSA、$ GPGSV、$ GPRMC、$ GPVTG、$ GPGLL。我々が使用するセンサーは標準ではありませんので、NMEAは、独自のデータ分析を記述する必要があります。
異なるGNSS機器、文の標準コンテンツは異なります。
:あなたはNMEAをお知りになりたい場合は、ブログを参照してくださいhttps://blog.csdn.net/jickjiang/article/details/79086202
3.データ解析
nmea2tfposeパッケージのAutowareデータ解析プログラム、機器は、私たちが使用する標準プロトコルではありませんが、私たちの契約と$ GPGGAは非常に近いので、我々は$ GPGGAに基づいて使用しているため、改善のnmea2tfpose_core.cppを作りました。
私たちの考え方は変更することです:
(1)まず、話す原点として、基地局の緯度と経度。
(2)$ GPGGA態様を、緯度と経度を原点平面座標系として基地局に座標マップ。
(3)TFにより変換し、ベースの原点は、変換マップ座標に座標系。
私たちは、ソースコードを変更しませんが、nmea2tfposeアウトパック修正、コンパイル、および別途公開します。
トピック/ gnss_poseの最終リリースのためnmea2tfposeパッケージ。一貫性のある場合はその成功した、基本的には同じで放出された場合/ gnss_poseおよび/ ndt_poseデータを参照してください。ここで、私は参照(nmea2tfpose_core.cpp)のための部分的なソースコードを発表しました:
// 基地局の緯度と経度を設定 geo_.set_originを(longitude_、latitude_)。
もし((nmea.at 0)== " $××××× ") // 見出しピッチロール { // 直接读取GNSS中の的ロール、ピッチ、ヨー position_time_ = STOD(nmea.at(2 ))。 roll_ = STOD(nmea.at(5))* M_PI / 180 。 pitch_ = - 1 *のSTOD(nmea.at(4))* M_PI / 180 。 yaw_ = -stod(nmea.at(3))* M_PI / 180。+ M_PI * 2 。 //ROS_INFO( "ロール:%F、ピッチ:%F、ヨー:%F"、roll_、pitch_、yaw_が); // 緯度と経度からGPGGA算出マップローカル座標系へ ダブル LAT = STOD(nmea.at(6。)); ダブル LON = STOD(nmea.at(7 )); ダブル H = STOD(nmea.at(8 )); geo_.set_llh_nmea_degrees(LAT、LON、H); }
// 変換元系の座標ベース・マップへの座標系 TFを:: tf_poseポーズ; TF :: poseMsgToTF(pose.pose、tf_pose); TF ::クォータニオンQ; q.setRPY(0、0、3.2277); // ベース座標系と原点マップは、角座標 TFを::変換(Q、TF ::のVector3( - tf_trans 28.11、10.79は、0)); // 基本マップ座標系の原点は、原点差座標 tf_pose = tf_transを.inverse()* tf_pose; TF :: poseTFToMsg(tf_pose、pose.pose)。
4.結果
上記のコードの完了がAutowareは4ノートコンテンツに応じて設定することができた後で、車がトラックに停止し、あなたが2Dせずに、直接場所を見つけることができるどんなには、推定値は初期位置を指定してポーズ。