近年、 自動化技術の発達や少子高齢化による人手不足により、人とロボットが協働で動く例も増えてきており、 人間と協働で働くロボットによる自動化技術が注目されている。 ロボットの自動化のためには、自動で周囲を認識し、正確に動作を行う必要があるが、 周囲の環境が変われば、使用するパラメータも変化する。特に屋外で動作させるには、 そのパラメータの数は無数に増える上、実機で動かせるかどうかはやってみなければわからない例が多い。 そのなかで、人々が普段使っているあるがままの実環境(リアルワールド)における、自律走行技術の進歩を目的 とした「つくばチャレンジ」が毎年茨城県つくば市で開催されている。この「つくばチャレンジ」への参加のための自律走行システム へ適切なパラメータを与えるためのツールを開発する。
ロボットに自律走行させるには、どの経路を走行させるかという情報を ロボットに与える必要がある。 この経路の情報をウェイポイントと呼んでいる。 実際の走行経路と、ウェイポイントを可視化すると 図\ref{fig:waypoint_line}のようになる。
つくばチャレンジに関しても、自律走行を行うために あらかじめウェイポイントを作成する。 このウェイポイントによって、ある程度の経路を決定するが、 動的な障害物に関しては回避が必要なため、 ロボットが経路上を走るとは限らない。 例えば、人や自転車やコーンなどの動的な障害物が 経路上に現れた場合は、図\ref{fig:waypoint_and_driving_line}の例のように経路が変化する。
ロボットがウェイポイント上を必ず走る訳ではないが、 基本的にはウェイポイントを追従するので、 できるだけ通路の中央へウェイポイントを設置する。
他にも、細い道や人が増えるエリアについては できるだけ通路の中央に経路を設定したり、 細かくウェイポイントをうつことで 人の多いエリアを避けるなどの注意が必要となる。
自律走行システムによって用意するべきデータが変わるため、 各チームが独自のウェイポイント作成ツールを開発している。
これまでに開発したウェイポイント作成ツールでは、実機調整を繰り返し行うことを前提としていなかったため、 調整と実機テストの切り替えに時間を要し、 ウェイポイントの準備を十分に行えなかった。
本研究では、自律走行のためのシステム開発と実験走行を 円滑に行うため、実機での調整に適したウェイポイント作成ツールの開発を行った。 ここでは、ウェイポイント作成ツールを 自律走行のシステムに直接組み込むことにより、 ウェイポイントの修正と実機テストの切り替え時間を可能な限り減らし、 ウェイポイントの準備を効率的に行えるように開発を進めた。
この章では、開発したツールのシステム構成、 ウェイポイント作成・調整方法、外観・実装機能ついて述べる。
システムはROS2を使用して開発した。ROS2はROSを改良したものであるが、 2021年時点ではROSからROS2への移行はまだ進んでおらず、ROSの利用者が多い。 ROSはRobot Operating Systemの略であり、 ロボット向けアプリケーションの開発者のために作られたミドルウェアである。 ロボットをハードウェアとしてアプリケーションを開発するために 便利なライブラリやツールを提供するため、つくばチャレンジでも活用例は多い。 ROSは、大規模なプログラムを機能ごとに分担して開発するのに向いている。 プログラムを複数の実行可能ファイルに分けて開発できるという利点があり、採用している。 一つのプログラムの単位をノードと呼び、 ノード間はROSの提供する通信方式(トピック通信)で通信を行う。 ウェイポイント作成ツールを含めたシステムの構成を図に示す。
ウェイポイントの位置やパラメータの微調整と、 実機を使った実験の切り替えを行いやすくするため、 ロボット周辺のウェイポイントを優先的に編集可能なツールを作成した。
つくばチャレンジのような広大なマップでの 自律走行を考えたとき、ウェイポイントは図\ref{}のように環境地図上に無数に設置されている。
環境地図上に存在するウェイポイントとロボット位置
これに対して、走行中に使用するウェイポイントはロボット周辺のみであるため、 ロボット周辺のウェイポイントのみを図のように表示する形にした。 また、ロボットの方向に合わせてウェイポイント位置を回転させることで、 編集したいウェイポイントの位置がオペレータにも直感的に理解できる形とした。
ウェイポイント描画方法
システム構成で述べたように、ツールは常にロボット位置情報を受け取り続けているため、 オペレータがロボットを移動させれば、それに合わせてウェイポイントは移動する。 従って、微調整を行いたいエリアに直接ロボットを動かして向かったあと、 その場でロボット周辺のウェイポイントの修正が行える。
ウェイポイントの修正機能に加え、 ROS2のモジュールとして自律走行システムに組み込むことで、 ウェイポイントの作成・修正と、新しいウェイポイントでの 実験の 切り替えがスムーズに行える構成とした。
ツールの外観を図\ref{fig:appearance}に示す。GUIはQtを使用した。 ツールの入力インターフェースはロボットのベースへ接続したゲームパッド・キーボードである。 画面左側の文字列は、最も近い位置にあるウェイポイントが持つ情報である。 背景の赤い部分は、環境地図を描画したものであり、ロボットが環境地図上の どのあたりにいるのか知るために使用する。 下の入力欄は、パラメータ入力欄であり、 ウェイポイントに新しいパラメータを設定する際に使用する。
外観
ゲームパッドを用いて、ウェイポイントの設置・移動・削除を行う。 ゲームパッドを使用するため、 パラメーについては、 文字列や数字を入力する必要があるため、 キーボードを使用する。
つくばチャレンジの実験中、キーボード操作によるタイムロスが大きいと判断したため、 キーボード入力が必須なパラメータ入力以外はすべて ゲームパッドに割り当てた。
主に実装した機能を以下に示す。
図\ref{part_map}のように、ロボット周辺の環境地図を抜き出してツールへ表示する。 本研究室の環境地図は画像であるため、 ロボット位置周辺の環境地図を切り抜き、ロボットの方向に合わせ回転させて描画する。 環境地図は画像で画像座標系を使用していることに対して、 ロボット位置はロボット座標系であり、座標系が異なるため、 以下の変換が必要である。
ただし、(xroi,yroi)、 (x'robot、y’robot})、 (WMAP}、HMAP)、(Wroi, Hroi)、 MPP はそれぞれ、 画像座標系のロボット周辺画像の左上頂点座標、 ロボット座標系におけるロボットの位置、 描画する環境地図のサイズ(ピクセル単位)、周辺エリアの 画像サイズ(ピクセル単位)、 MPP(meter per pixel)は 1 ピクセルあたりの長さ(m 単位)である。
ロボット周辺エリアの各座標
ウェイポイントの位置は、 環境地図の中心を原点としてロボット座標系を使用している。 周辺エリアへ描画するためには 絶対座標からロボットから見た相対座標へ変換する。 変換式は以下である。
ただし、(x,y)、 (WMAP、HMAP)、 MPP、 yaw、 (x’waypoint、y’waypoint)、 (x’robot、y’robot)、 はそれぞれ、 描画する際の画像座標系のウェイポイントの座標、 描画する環境地図のサイズ(ピクセル単位)、 MPP(meter per pixel)は 1 ピクセルあたりの長さ(m 単位)、 ロボット座標系におけるウェイポイント位置、 ロボット座標系におけるロボットの位置 である。
ウェイポイントは、
の2つの追加方法を実装した。 直線上にロボットを走らせる場合は、2点を指定し直線上に並ぶように追加する。 ウェイポイントを追加する際、 設置する位置を以下の2つの座標から選択できる。
1の座標は、 現場で実験的にウェイポイントを作成したい際に使用する。 ロボットをマニュアル走行させながら、 ロボット位置にウェイポイントを設置していくことで、 実験用の簡易的なウェイポイントを作成できる。 自己位置推定モジュールからリアルタイムで得られるロボット位置の精度は、 0.25mの分解能であるため、ロボット位置に打ち込んだウェイポイントが0.25m離れた位置に 設置される可能性がある。 そのため、あくまで簡易的な実験に用いることを想定している。
2の座標は、 従来のウェイポイント作成と同様に、 経路データ上にウェイポイントを設置することを想定している。
パラメータの変更は、ツール下の入力欄から行う。
描画エリア中心に最も近いウェイポイントに付与されているパラメータを、 図\ref{fig:param_show}のように表示する。
パラメータ表示例
図\ref{fig:zoom}に、0.1、0.05、0.025、0.01の4つのパラメータで描画した例である。 単位は、1ピクセルあたりの長さ[m]である。 このパラメータは自由に設定可能で設定ファイルへ記述する。
倍率0.1[meter per pixel]
倍率0.05[meter per pixel]
倍率0.025[meter per pixel]
倍率0.01[meter per pixel]
自律走行モジュールの局所的経路計画は ポテンシャル法を用いており、 ウェイポイントの間隔によって生成する経路が変化する。 広い間隔で打つとウェイポイントの引力が弱まり、 障害物回避が優先される一方、 狭い間隔で打つと、ウェイポイントの引力が強まり、 設定した経路上を走りやすくなる。 よって間隔はエリアごとによって異なるため、 表示範囲の拡大縮小機能を実装した。
選択したウェイポイントに対して、位置やパラメータ修正を行う。 選択したウェイポイントは、 図\ref{fig:selectone}のように緑色の点として描画される。
ウェイポイント選択例
図\ref{fig:kinbou}心に一番近いウェイポイントを青い点として描画し、 ゲームパッドのボタンを押すことで選択できる。
選択候補となるウェイポイント
選択する際の基準となる中心位置は、 基本的に実際のロボット位置を示しているが、 ゲームパッドのスティック入力により移動できる。
図\ref{fig:selecrtmulti}にグループ選択の例を示す。 緑色の点として描画されているウェイポイントが選択されている。
グループ選択例
実験中に広い範囲のウェイポイントに修正を加えたいケースで使用する。 ウェイポイントには読み込む順番を決めるインデックスが振られているため、 選択開始位置のインデックスと終了地点のインデックスまでのすべてのウェイポイントに 対して位置やパラメータの変更が行える機能を実装した。
選択したウェイポイントを上下左右方向へ10cm単位で移動させる。
ウェイポイントから半径r[m]以内を走行可能エリアとする。 通路を外れるべきでないエリアに関しては、このパラメータを小さくすることで対応する。 通行可能領域の設定例を図\ref{fig:travelable}に示す。 マゼンタで塗りつぶしている領域が、通行可能領域である。
走行可能領域の設定例
図\ref{fig:travelable}のエリアの実際の写真が図\ref{fig:semai}である。 図\ref{fig:semai}のように、通路がせまいエリアでは、 障害物回避の際に通路から外れる場合がある。 それに対応するため、走行してもよいエリア設定を行う際に使用する。
つくばチャレンジにおける狭い通路の例
障害物情報の設定例を図\ref{fig:obs}に示す。 青色のエリアは障害物として扱い、走行経路の候補のうち青色のエリアへ侵入するものを外す。
障害物情報の追加例
実環境での実験時、養生中の芝生や、 車道すぐ側の草むらなど、ロボットの走行が好ましくないエリアや、 植林のために穴のあるエリアなど、 ロボットに自動で走行可能か判別がつきづらいエリアが存在する。
通行可能領域エリアは、あくまでウェイポイントに半径数m以内が通行可能か という情報のみを与えているため細かなエリア設定が十分に行えない。
そのため、通行可能領域上に障害物情報を上乗せすることで、 細かな領域設定を行う。
今年度のつくばチャレンジにおいて、 ウェイポイント作成ツールの完成したタイミングが 本番の一週間前であったため、 公園内のすべての経路のウェイポイントを用意することができなかった。 よって、約2.0kmに渡る経路のウェイポイントを作成し、 ウェイポイントの数は、4457個のウェイポイントとなった。 この4457個のウェイポイントに対して、1日あたり約5時間が自由に走行できる実験走行日を2日間と、 本走行の午前中の1時間を使用し、調整と実験を行った。
ウェイポイント修正そのものは数分で行えた。 デバッグも含めていくつかのパラメータを設定して実験を行うため、 繰り返し実機調整とパラメータ調整が必要であったが、 従来のツールよりもウェイポイントの作成と修正の時間は短くなり、 最低限の時間で必要な設定を行えた。
約2日間で、実機での実験を含めたウェイポイント作成を行うことができたため、 最初の目的であった "ウェイポイントの位置やパラメータの微調整と、 実機を使った実験の切り替えを行いやすいツール"の開発はできたと考えられる。
ただし、つくばチャレンジには実験日と実験時間が決められており、 すべてのウェイポイントを現場で微調整していく方法では、 今後走行範囲が広くなった場合に限界があると思われる。
今回のツール開発のアイデアとして、 環境地図を頼りにした正確なウェイポイント作成は難しいため、 ある程度は大まかに作成しておき、 現場を見て修正するという方法をとっていた。 しかし、今後は 路面画像などの視覚的な情報を組み合わせたり、 シミュレーション機能を実装するといった工夫を行うことで、 現場から離れた場所でも調整可能なツールを開発し、 現場での調整を限りなく減らすことで、 より広いエリアでの自律走行の事前データ作成に対応したい。