open-rdc / orne-box

Platform hardware for autonomous robot
BSD 2-Clause "Simplified" License
29 stars 20 forks source link

3DLiDARに関する検討 #93

Closed yasuohayashibara closed 10 months ago

yasuohayashibara commented 10 months ago

3DLiDAR(R-Fans-16)に関して検討した. 長距離まで精度高く計測できることは望ましいが,姿勢を正しく得られるなど他の要因も揃っていないと,かえって問題が生じるかもしれないと感じた.

yasuohayashibara commented 10 months ago

まず,現在ORNE-box3は取り付け高さ0.4mに対して計測距離200mであるため,

ピッチとロールの1degのずれで上下方向に3.5mの誤差

が発生する.

平坦な場所で水平の距離を計測していた場合,地面を計測しないために要求される

角度誤差は0.1deg程度

であり移動ロボットでは困難な精度となる. ちなみに,計測距離30mのTop-URGの場合,取り付け高さが0.4mとすると許容される角度誤差は0.7degとなる.

遠方の距離がどの程度自己位置推定に関与するかを確認していないが,これも使用して自己位置推定しているとすると誘拐を生じさせる要因になると思われる.

これらの結果から,以下のどちらかが必要であると考える.

1)3Dで自己位置推定を行う 2)計測する距離を短くする(パラメータで変更可)

ただし,2)の解決法は公園内など遠くにしか計測できる対象がない場所で問題が生じるおそれがあるため,1)の解決法が最適であると考える.ただし,林原自身は1)を行ったことが無いので,果たしてそうなのかは確信は持てない.

yasuohayashibara commented 10 months ago

次に水平方向0.18degであるが,2000点のデータを収集するため,自己位置推定には過剰であると考える.これは,

1m先で 3.14mm 10m先で  31.4mm 100m先で 314mm

の間隔で計測することになる. おそらくはこの1/10でも問題なく自己位置推定できると考える. 確率的に計算するため,建物や木など大きなランドマークをある程度計測できれば,それで十分と思われる.

参考までに,Turtlebot3のLiDAR(LDS-01)の間隔は1degである.

現在,1分間に320,000点(2,000 x 16 x 10)のデータを取得しており,それらを計算量の多い三角関数を使用してポイントクラウドに変換している. さらに,pointcloud_to_laserscanで再度2DLiDARの距離に戻していたりもするが,これを最大320,000点の点群に対して行うのはかなりの計算能力を要求すると思われる. https://wiki.ros.org/pointcloud_to_laserscan

データの間引きは計測直後に行うことが望ましいが,rfans_driverにはそれを行うパラメータは無い. ちなみに,urg_nodeはデータを間引きするskipというパラメータが用意されている. https://github.com/ros-drivers/urg_node

とりあえず,この間引きの機能は実装したほうが良いと考える.

yasuohayashibara commented 10 months ago

屋内を走行させてrosbagを取得したが,3分15秒程度で2.75GBであった. 平均14MB/sである.

ちなみに,rfansは以下2種類のポイントクラウドを出力しているが,2)の方がデータ量が少ないので,こちらを使用したほうが良い. rostopic bwで調べたbandwidthも記載する.

1)rfans/rfans_driver/surestar_points 8.9MB/s 2)rfans/surestar_points 6.2MB/s

image

yasuohayashibara commented 10 months ago

rfans_driverのソースコードを読んでみたが,velodyneがnodeletを採用しているのに対して,こちらは採用していないので,driver_nodeから出力されるpacketがパブリッシュされ,その分の帯域を圧迫していると思われる. さらに,calculation_nodeでポイントクラウドに変換して,さらにcloud_processでデータ形式を変換しているように見られる. 実機を用いてrqt_graphで確認する.

yasuohayashibara commented 10 months ago

上記に記載したように現在は以下のような処理がなされている.

rfans_driver -> calculation_node -> cloud_process

ただし,calculation_nodeですでにsensor_msgs/PointCloud2になっているので,このままpointcloud_to_laserscanに入力することが可能である. 点群を整形してくれているようなところはありそうであるが,処理が多くなるのと通信の帯域を圧迫するので,有る場合と無い場合を比較した.

結果的に,cloud_processで2%程度CPUを消費しているだけであったが,ネットワークの帯域も考えるともっと影響が大きいかもしれない.

有る場合 rfans_driver -> calculation_node -> cloud_process 231221_with_cloud_process

無い場合 rfans_driver -> calculation_node 231221_without_cloud_process

yasuohayashibara commented 10 months ago

point_cloudのデータは以下でほぼ安定している.

rfans/rfans_driver/surestar_points 8.8MB/s

これを含むrosbagのデータは192秒(3分12秒)で1.66GB

yasuohayashibara commented 10 months ago

未解決の部分もあるがほぼ検討を終了して,rosbagを取得しながらでも安定して動作することを確認したのでissueを閉じます.