ROS ロボットアーム 3D シミュレーション

新しいデバイスを設計するときは、全体の外観、サイズ、アセンブリパラメータ、製造可能性、有限要素解析などを判断するために 3D モデルを作成する必要があります。しかし、これらのモデルは多かれ少なかれ仮想的なものであり、手動で移動させることができます。しかし、ロボット、自動運転車、ドローンを設計しているとします。製造前に、制御システムの準備を完了して、制御システムがどのように動作するかを完全に理解することが最善です。これは、適切な部品を選択する際にも非常に役立ちます。過剰に設計するのではなく、設計を最適化できます。

推奨 NSDT ツールThree.js AI テクスチャ開発キット -  YOLO 合成データ ジェネレーター -  GLTF/GLB オンライン編集 -  3D モデル フォーマット オンライン変換 - プログラマブル 3D シーン エディター -  REVIT エクスポート 3D モデル プラグイン -  3D モデル セマンティック検索エンジン

これを達成するには、さまざまなツールを使用できます。本当に何かを理論的にテストし、多くのカスタム数学モデリングを実行する必要がある場合は、MATLAB Simulink が最適な選択肢になります。制御システムの視覚化を容易にし、多くの機能を備えています。MATLAB の範囲は本当に無限です。しかし、それは高価なソフトウェアであり、不格好なソフトウェアであり、場合によっては非常に複雑です。

別のオプションもあります。Gazebo/Rviz を使用したロボット オペレーティング システム (ROS)。使用されるフレームワークは ROS で、シミュレーション ツールは Gazebo/Rviz です。この便利な機能は、(シミュレーション以外に) 作成した ROS ワークスペースを取得し、いくつかの小さな変更を加えてハードウェアに直接統合できることです。ただし、ROS 環境を理解し、少し慣れる必要があります。

要約すると、どちらも良いです。ただし、オープンソースで安価なものは 1 つだけです。

ROS を使い始めるほとんどの人は、Panda/UR/Kuka Robots など、すでに 3D モデルが含まれている利用可能なパッケージを使用します。これらのパッケージは主に既存のロボット アームをシミュレートするために使用されます。ただし、独自のデザインを公開して、それが運動学アルゴリズムでどのように動作するかを確認し、衝突をチェックしたい場合は、デザインを Unified Robot description Format (URDF) ファイルに変換する必要があります。Solidworks を使用してこれを行う方法と、MoveIt を使用して ROS 環境でファイルを使用する方法を見ていきます。そしてレヴィッツ。

ROS と Rviz 部分には ubuntu を、モデリングには Solidworks をインストールする必要があります。私はSolidworks 2018とUbuntu 18.04をROS melodicとともに使用しています。

はじめましょう。

1、ソリッドワークス

この記事を読んでいる人は、すでに Solidworks でロボット アームを設計していると思います。MoveIt! で提供されるソルバーは、主に 6 自由度のロボット アームによってサポートされています。したがって、簡単にするために、6 自由度のアームをシミュレートします。

まず、Solidworks URDF Exporter プラグインを Solidworks にインストールする必要があります。ここからurdf エクスポータをダウンロードします。開いているすべての SolidWorks ウィンドウを閉じて、インストールします。SolidWorks プラグインを開き、URDF エクスポーターをアクティブにします。

一部のバージョンでは、エクスポーターは [ファイル] > [URDF へのエクスポート] にあり、一部のバージョンでは、エクスポーターは [ツール] > [URDF へのエクスポート] にあります。

シンプルな小型の3Dプリントロボットモデルを作りました。エンドエフェクターは現在オープンエンドです。

上の写真には6つのジョイントが示されています。このタイプの設計では、一般に、リンクごとに異なるサブコンポーネントを使用することが適切な設計慣行となります。この場合、コンポーネント内のリンクごとに異なるサブコンポーネントを使用する必要があります。デザインツリーは次のようになります。

ご覧のとおり、各リンクには独自の子コンポーネントがあります。サブアセンブリを使用する場合は、サブアセンブリを剛体にします。ただし、私の経験では、これらのサブアセンブリをパーツ ファイルに変換する方が良いでしょう。URDF コンバータはまだ完全ではないため、異常なエラーが発生することがあります。以下の図に示すように、サブアセンブリ内のパーツが URDF に変換した後にフローティングになるという異常な問題があります。したがって、サブアセンブリをパーツ ファイルに変換することが最善です。

次に、連携です。すべてのジョイントは回転ジョイントであるため、この場合に使用される合致は一致する同心の合致のみです。ベース ジョイントの場合は、ピンで固定するか、一致合致を使用してアセンブリ平面に拘束することができます(ベース リンクのメイン平面を使用)。下の図、デザイン ツリーの「合致」セクションを参照してください。

基本リンク平面とアセンブリ平面 (黄色のボックス) の間には 3 つの一致合致があり、続いて 6 つの同心ジョイント、各リンクの各ジョイントに 6 つの一致ジョイントがあります。上の図で各ジョイント間の関係を観察できます。これは 6 DOF ロボットなので、ジョイントが 6 つあります (ただし、通常の命名規則は 0 ~ 5 です)。すべてのコンポーネントを組み合わせたら、色について考えなければなりません。私の経験では、それがアセンブリ内のパーツである場合、URDF はパーツ レベルで指定された外観になります。したがって、リンクされたすべてのサブアセンブリがパーツ ファイルに変換されて組み立てられた後、アセンブリ内の各ジョイント パーツに外観が追加されます。唯一の欠点は、各リンクが単一の色しかないことです。ただし、機能レベルのアセンブリに色を追加して、これを試してみることはできます。

それでは実際にURDFファイルを生成してみましょう。私の Solidworks 2018 SP 0.1 では、[ツール] > [URDF としてエクスポート] にあり、一部のバージョンでは [ファイル] > [URDF としてエクスポート] にあります。いずれの場合も、以下に示すような [プロパティ マネージャー] ウィンドウが表示されます。

明らかに、ベース以降の後続のすべてのジョイントはベースの動きに依存し、リンク 1 以降のすべてのリンクはベースとリンク 1 の動きに依存します。これは開いた運動連鎖です。したがって、エクスポーターで定義する必要があります。さまざまな手順は次のようになります。

ここで行うことは、コンポーネント間の関係を定義することです。したがって、1 でわかるように、ベースに Link_0 という名前を付け、アセンブリ内でベースのパーツ/サブアセンブリを選択しました。モデル内のベースをクリックするだけで、それを識別できます。次に、サブリンクの基本数を選択する必要があります。これはキネマティック チェーンであるため、サブリンクは 1 つだけであるため、入力は 1 です。選択すると、Link_0 の子エンティティが下に表示されます。2(二輪車の場合)を選択するとこうなります。

サブリンクをクリックすると、[プロパティ マネージャー] ウィンドウが上の 2 番目のウィンドウに切り替わります。前と同様に、リンクに名前を付け、モデルを選択し、サブリンクを選択します。唯一新しいのはジョイントに名前を付けることです。すべてのリンクの後続のウィンドウはすべて同じに見え、最後のリンクに入った後の最後のウィンドウは、図の 3 番目のウィンドウのように見えます。このウィンドウでは、運動連鎖とリンク間の一般的な関係を表示できます。完了したら、「プレビューとエクスポート」ボタンをクリックします。これにより、必要な参照ジオメトリが生成されます。座標系や回転軸と同じです。生成後は「Solidworks Assembly to URDF Exporter」のようなウィンドウが生成されます。

このウィンドウは URDF を生成します。ただし、その前に、いくつか確認する必要があります。したがって、今はこれを最小限に抑えるようにしてください。

MoveIt! と ROS を使用する場合、従う必要がある規則があります。規約の詳細については、公式 ROS ガイドの セクション 1.1を参照してください。ただし、基本的には、Z 軸が上を向き、X 軸が前を向いていることを意味します (ジョイント 0 の角度が 0 の場合、リンク 0 が向いている方向になります)。URDF エクスポーターによって生成された座標系と軸を見ると、次のようになります。

原点は、Rviz/Gazebo のグローバル座標系におけるロボット アームの配置位置をグローバルに定義します。Solidworks では、これはアセンブリのメイン座標系と自動的に位置合わせされます。一般的に言えば、私はロボットがシミュレーション環境の中心にあることを好みます。これを実現するには、コンポーネントの原点がロボットのベースの中心にある必要があります。しかし、多くの場合、そうではありません。したがって、URDF モデルの Origin_global をベースの中心に移動する必要があります。これを行うには、以下に示すように、点を投影する「面中心」方法 (またはモデルに適した方法) を使用して点を投影する必要があります。

ここから Rviz/Gazebo 環境が生まれることを願っています。ポイントを作成し、Origin_global ポイント フィーチャを編集して、作成したポイントを座標系の原点として指定します。これを行う前に、作成したポイントをデザイン ツリーの Origin_global の上に移動することを忘れないでください。座標系の位置決めが完了しました。さて方向性。モデル内のエッジを使用して軸の方向を定義できます。ただし、URDF ジェネレーターは以下のようなスケッチを生成します。これは、座標系参照として使用するのが簡単でエラーがありません。あとは原点を定義するだけです。しかし、座標系を使用してロボット アームの初期位置を正しく定義することができます。

座標系を調整した後、軸が回転/プリズム ジョイントと適切に位置合わせされていることを確認してから、表示されるダイアログ ボックスを閉じます。変更した構成を保存するかどうかを尋ねられますが、これは「はい」と答える必要があります。

次に、設定を変更せずに URDF エクスポータを再起動し、前と同様に、[プレビューとエクスポート]をクリックして、Solidworks Assembly to URDF Exporter ウィンドウを表示します。これは初心者向けのチュートリアルなので、まだ何も変更する必要はありません。「次へ」をクリックすると、このようなウィンドウが表示されます。

これにより、リンクされた慣性データ、衝突データ、テクスチャが表示されます。しかし、それについては今は議論したくありません。「URDF とメッシュをエクスポート」を押すだけです。そして、保存ダイアログボックスが表示されます。アセンブリに xxxx.SLDASM という名前が付けられます。これを削除してください。そして、名前に数字やドットのないものに置き換えます。アンダースコアを使用できます。たとえば、robot_arm_one は良い名前です。命名規則は、ROS の命名規則に従う必要があります。一般に、小文字とアンダースコアを使用し、数字で開始または終了しないことが最善の名前付け方法です。

フォルダーに保存すると、フォルダーは次のようになります。

フォルダー全体を外部ドライブに保存して ubuntu で使用することも、同じ PC をデュアル ブートで使用している場合は、保存場所に移動するだけです。URDF の生成が完了したので、MoveIt を介して ROS でそれを使用する方法を見てみましょう。

2.Ubuntuの場合

まだインストールしていない場合は、ubuntu を起動して ROS をインストールします。kinetic kame は現在かなり古く、melodic はほぼすべてをサポートしているため、melodic morenia を使用することをお勧めします。テレキネシスも使用できます。これは、ROS1 を使用する moveit 1 と、ROS2 (Foxy Fitzroy) を使用する moveit 2 用ですが、ここでは説明しません。

したがって、ROS をインストールするには、このチュートリアルに従ってください。次に、このガイドを使用してMoveIt! をインストールします。モーションプランニングフレームワーク。インストールプロセスは非常に簡単です。Ctrl+Alt+T を使用してターミナルを開き、チュートリアルからコマンドをコピーして貼り付けます。この操作を実行するには、良好なインターネット接続が必要です。

MoveIt と ROS をインストールすると、ホーム ディレクトリに ws_moveit (またはワークスペースに付けた名前) フォルダーが作成されるはずです。Solidworks から生成したフォルダーをコピーし、/src/ に貼り付けます。この時点で、ターミナルを開いて次のコマンドを実行します。

Cd ~/ws_moveit

Catkin build

これにはしばらく時間がかかり、次のような結果が得られるはずです (パッケージの数は src フォルダー内のフォルダーによって異なります。私の場合は他に 8 つのモデルがありました)

その後、入力してください

source devel/setup.bash

これにより、先ほど構築したフォルダーが取得されます。次に、MoveIt セットアップ アシスタントを使用します。これにより、構成ファイルの作成 (複雑な作業になります) がはるかに簡単になります。同じ端末を使用して、次のコマンドを入力します。

roslaunch moveit_setup_assistant setup_assistant.launch

これにより、solidworks で作成したばかりの URDF を構成するために使用できるウィンドウが表示されます。

URDF をロードするには、「参照」ボタンをクリックして に移動します ws_moveit/src/<urdf_folder_name>/urdf 。

中には .csv ファイルと urdf ファイルがあるはずです。urdfを選択して開きます

次に、「ファイルのロード」をクリックします。

エラーが発生した場合は、ファイルが構築およびフェッチされていないこと、および命名規則が間違っていることが原因である可能性があります。読み込み中にエラーがないか確認してください。

ロードされると、モデルは正しく表示されるはずです。このような色 (該当する場合)。

次に、すべての関節条件、エンドエフェクター情報などを段階的に設定する必要があります。

「自己衝突」タブに移動します。クリックして衝突マトリックスを生成します。このような表が表示されるはずです。

これにより、競合する可能性のあるリンクがチェックされ、競合しないリンク、または競合の可能性が最も低いリンク ペアが無効になります。たとえば、ベース リンクとリンク 1 の間で競合が発生する可能性は非常に低いため、これら 2 つのリンク間の競合を安全に無効にすることができます。一般的に、隣接するリンク同士は衝突しませんが、例えばエンドエフェクターとベースなどは衝突する可能性があります。したがって、これらに対して衝突検出が有効になります。マトリックス表示に切り替えて、より鮮明な画像を取得できます。

次に、仮想ジョイントに進みます。ロボットのベースを固定する必要があるため、このセクションではベースと外部フレーム (Rviz またはガゼボ) の間にダミー ジョイントを作成し、1 か所に固定します。

[ジョイントの追加] をクリックし、ダミー ジョイント名と親フレーム名を指定し、固定するリンクを選択して、ジョイント タイプを設定します (固定したいので [固定] を選択しますが、車をシミュレートしていると仮定すると、平面 (2 DOF) を使用できます (ドローンをシミュレートしていると仮定)、浮遊 (3 DOF) も使用できます)。完了すると、次のようになります。

その後、企画グループに進みます。これにより、持っているリンクがグループ化されます。というか、ロボットの中でさまざまな運動連鎖を組み合わせています。この 6 DOF アームには、運動チェーンが 1 つだけあるため、運動グループも 1 つだけあります。ただし、たとえば両手ロボットがある場合、両手は 2 つの独立した運動連鎖であるため、2 つのグループが存在します。これを行うには、キネマティクス グループの名前を指定してキネマティクス ソルバーを選択します。kdl_kinematics_plugin/KDLKinematicsPlugin を使用できます。これはほとんどの場合に非常に適していますが、もちろん他のソルバーも使用できます。「ジョイントを追加」をクリックすると、このようなウィンドウが表示されます

すべてのジョイント (または特定のグループ内の目的のジョイント) を選択して > を押すと、ジョイントが選択され、それらが 1 つのグループに移動されます。次に、「保存」をクリックしてグループを保存します

次にロボットのポーズに入ります。これを使用して、ロボットのデフォルトの姿勢を定義できます (例: デフォルトの 0 位置、修復位置、キャリブレーション位置など)。

希望の角度を設定し、「保存」をクリックします。

次にエンドエフェクタの追加を続けます。エンド エフェクタの親リンク (この場合、リンク 5 になります) を選択し、エンド エフェクタに名前を付けて、[保存] を設定します。

次に受動的ジョイント、つまり非駆動ジョイントですが、ここでは適用されません。ROS トピックでは、これらの特定のジョイントのジョイント ステータスは公開されていません。次に、ROS 制御部分に入ります。ここでは、アームにどのような制御を行うか、位置制御、速度制御、トルク制御などを指定します。実際にはロボットの好みや用途によって異なりますが、このような通常のロボットハンド(通常はピックアンドプレイス操作に使用される)の場合は、位置制御の方が適切です。したがって、「ROS コントロール」セクションでコントローラーを追加し、コントローラーに名前を付け (命名規則を覚えておいてください)、目的のコントローラーのタイプを選択して「 position_controllers/JointPositionControllers保存」をクリックします。

次に、作成者情報の設定に進み、この情報を管理する個人/会社の名前と電子メールを設定します。

最後に、構成ファイルを保存します。残っているのは、パスと構成フォルダーの名前 (命名規則に注意してください) を設定して保存することだけです。catkin ワークスペース (MoveIt! ワークスペース) の src フォルダーに構成を保存します。そしてパッケージを生成します。

セットアップ アシスタントを閉じて、すべてのフォルダーが存在することを確認します。このようなフォルダー構造になっているはずです。

構成ファイルの生成が完了したので、あとは Rviz でシミュレーションするだけです。ビルド プロセスでは、モデルのみを含むデモ起動環境が自動的に生成されます。このファイルをロードした後、オープン環境でロボット アームをテストできます。

catkin ワークスペースでターミナルを開き、構成ファイルをビルドして取得する必要があります。新しいターミナルで次のコマンドを実行します。

cd ~/ws_moveit

Catkin build

source devel/setup.bash

シミュレーションを開いて次のコマンドを実行します。

roslaunch evo_arm_vtwo_config demo.launch

これにより、Rviz シミュレーション環境が起動します。

矢印を使用してドラッグすると、ロボットの向きを変更できます。モーション プランニング オプションがない場合は、メニュー バーのパネル メニューに移動し、次のオプションを確認してください。

ロボットがどのように動くかを確認するには、エンドエフェクターに表示されている 3 つの軸を使用してロボットを動かします。一部のリンクが競合を示すために赤色に変わっていることがわかります。移動したら、MotionPlanning パネルの Context タブをクリックし、次のように Planning ライブラリを設定します。

次に、「計画」タブに移動し、計画と実行を実行します。ロボット アームの軌道と、ロボットを初期位置から設定した位置まで移動するためのパスを見つけるアルゴリズムが表示されます。パネル メニューから軌道スライダーをオンにして、軌道の任意の点でロボット アームを一時停止することもできます。

3. 結論

これは基本的に、Solidworks デザインを Solidworks から ROS 環境に移植する方法です。Rviz またはその両方の代わりに Gazebo を使用してこれをシミュレートすることもできます (特にクラウド設定のような認識アプローチを使用している場合)。これは非常に基本的なチュートリアルです。この機能がさらに研究されれば、これは非常に強力なツールになる可能性があります。


元のリンク: ROS ロボット アーム シミュレーション-BimAnt

おすすめ

転載: blog.csdn.net/shebao3333/article/details/135448720