[ROS ロボット アーム入門チュートリアル]

まず最初に断っておきますが、このプロジェクトはカザフスタンUPステーションBの「ROSロボットアーム導入チュートリアル」をベースにしており、初期段階ではそれを再現する「理論から実戦までのロボットアームのビジョン把握」を
行います。コンテンツは段階的な成果の表示と大学院生のキャリアのテクノロジーです。すべてのデータとコードはオープンソースです。そこで、ペンペンさん、もう一度再現します。私が使用しているハードウェアはそれとは異なります。UP マスターは UR5 を使用し、私の研究室は UR3 を使用しています。関連する資料 UR3CB3.12 は以下にリストされています: https://www.universal
ここに画像の説明を挿入-robots . cn/cb3/
[URcap1.05 を使用した UR3 システムの CB3.12 へのアップグレード]

ハードウェアサポート

シリアルナンバー 名前 関数
1 UR3 ロボットアーム すべての行動の実行者
2 D435i 死刑執行人の目
3 Ubuntuディープラーニング環境 エグゼクティブ思考の脳
4 平面掴みプラットフォーム 実験動作環境
5 6*6 黒と白のチェッカーボード校正ボード 手の外側のカメラアイのキャリブレーション
6 3x3x3cm 3D プリントの小さな立方体 アーティファクトアクター

このコードは、
ROS ロボット アーム エントリ チュートリアル コード バージョン 3.0 をサポートしています。リンク: リンク
: https://pan.baidu.com/s/1KFLQXVWShG5KfroCd6eM0A=8888
抽出コード: 8888
[ROS ロボット アーム エントリ チュートリアル - スモール 5] PPT
リンク: https :/ /pan.baidu.com/s/18ierKnf8OJPPvGn8uOf1hw=8888
抽出コード: 8888

1。概要

ここに画像の説明を挿入

ここに画像の説明を挿入

[Autolab 初級チュートリアル] ROS ロボット入門

ロボット オペレーティング システム ROS クイック スタート チュートリアル

ここに画像の説明を挿入
ここに画像の説明を挿入

2. ROS の概要

ここに画像の説明を挿入

2.1 ROS の概要

ROS 公式ウェブサイト: http://wiki.ros.org/
ここに画像の説明を挿入

ここに画像の説明を挿入ここに画像の説明を挿入ここに画像の説明を挿入オートレイバーのアドレス: http://www.autolabor.com.cn/book/ROSTutorials/

ここに画像の説明を挿入ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
Moveit API: https://moveit.ros.org/documentation/source-code-api/

ここに画像の説明を挿入

メロディック: http://docs.ros.org/en/melodic/api/moveit_tutorials/html/index.html

ここに画像の説明を挿入

2.2 ROSロボットパッケージここに画像の説明を挿入

ここに画像の説明を挿入ros-melodic:git クローン https://github.com/ros-industrial/universal_robot.git
ros-noetic: https://blog.csdn.net/Dawn_yc/article/details/114791755

3. ロボットの URDF モデリング

ここに画像の説明を挿入

3.1 URDF の概要

ここに画像の説明を挿入

URDF は ROS におけるロボットモデルの記述形式であり、ロボットの剛体の外観、物理的特性、関節の種類などの記述が含まれます。

ここに画像の説明を挿入
ここに画像の説明を挿入

3.2 ビューモデル

ここに画像の説明を挿入
$ check_urdf xxx.urdf xxx.urdf ファイルをチェックしてエラーを見つけます
$ urdf_to_graphiz xxx.urdf
可視化のために urdf ファイルから pdf ファイルを生成します
ここに画像の説明を挿入
$ roslaunch ur_description view_ur5.launch ur5 モデルを表示しますここに画像の説明を挿入

3.3 Rviz の設定と保​​存

ここに画像の説明を挿入roslaunch ur_description view_ur5_with_gripper.launch 展示ur5+robotiq85模型
ここに画像の説明を挿入

ここに画像の説明を挿入

roslaunch ur_description view_ur5.launch
rviz

rviz の保存パスは次のとおりです。universal_robot/ur_description/cfg/2222.rviz

<?xml version="1.0"?>
<launch>
  <include file="$(find ur_description)/launch/ur5_upload.launch"/>

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" >
    <param name="use_gui" value="true"/>
  </node>
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find ur_description)/cfg/2222.rviz" required="true" />
</launch>

ここに画像の説明を挿入

4. Moveit!コア機能の紹介とRvizコントロール

4.1 Moveit の紹介!

ここに画像の説明を挿入MoveIt! は、さまざまな機能を統合したロボット アーム関連のツール セット ソフトウェアです
:
Ø 運動学
Ø 動作計画
Ø 衝突チェック
Ø 3D 認識
Ø 操作
ここに画像の説明を挿入
ここに画像の説明を挿入

4.2 ロボット ROS パッケージのアーキテクチャ

ここに画像の説明を挿入
ここに画像の説明を挿入rosrun moveit_setup_assistant moveit_setup_assistant
urdf モデルをロードして、
ここに画像の説明を挿入ジョイント間に衝突があるかどうかを確認します。

ここに画像の説明を挿入
ソルバーを選択し、
ここに画像の説明を挿入
基準接続と終了ソルバーを選択し、
ここに画像の説明を挿入ここに画像の説明を挿入
関連する姿勢位置を設定し、
ここに画像の説明を挿入
平らにしてすべてゼロ
ここに画像の説明を挿入
アップ姿勢 0,-1.5708,0-1.5708,0,0

ここに画像の説明を挿入エンドグリッパーを設定する
ここに画像の説明を挿入

個人情報を入力し
ここに画像の説明を挿入、いよいよモデルを作成します
ここに画像の説明を挿入

モデルを直接インポートする
ここに画像の説明を挿入

4.3 コンピュータの設定

ここに画像の説明を挿入moveit 構成後に、対応する Rviz デモがあります。

roslaunch ur5_moveit_config demo.launch

ここに画像の説明を挿入ここに画像の説明を挿入

ここに画像の説明を挿入ランダムなターゲット位置、「計画&実行」をクリックすると、対応する位置に移動できます
ここに画像の説明を挿入
障害物
ここに画像の説明を挿入グリッパーのデモを追加します

roslaunch ur5_gripper_moveit_config demo.launch

ここに画像の説明を挿入

5. Gazebo は実際のロボットをシミュレートまたは制御します

ハイパーターミナル

sudo apt install terminator

5.1 Moveitとコントローラーの接続

ここに画像の説明を挿入ここに画像の説明を挿入使い方

# gazebo仿真中控制机器人
roslaunch ur_gazebo ur5.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
# 控制真实UR5机器人
一键启动: 
roslaunch ur_planning start_ur5.launch
分开启动:
roslaunch ur_modern_driver ur5_bringup.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
# rviz 仅作可视化显示
roslaunch ur5_moveit_config demo.launch
rosrun ur_planning moveitServer.py

5.2 ガゼボシミュレーション

ここに画像の説明を挿入ここに画像の説明を挿入

5.3 実機 UR5 ロボットの制御

ワンボタンスタート:

roslaunch ur_planning start_ur5.launch

個別に開始します。

roslaunch ur_modern_driver ur5_bringup.launch
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch
roslaunch ur5_moveit_config moveit_rviz.launch config:=true

ここに画像の説明を挿入

6. Moveit の基本 (Python)

ここに画像の説明を挿入

6.1 Moveit! レビュー

ここに画像の説明を挿入

6.2 関節腔の動き

Python に moveit_commander をインストールする

sudo apt-get update
sudo apt-get install ros-melodic-moveit-commander

ここに画像の説明を挿入

# 关节规划,输入6个关节角度(单位:弧度)
    def move_j(self, joint_configuration=None,a=1,v=1):
        # 设置机械臂的目标位置,使用六轴的位置数据进行描述(单位:弧度)
        if joint_configuration==None:
            joint_configuration = [0, -1.5707, 0, -1.5707, 0, 0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)
        self.arm.set_joint_value_target(joint_configuration)
        rospy.loginfo("move_j:"+str(joint_configuration))
        self.arm.go()
        rospy.sleep(1)

ここに画像の説明を挿入

    # 空间规划,输入xyzRPY
    def move_p(self, tool_configuration=None,a=1,v=1):
        if tool_configuration==None:
            tool_configuration = [0.3,0,0.3,0,-np.pi/2,0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)

        target_pose = PoseStamped()
        target_pose.header.frame_id = self.reference_frame
        target_pose.header.stamp = rospy.Time.now()
        target_pose.pose.position.x = tool_configuration[0]
        target_pose.pose.position.y = tool_configuration[1]
        target_pose.pose.position.z = tool_configuration[2]
        q = quaternion_from_euler(tool_configuration[3],tool_configuration[4],tool_configuration[5])
        target_pose.pose.orientation.x = q[0]
        target_pose.pose.orientation.y = q[1]
        target_pose.pose.orientation.z = q[2]
        target_pose.pose.orientation.w = q[3]

        self.arm.set_start_state_to_current_state()
        self.arm.set_pose_target(target_pose, self.end_effector_link)
        rospy.loginfo("move_p:" + str(tool_configuration))
        traj = self.arm.plan()
        self.arm.execute(traj)
        rospy.sleep(1)

6.3 デカルト空間の運動

ここに画像の説明を挿入

# 空间直线运动,输入(x,y,z,R,P,Y,x2,y2,z2,R2,...)
    # 默认仅执行一个点位,可以选择传入多个点位
    def move_l(self, tool_configuration,waypoints_number=1,a=0.5,v=0.5):
        if tool_configuration==None:
            tool_configuration = [0.3,0,0.3,0,-np.pi/2,0]
        self.arm.set_max_acceleration_scaling_factor(a)
        self.arm.set_max_velocity_scaling_factor(v)

        # 设置路点
        waypoints = []
        for i in range(waypoints_number):
            target_pose = PoseStamped()
            target_pose.header.frame_id = self.reference_frame
            target_pose.header.stamp = rospy.Time.now()
            target_pose.pose.position.x = tool_configuration[6*i+0]
            target_pose.pose.position.y = tool_configuration[6*i+1]
            target_pose.pose.position.z = tool_configuration[6*i+2]
            q = quaternion_from_euler(tool_configuration[6*i+3],tool_configuration[6*i+4],tool_configuration[6*i+5])
            target_pose.pose.orientation.x = q[0]
            target_pose.pose.orientation.y = q[1]
            target_pose.pose.orientation.z = q[2]
            target_pose.pose.orientation.w = q[3]
            waypoints.append(target_pose.pose)
        rospy.loginfo("move_l:" + str(tool_configuration))
        self.arm.set_start_state_to_current_state()
        fraction = 0.0  # 路径规划覆盖率
        maxtries = 100  # 最大尝试规划次数
        attempts = 0  # 已经尝试规划次数

        # 设置机器臂当前的状态作为运动初始状态
        self.arm.set_start_state_to_current_state()

        # 尝试规划一条笛卡尔空间下的路径,依次通过所有路点
        while fraction < 1.0 and attempts < maxtries:
            (plan, fraction) = self.arm.compute_cartesian_path(
                waypoints,  # waypoint poses,路点列表
                0.001,  # eef_step,终端步进值
                0.00,  # jump_threshold,跳跃阈值
                True)  # avoid_collisions,避障规划
            attempts += 1
        if fraction == 1.0:
            rospy.loginfo("Path computed successfully. Moving the arm.")
            self.arm.execute(plan)
            rospy.loginfo("Path execution complete.")
        else:
            rospy.loginfo(
                "Path planning failed with only " + str(fraction) +
                " success after " + str(maxtries) + " attempts.")
        rospy.sleep(1)

6.4 環境との相互作用

ここに画像の説明を挿入

# 在机械臂下方添加一个table,使得机械臂只能够在上半空间进行规划和运动
    # 避免碰撞到下方的桌子等其他物体
    def set_scene(self):
        ## set table
        self.scene = PlanningSceneInterface()
        self.scene_pub = rospy.Publisher('planning_scene', PlanningScene, queue_size=5)
        self.colors = dict()
        rospy.sleep(1)
        table_id = 'table'
        self.scene.remove_world_object(table_id)
        rospy.sleep(1)
        table_size = [2, 2, 0.01]
        table_pose = PoseStamped()
        table_pose.header.frame_id = self.reference_frame
        table_pose.pose.position.x = 0.0
        table_pose.pose.position.y = 0.0
        table_pose.pose.position.z = -table_size[2]/2 -0.02
        table_pose.pose.orientation.w = 1.0
        self.scene.add_box(table_id, table_pose, table_size)
        self.setColor(table_id, 0.5, 0.5, 0.5, 1.0)
        self.sendColors()

7. Moveit Foundation (C++) を使用して制約付きのパス計画を実現する

ここに画像の説明を挿入

8. モーションプランニング - Moveit でプランニングアルゴリズムを選択するにはどうすればよいですか?

8.1 パス計画が必要な理由

Ø 障害物回避: テーブルなどのロボットアーム近くの静的物体との衝突を回避し、 (突然近づいてくる) 人
などの動的物体との衝突を回避します
Ø タスクには運動経路に関する要件があります: 溶接などの運動学または力学制約水などが入った
カップを手に取ります。
n 経路計画の分類
Ø 検索に基づく、ダイクストラ、A*、いつでも A*、ARA*、D*
Ø サンプリングに基づく、PRM、RRT、RRT-connect、RRT*、Kinodynamic-
RRT* (力学に準拠)、いつでも RRT*、インフォームド RRT*
Ø 遺伝的アルゴリズム、アリのコロニー アルゴリズムなどのインテリジェント アルゴリズム
ここに画像の説明を挿入サンプリング ベースの経路計画アルゴリズム
Ø 基礎知識: 完全な導入: 時間が無限のときに解決策が見つかります。
Ø PRM: 1. n 点をランダムにサンプリングして形成 図 2. グラフに基づく検索
Ø RRT: ランダム ツリー、非最適解の高速検索、near クエリでは、kdtree およびその他のデータ構造を使用して、ノード
内で最も近いノードを迅速に見つけることができます。ツリー
Ø RRT-connect: 双方向に拡張された RRT、スタートとゴールから同時に展開、検索速度が比較的
速い、ros-moveit のデフォルト アルゴリズム
Ø RRT*: 2 つの改善が行われ、1 つはルールの変更です。新しいノードをツリーに接続するため、もう 1 つは
検索
ここに画像の説明を挿入

ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

8.2 経路計画アルゴリズムの選択方法

ここに画像の説明を挿入
ここに画像の説明を挿入

  1. リヴィズ
    ここに画像の説明を挿入
  2. Moveit_setup_assistant
    ここに画像の説明を挿入
    ここに画像の説明を挿入
  3. プログラムの中で

ここに画像の説明を挿入

9. 視覚的障害物の回避

ここに画像の説明を挿入

9.1 はじめに

ここに画像の説明を挿入

9.2 公式デモ

Ø ラスターマップの生成に必要な点群/深度マップ入力は 1 つだけです。

$ roslaunch moveit_tutorials obstacle_avoidance_demo.launch

Ø グリッドマップから円柱状の障害物を生成可能

$ roslaunch moveit_tutorials detect_and_add_cylinder_collision_object_demo.launch

(注: このステートメントを実行するときは、前のコマンドを閉じる必要があります)
関数パッケージ:

https://github.com/ros-planning/moveit_tutorials
https://github.com/ros-planning/panda_moveit_config

ここに画像の説明を挿入

9.3 実際の戦闘

roslaunch ur5_moveit_config demo_with_obstacle_avoidance.launch

ここに画像の説明を挿入
ここに画像の説明を挿入
主な手順
Ø 1. カメラ ros プログラムを開始します。

$ sudo apt-get install ros-melodic-realsense2-camera
$ sudo apt-get install ros-melodic-realsense2-description
$ roslaunch realsense2_camera demo_pointcloud.launch

Ø 2. moveit 設定ファイルを変更します
(1) xxx_moveit_config/config/sensors_kinect_pointcloud.yaml の point_cloud_topic を
自分のカメラの点群によって公開されるトピックに変更します
(2) または xxx_moveit_config/config/sensors_kinect_ Depthmap.yaml の image_topic を変更します
独自のカメラ深度マップによって公開されるトピックになります
Ø 3 (オプション) グリッド解像度 octomap_resolution などの視覚障害物回避パラメーターを変更します。
Ø 4 (オプション) 解像度、更新頻度などのカメラ パラメーターを変更します。
Ø 5マニピュレータのベース座標を基準としたカメラのポーズをパブリッシュします。

<node pkg="tf2_ros" type="static_transform_publisher"
name="camera_to_robot" args="0.72032458 -0.21936176 0.90925255
0.98422218 0.0969083 -0.04779138 0.14011233 camera_color_optical_frame
world" />

ここに画像の説明を挿入

roslaunch ur5_moveit_config demo_with_obstacle_avoidance.launch

参考 https://blog.csdn.net/ssw_1990/article/details/104053041
ここに画像の説明を挿入参考 https://blog.csdn.net/ssw_1990/article/details/104053041
ここに画像の説明を挿入

10. ROS とディープラーニング

10.1 はじめに

ROS-ムーブイット!

ROS-melodic以及之前版本Moveit!默认使用python2.7
ROS-noetic以及ROS2支持python3

ディープラーニング
ディープラーニングはpython3を使用しており、一般的にディープラーニングは仮想環境で環境を構築する必要があります

ここに画像の説明を挿入
ここに画像の説明を挿入

10.2 実戦

n ROS と Anaconda の共存
Ø 1. ROS のワンクリックインストール

$ wget http://fishros.com/install -O fishros && bash fishros

Ø 2. anacondaをインストールする
https://blog.csdn.net/KIK9973/article/details/118772450
ubuntuバージョンに対応するanacondaインストールチュートリアルをBaiduで検索してください
Ø 3. anacondaで仮想環境を作成します

conda create -n YOUR_ENV_NAME
pyhton=3.7

Ø 4. 仮想環境にrosライブラリをインストールする

$ conda activate
$ pip install rospkg/rospy

注: 仮想環境であるかどうかに関係なく、rospkg がインストールされていれば、rospy、std_msgs などのros パッケージが見つかり、トピック通信およびサービス通信を行うことができます

. moveit 関数をサーバーにカプセル化する (講義 6 - Moveit Basic と Python/ros サービスの通信)

$ rosrun ur_planning moveitServer.py

Ø 6. 環境内のスクリプトにクライアントを記述し、サービス通信でmoveit関数に接続する
ここに画像の説明を挿入
ここに画像の説明を挿入

11. ROS-Moveit に基づく 6-DOF ビジュアルキャプチャを実現

11.1 視覚的な把握

  1. 平面キャプチャ
    Ø Cornell データセット: 1,035 RGBD 画像、8,019 ラベル
    Ø Jacquard データセット: 54K RGBD 画像、110 万ラベル
    Ø 古典的な平面キャプチャ アルゴリズム: GGCNN[1]、GRCNN[2]、
    Swin-Transformer[3] ]

  2. GraspNet-1Billion データセットを取得するための 6 つの自由度

ここに画像の説明を挿入
ここに画像の説明を挿入

11. システム枠組みの設計

n 動作計画
Ø 機能:アルゴリズムによって指定された
位置および姿勢に到達する
Ø 経路計画:現在位置
から予想位置まで
衝突のない軌道を計画する
n ハンドアイキャリブレーションØ 機能:
ロボット座標系
間の関係を取得するとカメラ座標系
Ø 効果: 現在使用可能 誤差は ±5mm 以内を達成ここに画像の説明を挿入
ここに画像の説明を挿入

11.3 クロール実験

n 把握力[6] 単一物体把握実験
把握アイテムリスト:
合計 11 個: 1. リンゴ 2. バナナ 3. 懐中電灯 4. 野球 5. 靴ブラシ
6. バドミントンボックス 7. ラジオ 8. ダウンジャケットクリーナー
9. 小白い靴クリーナー 10. U ディスク 11. リモコン
ここに画像の説明を挿入

11.3 クロール実験

n Graspness[6] 複雑なシーンの連続把持実験
Ø 結論: 他のアルゴリズムと比較して、把持[6] の把持姿勢予測結果はより正確;
ほとんどの小さな物体や背景と同じ色の物体でも把持を検出できます。 、堅牢性がより強力です。
Ø 既存の問題:
l 物体が「平ら」すぎて高さが低いと、把握姿勢の検出が困難
l 把握プロセス中に他の物体との衝突が発生する可能性がある
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/vor234/article/details/131633464