主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

露台でのROSを使用したピックアンドプレースワークフロー

この例では,KINOVA®Gen3などのロボットマニピュレーター用にエンドツーエンドのピックアンドプレースワークフローを設定し,露台物理シミュレーターでロボットをシミュレートする方法を説明します。

概要

この例では,KINOVA Gen3マニピュレーターを使用して,目標物を識別して2つのビンにリサイクルします。この例では5つのツールボックスのツールを使用します。

  • 机器人系统工具箱™を使用して,マニピュレーターをモデル化し,シミュレートします。

  • Stateflow®を使用して,例にある高水準のタスクをスケジュールし,タスクからタスクへとステップ実行します。

  • ROS工具箱™を使用して,MATLABを露台に接続します。

  • 计算机视觉工具箱™および深度学习工具箱™を使用して,凉亭内のシミュレートされたカメラを使用して目標物を検出します。

この例は,以下の関連する例の主要概念に基づいています。

露台でのロボットのシミュレーションと制御

KINOVA Gen3ロボットのROSベースのシミュレーターを起動して,MATLAB®とロボットシミュレーターとの接続を設定します。

この例では,ダウンロード可能なバーチャルマシン(VM)を使用します。これまでに使用経験がない場合は,露台およびシミュレートされたTurtleBotの入門(ROS工具箱)を参照してください。

  • Ubuntu®バーチャルマシンデスクトップを起動します。

  • Ubuntuデスクトップで,(露台回收世界)アイコンをクリックして,この例のために作成された露台ワールドを起動します。

  • 露台でROSマスターのIPアドレスとポート番号を指定して,MATLAB®がロボットシミュレーターと通信できるようにします。この例では,凉亭内のROSマスターは,デスクトップに表示されているIPアドレス192.168.203.131を使用します。使用しているVMに基づいて,変数rosIPを調整します。

  • rosinitを使用して,ROS 1ネットワークを起動します。

rosIP =“192.168.203.131”%启用ros的机器的IP地址rosinit (rosIP, 11311);初始化ROS连接
环境变量ROS_IP的值为192.168.31.1,用于设置ROS节点的发布地址。使用NodeURI http://192.168.31.1:51073/初始化全局节点/matlab_global_node_36570

アイコンをクリックして露台ワールドを初期化すると,VMは,各側に1つずつごみ箱があるテーブル上にKINOVA Gen3ロボットアームを読み込みます。露台でロボットアームをシミュレートし制御するために,VMには,KINOVAが提供するros_kortexROSパッケージが含まれています。

パッケージはros_controlを使用して,目的のジョイント位置までジョイントを制御します。VMの使用方法の詳細については,露台およびシミュレートされたTurtleBotの入門(ROS工具箱)を参照してください。

Stateflowチャート

この例ではStateflowチャートを使用して例のタスクをスケジュールします。チャートを開いて内容を確認し,チャートの実行中の状態遷移を把握します。

编辑exampleHelperFlowChartPickPlaceROSGazebo.sfx

このチャートは,マニピュレーターが目標物(パーツ)とどのように相互作用するかを決定します。これは,基本的な初期化手順と,それに続く2つの主要セクションで構成されます。

  • パーツの識別とその配置位置の判別

  • ピックアンドプレースワークフローの実行

ピックアンドプレースのステップに関する高水準の説明については,MATLAB向けにStateflowを使用したピックアンドプレースのワークフローを参照してください。

グリッパーの開閉

グリッパーをアクティブにするためのコマンドexampleCommandActivateGripperROSGazeboは,露台に実装されているグリッパーを開閉するためのアクション要求を送信します。グリッパーを開く要求を送信するには,次のコードを使用します。メモ:ここに示すコード例は,コマンドが何を行うかを説明しているだけです。実行しないでください。

[gripAct, gripGoal] = rosactionclient (' / my_gen3 / custom_gripper_controller / gripper_cmd ');gripperCommand = rosmessage (“control_msgs / GripperCommand”);gripperCommand。位置= 0.0;gripGoal。命令= gripperCommand;sendGoal (gripAct gripGoal);

マニピュレーターを指定姿勢に移動

コマンド関数commandMoveToTaskConfigは,指定された姿勢にマニピュレーターを移動するために使用されます。

計画

パス計画は,trapveltrajおよびtransformtrajを使用して,初期のタスクコンフィギュレーションから目的のタスクコンフィギュレーションへの,シンプルなタスク空間の軌跡を生成します。軌跡の計画と実行の詳細については,KINOVA Gen3マニピュレーターを使用したタスク空間およびジョイント空間の軌跡の計画と実行を参照してください。

ROSのジョイント軌跡コントローラー

ロボットが追従するジョイント軌跡の生成後,commandMoveToTaskConfigは,目的のサンプルレートで軌跡をサンプリングし,ジョイント軌跡ROSメッセージにパッケージ化して,KINOVA ROSパッケージに実装されているジョイント軌跡コントローラーにアクション要求を送信します。

シーンでの目標物の検出と分類

関数commandDetectPartsおよびcommandClassifyPartsは,ロボットからのシミュレートされたエンドエフェクタカメラフィードを使用し,事前学習済みの深層学習モデルを適用してリサイクル可能なパーツを検出します。モデルは,カメラフレームを入力として取得し,目標物の2次元位置(ピクセル位置)と,必要なリサイクルのタイプ(青または緑のビン)を出力します。イメージフレームの2次元位置は,ロボットの基础座標系にマップされます。

深層学習モデルの学習:露台イメージの取得とラベル付け

検出モデルの学習には,露台ワールド内のシミュレートされた環境で取得された一連のイメージが使用されました。これらのイメージでは,2つのクラスの目標物(ボトルと缶)がテーブルの異なる位置に配置されていました。イメージは,ロボットに搭載されているシミュレートされたカメラから取得されます。このカメラは水平方向および垂直方向の平面に沿って移動し,多くの異なるカメラ視点から目標物のイメージを取得します。

イメージにはその後,イメージラベラー(计算机视觉工具箱)アプリを使用してラベルが付けられ,YOLO v2意思検出モデルの学習データセットが作成されます。trainYOLOv2ObjectDetector(计算机视觉工具箱)がモデルに学習させます。MATLABで YOLO v2 ネットワークに学習させる方法については、車両検出のためのYOLO v2意思ネットワークの学習(计算机视觉工具箱)を参照してください。

ロボットがホームポジションにあるときに,搭載カメラによって取得された単一のイメージに関するオンライン推定用として学習済みモデルが配布されます。関数检测(计算机视觉工具箱)は,検出された目標物の境界ボックスのイメージ位置とクラスを返し,その後それを使用して,目標物の最上部中央の位置が求められます。シンプルなカメラ投影手法を使用し,目標物の高さが既知であると仮定して,目標物の位置がワールドに投影され,最終的に目標物をピックするための基準位置として使用されます。境界ボックスに関連付けられているクラスにより,どのビンに目標物を配置するかが決まります。

ピックアンドプレースタスクの開始

このシミュレーションでは,Robotiqグリッパーが接続されたKINOVA Gen3マニピュレーターを使用します。.matファイルからrigidBodyTreeオブジェクトとしてロボットモデルを読み込みます。

负载(“exampleHelperKINOVAGen3GripperROSGazebo.mat”);

ピックアンドプレースコーディネーターの初期化

ロボットの初期コンフィギュレーションを設定します。ロボットモデル,初期コンフィギュレーションおよびエンドエフェクタ名を指定して,ロボット制御を処理するコーディネーターを作成します。

initialRobotJConfig = [3.5797 -0.6562 -1.2507 -0.7008 0.7303 -2.0500 -1.9053];endEffectorFrame =“爪”

ロボットモデル,初期コンフィギュレーションおよびエンドエフェクタ名を指定して,コーディネーターを初期化します。

coordinator = exampleHelperCoordinatorPickPlaceROSGazebo(机器人,initialRobotJConfig, endEffectorFrame);

目標物を配置するために,ホームコンフィギュレーションと2つの姿勢を指定します。

协调员。HomeRobotTaskConfig = getTransform(机器人,initialRobotJConfig, endEffectorFrame);协调员。PlacingPose{1} = trvec2tform([[0.2 0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);协调员。PlacingPose{2} = trvec2tform([[0.2 -0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);

シミュレーションの実行と可視化

コーディネーターをStateflowチャートに接続します。開始されたStateflowチャートは,目標物の検出,つまみ上げ,および正しいステージング領域への配置という各ステートを連続的に経由させます。

协调员。流程图= exampleHelperFlowChartPickPlaceROSGazebo (“协调员”协调员);

ダイアログを使用して,ピックアンドプレースタスクの実行を開始します。ダイアログで[はい]をクリックしてシミュレーションを開始します。

回答= questdlg (“你想现在就开始找工作吗?”...“开始工作”“是的”“不”“不”);开关回答情况下“是的”%触发事件以启动状态流程图中的选择和放置coordinator.FlowChart.startPickPlace;情况下“不”coordinator.FlowChart.endPickPlace;删除(coordinator.FlowChart)删除(协调);结束

ピックアンドプレースタスクの終了

新しい目標物の検出に3回失敗すると,Stateflowチャートは自動的に実行を終了します。ピックアンドプレースタスクを途中で終了するには,以下のコード行をコメント解除して実行するか,コマンドウィンドウでCtrl + Cを押します。

% coordinator.FlowChart.endPickPlace;%删除(coordinator.FlowChart);%删除(协调);

シミュレーションステートの観察

実行中,Stateflowチャートには各時点におけるアクティブステートが青く強調表示されます。これは,ロボットの動作とそのタイミングを追跡する上で役立ちます。サブシステムをクリックしていくと,動作中のステートの詳細を確認できます。

露台でのピックアンドプレースアクションの可視化

露台ワールドは,作業領域でロボットがパーツをごみ箱に移動する様子を示します。すべてのパーツが配置されるまで,ロボットは動作を続けます。検出ステップで4回にわたってパーツが見つからない場合,Stateflowチャートは終了します。

如果比较字符串(答案,“是的”协调员。NumDetectionRuns < 4%等待没有部件被检测到。结束结束

例を終了したら,ROSネットワークをシャットダウンします。

rosshutdown
使用NodeURI http://192.168.31.1:51073/关闭全局节点/matlab_global_node_36570

The MathWorks, Inc.版权所有