ASCII倶楽部

このページの本文へ

週替わりギークス 第158回

アームロボットの3DモデルをROSと連携したら、問題が次々と発生した

2020年01月21日 17時00分更新

文● きゅんくん 編集● 上代瑠偉/ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

Gazeboに表示したロボットの3Dモデルを、ROSを通じてrqtを使って動かせた。

 以前の記事で、奥行きの情報を取得する深度センサーがついたデプスカメラ「Intel RealSense Depth C amera D435i」を使って物を認識させることができた。その続きといきたいところだが、思いのほか難しく成果が出なかったので、今回はCADで作ったアームロボットの3Dモデルを「Gazebo」という3DロボットシミュレーターでROSと連携して動かしてみたい。

 かなり試行錯誤したので、ROSとGazeboの連携でトラブルに見舞われている人には役に立つかもしれない(笑)。筆者が引っ掛かった点しか書かないので、チュートリアルとしては役に立たないと思う。失敗集として読んでほしい。間違ったコードを載せると混乱のもとなので、最終的なコードをGitHubに載せた。

今回の流れ

 今回の流れは(試行錯誤も含め)、

 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である。

カテゴリートップへ

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!