はじめに
こんにちは、しがない高校生をしているBasalte(ばさると)と申します。
今日はROS 2 humbleを使ってマニピュレーションをした話です。
粗いところもありますので、適宜指摘いただけると幸いです。
宣伝
普段はPyLoT Roboticsというチームを立ち上げ、RoboCup@Home Eucationという大会に出場しました!
もしよければこちらのリンクも合わせてご覧ください!!
構成
Openmanipulator-xのグリッパーの上にRealSenseを取り付け、画像認識と物体把持を完結できるようにしています。
【MikataArm 6DOF製作マニュアル(draft)】(6/n)
— Yoshihiro Shibata (@shiba_8ro) April 12, 2024
グリッパーの製作①(サーボID17, Link7~Link9)
Link7~Link9サブアセンブルに含まれるパーツを3Dプリントし、ウルトラサートの熱圧入や滑り止めの装着を行います。https://t.co/aOR7T2zjga pic.twitter.com/LQ6j1DgDNz
システム
システム構成です。
Openmanipulator-xとRealSenseを扱うノードをそれぞれ立て、物体認識結果からアームの位置を決定して推移するプログラムです。
使用ライブラリはこちら
いずれも少し改造して使っています。(フォークして色々いじってます)
使用ノードはこのようになっています。
realsense-ros + Detic(+ Clip) + 逆運動学(自作) + DynamixelSDK
raelsenseからのデータはimageとdepthが同時に送信できるrgbd topicを使用しています。使い方などはこちらの神記事をご覧ください。
Detic+Clipでの画像認識
Deticで汎用的な物体認識を行い、どんな物体が来るかわからない未知環境ではClipを追加して認識物体をチューニングする機能を備えています。
Clipは画像と文章との類似度を出力することができ、Deticでbottleとしか出てこないものでも、そのboundingboxの中身をClipに入力して
"A long, thin red metal cylinder","Water in a blue package"
この二つの文章との類似度をとることによって、コーラか水かを見分けることができます。これにより掴むべきものをより簡単に認識でき、チューニングも簡単に行うことができます。(処理は重いです)
自分はOUXTのDeticパッケージを改造してRealSenseからのDepthデータも受け取って3次元座標を計算してtopicで出力しています。
逆運動学
最初にロボットアームの各モーターの角度から順運動学を計算し、カメラからの3次元座標をアームの根本からの座標に直します。次にアームの根本から物体の座標を逆運動学(自作)関数に投入し、モーターが取るべき角度を計算して出力します。
本来ならオブジェクトの点群からEndEffectorが取るべき角度も計算したいのですが、使用しているロボットアームに十分な自由度がないため難しいです。
(取得している動画が手元になかったのであとで追加します!すいません!!!)
まとめ
以上のようにロボットアームが物体を取得するプログラムを組むことができます。
今後実際のコードもこちらで紹介したいと考えているので、更新をお待ちください。
今後も改造のしようがあるため、頑張っていきたいです。
また動作がカクカクしているため、もっと滑らかにモーターの動作の経過を調節するコードも書けたらいいなと考えています。