以前の記事で、奥行きの情報を取得する深度センサーがついたデプスカメラ「Intel RealSense Depth C amera D435i」を使って物を認識させることができた。その続きといきたいところだが、思いのほか難しく成果が出なかったので、今回はCADで作ったアームロボットの3Dモデルを「Gazebo」という3DロボットシミュレーターでROSと連携して動かしてみたい。
かなり試行錯誤したので、ROSとGazeboの連携でトラブルに見舞われている人には役に立つかもしれない(笑)。筆者が引っ掛かった点しか書かないので、チュートリアルとしては役に立たないと思う。失敗集として読んでほしい。間違ったコードを載せると混乱のもとなので、最終的なコードをGitHubに載せた。
— きゅんくん (@kyun_kun) December 10, 2019
今回の流れ
今回の流れは(試行錯誤も含め)、
1.CADで3Dモデルを作り、stlを吐く(CADの使い方はここでは書かない)。
2.URDFというロボットの構造を記述するためのXMLのフォーマットでロボットの構造を書き、RVizというROS アプリケーションの3D視覚化ツールで表示する(URDFの書き方はここでは書かない)。
3.URDFがGazeboで表示できない。URDFではなくxacro(XML macroの略)で、まずはただの立方体を表示することにした。
4.イナーシャがないことが原因とわかり、立方体を表示できたが、なぜかプルプル震えている……。リンクとジョイントが地面にめり込んでいるのが原因と知り、修正した。
5.xacroでリンクひとつずつの表示・動作を試みることにした。
6.ジョイントが動いたが、なぜかチカチカしている……。イナーシャが適当すぎたことが原因と気づき、CADでイナーシャを表示して書き込んだ。チカチカしなくなった。
7.イナーシャを1桁間違えていたことに気付く。正しいイナーシャにしたら、ごちゃっと重力で下に落ちた。ジョイントも外れている。ジョイントの種類が問題とわかり、修正。
8.今度は「joint1_position_controller」という動かすためのトピックが出ているのに動かなくなった。ジョイントの種類を変えたときのリミットの値が間違っていたことに気づき、修正。
9.端末のコマンドではなくrqtというGUIソフト開発ツールで動かす。
10.モデルに色をつける(色の付け方はここでは書かない)。
と、まあ失敗だらけである。
今回はThinkPadではなく、Let‘snote CF-SVでデュアルブートしたUbuntu16.04を使っている。ROSのバージョンはkineticである。
この連載の記事
- 第310回 地方に移住したいが、東京にとどまるべきか
- 第309回 「マジック:ザ・ギャザリング」という深淵の入り口に立った。まだ底は見えない
- 第308回 大正製薬の内臓脂肪を減らす薬「アライ」買ってみましたレポ
- 第307回 新規事業の撤退を“負け”にしない方法
- 第306回 企業人としての事業・プロジェクトの終わらせ方
- 第305回 画像生成AIで自作キャラのジオラマアクスタができたぞ〜〜〜!!!
- 第304回 画像生成AIでオリジナルキャラのLoRAができたぞ〜〜〜!!!
- 第303回 私の”2年間目標”教えます
- 第302回 「好きな人にSIMは差せますか?」メンヘラとギャルとアイドルが“通信”についてガチで考えた結果【運営レポ】
- 第301回 人生を変える「2年間目標」の立て方
- この連載の一覧へ