ロボティクス学科で2021年後学期開講中のロボットプログラミングII用です.今回は、コンピュータビジョンライブラリの定番OpenCVをROSで使うためにcv_bridgeを用いたPythonプログラムを勉強します。サンプルのPythonプログラムではカメラから取得した画像のエッジを検出したり、指定した色領域を抽出しています。この記事は、以下のサンプルプログラムはROSチュートリアルと「ROSで始めるロボットプログラミング、著者:小倉崇、出版社:工学社」を参考にしました。(Python)サンプルプログラム(説明付き)このサンプルプログラムの概要を説明します。/camera/image_rawトピックにあるので、それをサブスクライブします。次に、callback関数では、トピックの画像の生データdataはsensor_msgs/Image型なので、それをOpenCVで処理できるようにcv:Mat型に変換します。OpenCVでの処理は、指定した色領領域を抽出するためにマスク画像を生成し、それと画像のビット毎の論理積を計算したり、画像のエッジを検出するために、カラー画像からグレースケール画像に変換し、その結果をウインドウで表示しています。詳細については、以下のソースコードをご覧ください。ROS2のsensor_msgs/Image型からOpenCVで処理適量にcv::Mat型へ変換する。画像配列のビット毎の倫理積席。マスク画像だけが抽出される。moments関数を使うためグレースケール画像へ変換。cameraソースコードの作成エディタを開き、上のプログラムをコピペしてcamera.pyというファイル名で~/catkin_ws/src/camera/cameraディレクトリの中に保存する。以下はgeditを使う場合。&ビルドROSにパッケージとして認識されるために、以下のコマンドでビルドする。--symlink-installrosrunコマンドで実行できるように実行権を与える。端末を3つ開き、以下のコマンドを実行する。1番目の端末:シミュレータの起動カメラの高さを低くしたいのでロボットモデルをhappy_miniではなくwaffle_piにする。Can)をロボットの前に挿入する。found”と出て実行できない場合は次のコマンドを実行する。~/airobot_ws/src/camera/camera/camera.py3番目の端末。teleop_keyboardハンズオン上の説明を参考にサンプルプログラムを実行して動作を確認しよう!「パッケージの作成」、「ソースコードの作成」、「ビルド」、「実行」を順番にする。Can)をロボットの前に挿入する。Canロボットをキーボードで操作してコーラ缶の方向に進んだり、その場回転して画像処理が行われていることを確認する。コーラ缶の手前で停止するプログラムを作ろう。カメラでは物体の距離が直接わからないので、コーラ缶の輪郭を検出し、その面積や外接矩形のサイズ[pixel]から推定する必要がある。コーラ缶のサイズはgazeboのGUIで簡単に調べることができる。コーラ缶を任意の位置において、それをロボットが探して近づき、手前で停止するプログラムを作ろう。カメラの位置が比較的高いので近づいてコーラ缶を見失う場合には、urdfファイルを変更して高さを変えるなど工夫しよう。勾配検出フィルタサンプルプログラムではエッジ検出にcanny関数を使用した。その他にも勾配検出フィルタとして、Sobel関数、Laplacian関数などがある。参考リンクのOpenCV-Pythonチュートリアルで調べて、サンプルプログラムを改変して違いを見てみよう。物体の輪郭抽出サンプルプログラムではコーラ缶の位置を推定するのに赤領域の重心を使った。正確にするには物体の輪郭を検出するfindContours関数がある。参考リンクで調べて輪郭を使って物体の位置を推定してみよう。コメントをキャンセルメールアドレスが公開されることはありません。人気記事ODE初級講座ホーム検索トップサイドバータイトルとURLをコピーしました。