ROS試作——UR 5ロボット配置、通信、RVIZ-moveit制御、C++呼び出しmoveit制御

9499 ワード

*注意:構成:Ubuntu 16.04+ROS kinetic
1.ワークスペースの作成
$mkdir -p catkin_ws/srcはcatkin_に入りますwsディレクトリで、$catkin_のコマンドを実行します.make*このコマンドは、catkin_でワークスペースを構築するために使用されます.wsパスの下でcatkin_を使用makeコマンド$source devel/setup.bash*このコマンドはcatkin_wsディレクトリの下で実行されます.catkin_ws/develディレクトリの下のsetup.bashファイルはROSのファイルシステムにマウントされ、ユーザーがファイルシステムのコマンドを実行すると、見つからないことを示すことはありません.
2.パッケージの作成
*機能パックはワークスペースに存在するcatkin_wsディレクトリsrcディレクトリの下のディレクトリで、このディレクトリにはいくつかのファイルまたはディレクトリが含まれており、1つの機能パッケージは以下の部分から構成する必要があります:(1)packageを含む必要があります.xmlファイル;(2)CMakeListsを含む必要がある.txtファイル.*まずディレクトリcatkin_に入りますws/srcディレクトリでdemoという名前の機能パッケージを作成します.3つの機能パッケージ:std_に直接依存します.msgs,rospyおよびroscppは、$catkin_のコマンドを使用します.create_pkg demo std_msgs rospy roscpp rospackコマンドを使用して機能パッケージ間の依存関係を表示(rospackコマンドを使用する前提は、コマンドがインストールされていることです)直接依存関係を表示します:$rospack depends 1 demo機能パッケージが作成されたら、ワークスペースcatkin_wsパスの下でcatkin_makeで機能パッケージをコンパイルし、エラーがなければ機能パッケージの作成に成功します.$catkin_makeこの部分のコンテンツリファレンスリンク:ワークスペースおよび機能パッケージの作成
*****以上はワークスペース作成のための事前準備、URロボットのインストールとコンパイル、ワークスペースでのデバッグ
3.UR 5関連パッケージのインストール
注意:moveitを事前にインストールする必要があります.そうしないと、パッケージのコンパイルに成功しません.次のコマンドを実行します.
$sudo apt-get update
$sudo apt-get install ros-indigo-moveit-full

2行目のコード実行に失敗した場合は、次のコードを実行します.
$sudo apt-get install ros-indigo-moveit*

(1) cd ~/catkin_ws/src(ワークスペースのsrcパスの下にパスを配置する)(2)git clone-b kinetic-develhttps://github.com/ros-industrial/universal_robot.git(universal_robotパッケージをダウンロードします.備考:ROSシステムのバージョンがkineticでない場合は、上のコードのkineticを対応するバージョンに変更してください)(3)cd~/catkin_ws(catkin_wsパスの下にナビゲート)(4)rosdep install--from-paths src--ignore-src--rosdistro indigo(??どういう意味ですか???備考:同様に、ROSシステムのバージョンがindigoでない場合は、上のコードのindigoを対応するバージョンに変更してください)(5)catkin_make ( 6) source devel/setup.bash
4.ur_modern_ドライバドライバインストール
ステップ2でuniversal_robotフォルダの下にurが含まれています.driverしかし、この駆動は比較的古いUR 5アームコントローラのバージョンしかサポートしていません.言い換えれば、ur_modern_driverは、(1)catkin_ws/src/universal_robotというディレクトリのur_driverフォルダを削除し、(2)ur_modern_driverをダウンロードする(直接ダウンロードしてuniversal_robotフォルダにコピーするか、コマンドを使用して3.2ステップでダウンロードする)具体的な手順に適しています.(3)再解凍し、元のur_driverというフォルダの場所に貼り付ける(ファイル名をur_modern_driverに変更).(4)次にcd~/catkin_ws(5)最後にcatkin_make******************************************************************のコンパイル中にエラーが発生し、オープンファイルur_hardware_interface.cppを修正し、if(controller_it->hardware_interface)をif(controller_it->type)に変更する.hardware_interfaceがtypeになります.controller_it->hardware_interface.c_str()がtypeになる.c_str(); if(stop_controller_it->hardware_interface)をif(stop_controller_it->type)に変更します.具体的な数は12個くらいです.
5.UR 5本体現物通信テスト
まずUbuntuシステムに入って新しい端末(1)cd~/catkin_を開くws (2) source devel/setup.bash (3) roslaunch ur_modern_driver ur5_bringup.launch limited:=true robot_ip:= IP_OF_THE_ROBOT[reverse_port:=REVERSE_PORT](備考:ロボットがネットワーク線でPC端に接続されている場合、IP_OF_THE_ROBOTをUR 5アーム本体に置き換える必要があります(ティーチにおけるロボットネットワーク設定)における静的アドレスこの場合、ロボットとPCが同一のセグメントであることを保証する.すなわち、ロボットとPCのIPアドレスが最後の小数点以下の数だけ異なる場合、PC側のIPは有線接続に設定され、設定中のネットワークを介してIP設定される.ロボットがルータを介してPC側に接続する場合、IP_OF_THE_ROBOTはUR 5に置き換える必要があるアーム本体のDHCP)(4)roslaunch ur 5_moveit_config ur5_moveit_planning_execution.Launch limited:=true(備考:実行(4)の前に新しい端末を開き、先に実行(2)してから実行(4)し、そうしないとエラーが発生する可能性があります.)(5).roslaunch ur5_moveit_config moveit_rviz.Launch config:=true(備考、新しい端末を開いて、まず4の(2)を実行してから(5)を実行して、さもなくば間違いを報告するかもしれません)すべて正常であれば、RVIZの中のUR 5アームと実物の状態が一致していることがわかります.UR 5アームの実物をドラッグすると、RVIZの中のアームも動きます.このとき、RVIZでアームをマウスでドラッグして目標位置に到達し、planingの下でplanをクリックし、パス計画が成功すればexecuteをクリックすると、UR 5の実物も目標点に移動するのが見えます.インタフェースではアームの動作速度を調整できます.この部分はリンクURロボット通信と制御を参照
6.C++呼び出しmoveit制御UR 5ロボット運動
1.まず、コードを配置する新しい機能パッケージを作成します.
$catkin_create_pkg puncture_demo catkin cmake_modules interactive_markers moveit_core moveit_ros_perception moveit_ros_planning_interface pluginlib roscpp std_msgs

2.作成した機能パッケージの下にpuncture_を作成するdemo.cppファイル;コードは次のとおりです.
//punture_demo.cpp
#include 
#include 
 
#include  
#include  
#include  
#include  

int main(int argc, char **argv)
{
  ros::init(argc, argv, "movo_moveit");
  ros::NodeHandle node_handle; 
  ros::AsyncSpinner spinner(1);
  spinner.start();
 
  moveit::planning_interface::MoveGroup group("manipulator");//ur5  moveit        
 
  //        ,   moveit    
  geometry_msgs::Pose target_pose1;
  
  target_pose1.orientation.x= -0.1993;
  target_pose1.orientation.y = 0.3054;
  target_pose1.orientation.z = -0.2284;
  target_pose1.orientation.w = 0.902;
 
  target_pose1.position.x = -0.2004;
  target_pose1.position.y = -1.0177;
  target_pose1.position.z = 1.56930;
 
  group.setPoseTarget(target_pose1);
  group.setMaxVelocityScalingFactor(0.02);
 
 
  //       ,               ,  moveit  plan  
  moveit::planning_interface::MoveGroup::Plan my_plan;
//bool success = (ptr_group->plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS;
  bool success = group.plan(my_plan)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;
 
  ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   
 
  //               ,  moveit  execute。
  if(success)
      group.execute(my_plan);
 
///////////////////////////////////     ////////////////////////////////////
geometry_msgs::Pose target_pose2;

   target_pose2.orientation.x= -0.1993;
  target_pose2.orientation.y = 0.3054;
  target_pose2.orientation.z = -0.2284;
  target_pose2.orientation.w = 0.902;
 
  target_pose2.position.x = 0.096;
  target_pose2.position.y = -0.9618;
  target_pose2.position.z = 1.934;
 
  group.setPoseTarget(target_pose2);
  group.setMaxVelocityScalingFactor(0.02);
 
  // moveit::planning_interface::MoveGroup::Plan my_plan;
 
  //       ,               ,  moveit  plan  
  moveit::planning_interface::MoveGroup::Plan my_plan_1;
//bool success = (ptr_group->plan(my_plan_1) == moveit::planning_interface::MoveItErrorCode::SUCCESS;
  bool success1 = group.plan(my_plan_1)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;
 
  ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   
 
  //               ,  moveit  execute。
  if(success1)
      group.execute(my_plan_1);
////////////////////////////////////////////////     ////////////////////////////
geometry_msgs::Pose target_pose3;
  
   target_pose3.orientation.x= -0.1993;
  target_pose3.orientation.y = 0.3054;
  target_pose3.orientation.z = -0.2284;
  target_pose3.orientation.w = 0.902;
 
  target_pose3.position.x = 0.1219;
  target_pose3.position.y = -0.9801;
  target_pose3.position.z = 1.9163;
 
  group.setPoseTarget(target_pose3);
  group.setMaxVelocityScalingFactor(0.01);
 
 
  //       ,               ,  moveit  plan  
  moveit::planning_interface::MoveGroup::Plan my_plan_2;
//bool success = (ptr_group->plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS;
  bool success2 = group.plan(my_plan_2)== moveit::planning_interface::MoveItErrorCode::SUCCESS;;
 
  ROS_INFO("Visualizing plan 1 (pose goal) %s",success?"":"FAILED");   
 
  //               ,  moveit  execute。
  if(success2)
      group.execute(my_plan_2);
  
  ros::shutdown(); 
  return 0;
}


注:プログラムはロボットの運動の3つの位置を制御して、それぞれtarget_ですpose1、 target_pose2、 target_pose3;3つのプログラムは同じで、対応するmy_plan、my_plan_1、my_plan_2;successも修正する必要があります.3.puncture_の変更demo機能パッケージ下のCMakeLists.txtファイルは、次のコードを以下に追加します.
add_executable(puncture_demo src/puncture_demo.cpp)
target_link_libraries(puncture_demo
  ${catkin_LIBRARIES} 
)

×××××××××××××××××××××××プログラム実行中にエラーが発生しました×××××××××××××××××××××× デバッグは以下のように行います:エラーと修正方法××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× コンパイラワークスペースcatkin_ws下コンパイル機能パッケージ:catkin_makeコンパイルに成功するとcatkin_ws/devel/lib/puncture_demo/フォルダの下に実行ファイルpunctureが表示されます.demoファイルは以下のコマンドを実行してロボットの動きを制御します:$rosrun puncture_demo puncture_demo
注:ロボット実行中、新しい端末を開き、手順5の処理を行います
7.ロボット環境配置
ロボット運転中、環境を再構成する必要があります:ロボットは地面に取り付けられていません.ロボット環境プロファイルを変更してcatkin_を見つける必要があります.ws/src/universal_robot-kinetic-devel/ur_description/urdf/ur5_joint_limited_robot.urdf.xacroファイルの修正コードは以下の通りです.



  
  

  
  

  
  

  

  
    
    
    
  



ソースファイルに対して、