myCobotでほんとうにmoveitする
意味深なタイトル
先日、myCobotでmoveitするというタイトルで記事を投稿しました。とりあえず動かして、とりあえず記事投稿しましたが「本当にこれで合ってるの? なんか違う気がする」ともやもやと気になってました。moveitについて調べ、先人の記事を片っ端から読んでいくと、あれ?全然違う。。。恥ずかしい。。。
良かった点をあえて挙げると、myCobotの公式のリポジトリにはまだmoveit対応されたものがありませんので、記事投稿することで「moveitで動かせた」実績が残せたことに意味があったと思います(なんちゃってなんだけど)。
とういうわけで、moveitのお作法に正しく従ったパッケージを作成しました。
パッケージのリポジトリ
こちらに置きました。使用方法などはreadmeを読んでください。
nisshan-x / mycobot_moveit
作成の裏側
moveitのお作法にしたがって書いたら動きました。
・・・だと話しが終わってしまうので、「moveit対応していないロボットアームをどうやって対応させたか?」を自分なりに書いてみたいと思います。
前提条件
今回のmyCobotは以下の条件が整っていました。このおかげでmoveit対応ができました。
- ハードウェアインタフェースが用意されている。
- URDFで書かれた3Dモデルが用意されている
どちらも自分で対応するのは骨が折れますので、揃っててラッキーです。
手順1. URDFの書き直し
公式リポジトリにURDFと3Dモデル(Colladaフォーマット)が用意されていますが、これを使わずにURDFを書き直しました。Rvizで表示するだけなら良いのですが、Gazeboで表示できる書き方になっていないです。あと、公式のURDFはリンクとジョイントが混ざってて正直「あかんー」とおもいました(笑)
(linkの名前や構造は全部変えました) pic.twitter.com/63uerBiPzi
— nisshan にっしゃん (@nisshan_) January 16, 2021
なお、なぜか公式のColladaファイル(dae拡張子)はGazeboで表示できませんでした。先にGazebo表示に成功したたいりょーくんのファイルを利用させていただきました。ありがとうございます!
手順2. moveitのsetup_assistant
URDFができたので、moveitのsetup_assistantを立ち上げて読み込みます。やり方はやはりmoveit公式のチュートリアルの通りです。前回なんちゃって対応だったので、今回は入念に読みました。
手順3. HardwareInterfaceの記述
moveitはHardwareInterfaceという実機を抽象化するコンセプトを取り入れており、それゆえに様々な会社のロボットアームやオリジナルアームを制御することができます。また、前述のGazeboといったPC内のシミュレータと実機が同じインタフェースで切り替えができるようになっています。
このHardwareInterfaceやros_controlの使い方がさっぱり理解できず、途方に暮れていたのですが、 @MoriKen さんの記事 Controller と HardwareInterface との間の処理の仕組み(1. ロボットモデルの定義と登録) のおかげでなんとか理解し、組むことができました。srcの下のコードを見ると分かるのですが、全部で100行にも満たないです。HardwareInterfaceさまさまです。
完成
ラズパイやAI本で有名なからあげさんが私のパッケージを使ってくださいました!!!
(しかもデバッグさせてしまった…)
#myCobot @nisshan_ さんのリポジトリでMoveIt制御できた! pic.twitter.com/uCHCbKu8gb
— からあげ (@karaage0703) January 25, 2021
最後に反省: 前回、なぜ間違えたのか?
myCobot公式のpythonスクリプトの中に、アームの関節の角度を指定して動かすROSノードがあります。このノードがjoint_state
をsubscribeしているのを見て「これでいいじゃん」と無理矢理合わせてmoveitを動かしてしまいました。joint_state
は本来アームの状態を示すトピックなので「指示する用途には使ってはいけない」ですね。良く調べもせずに現物合わせで作ってはいけない、と反省です。
参考
Author And Source
この問題について(myCobotでほんとうにmoveitする), 我々は、より多くの情報をここで見つけました https://qiita.com/nisshan_/items/304cc8e1a2da7c2bebad著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .