# 7.3. MoveIt!

{% hint style="info" %}
備註：Terminal (終端機)可以在螢幕左上方的 Search 圖示找到. 快捷鍵可以使用 **Ctrl-Alt-T**.
{% endhint %}

在使用 MoveIt! 啟動 controller 控制器之前，請檢查 open\_manipulator\_controller 套件中的open\_manipulator\_controller 啟動檔。

```
<launch>
    <arg name="use_robot_name"         default="open_manipulator"/>

    <arg name="dynamixel_usb_port"     default="/dev/ttyUSB0"/>
    <arg name="dynamixel_baud_rate"    default="1000000"/>

    <arg name="control_period"         default="0.010"/>

    <arg name="use_platform"           default="true"/>

    <arg name="use_moveit"             default="false"/>
    <arg name="planning_group_name"    default="arm"/>
    <arg name="moveit_sample_duration" default="0.050"/>

    <group if="$(arg use_moveit)">
      <include file="$(find open_manipulator_controller)/launch/open_manipulator_moveit.launch">
        <arg name="robot_name"      value="$(arg use_robot_name)"/>
        <arg name="sample_duration" value="$(arg moveit_sample_duration)"/>
      </include>
    </group>

    <node name="$(arg use_robot_name)" pkg="open_manipulator_controller" type="open_manipulator_controller" output="screen" args="$(arg dynamixel_usb_port) $(arg dynamixel_baud_rate)">
        <param name="using_platform"       value="$(arg use_platform)"/>
        <param name="using_moveit"         value="$(arg use_moveit)"/>
        <param name="planning_group_name"  value="$(arg planning_group_name)"/>
        <param name="control_period"       value="$(arg control_period)"/>
        <param name="moveit_sample_duration"  value="$(arg moveit_sample_duration)"/>
    </node>

  </launch>
```

**Parameters List** : 以下參數可用於加載 [**move\_group**](http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/move_group_interface/move_group_interface_tutorial.html) 套件。

* use\_moveit&#x20;
  * 是一個參數，用來設置是否使用 MoveIt!
* planning\_group\_name&#x20;
  * 是在 [**setup\_assistant**](http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/setup_assistant/setup_assistant_tutorial.html#step-4-add-planning-groups) 中設置的參數
* moveit\_sample\_duration
  * 是一個參數，用於設置從 MoveIt! 規劃關節軌跡時的採樣時間

設置完所有參數後，啟動 open\_manipulator\_pro\_controller。

```
  $ roslaunch open_manipulator_controller open_manipulator_controller.launch use_moveit:=true
```

{% hint style="danger" %}
警示：啟動 controller 以使用 MoveIt! 時，必須先關閉 [**OpenMANIPULATOR-X 啟動檔**](http://emanual.robotis.com/docs/en/platform/openmanipulator_x/ros_controller_package/#launch-controller)。
{% endhint %}

{% hint style="danger" %}
警示：請在運行 OpenMANIPULATOR-X 之前先檢查每個關節位置。因為如果關節位置超出範圍，它可能會停止操作。下面的圖片向你展示了OpenMANIPULATOR-X 的理想方位。當未啟用 DYNAMIXEL 智能馬達的扭力時，請參照下圖所示，先調整每個關節的方位。
{% endhint %}

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm313FkZECXrs_K1WIa%2F-Lm3a6m_7FsJ-9rJLHYl%2Fopen_manipulator_start_pose.png?alt=media&#x26;token=f606810e-f8c7-4b67-a7d3-bf4635b6718b" alt=""></div>

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm9Hh807l_D2u_pJueo%2F-Lm9P-7GCRX0X8OdD5xQ%2Fmoveit_launch.png?alt=media&#x26;token=3daf90ca-466f-4797-ad1b-a5b0880ddac0" alt=""></div>

**Service Server List** : 在 open\_manipulator\_controller 內具有的與 MoveIt! 相關的 service server 列表。

* /open\_manipulator/moveit/get\_joint\_position&#x20;
  * ([**open\_manipulator\_msgs/GetJointPosition**](http://emanual.robotis.com/docs/en/popup/open_manipulator_msgs_GetJointPosition/)) 用戶可以使用此服務來接收由 move\_group 所計算的關節位置。
* /open\_manipulator/moveit/get\_kinematics\_pose&#x20;
  * ([**open\_manipulator\_msgs/GetKinematicsPose**](http://emanual.robotis.com/docs/en/popup/open_manipulator_msgs_GetKinematicsPose/)) 用戶可以使用此服務接收由 move\_group 所計算的運動學方位。
* /open\_manipulator/moveit/set\_joint\_position&#x20;
  * ([**open\_manipulator\_msgs/SetJointPosition**](http://emanual.robotis.com/docs/en/popup/open_manipulator_msgs_SetJointPosition/)) 用戶可以使用此服務通過 move\_group 在[**關節空間**](http://emanual.robotis.com/docs/en/popup/open_manipulator_coordinates/)中創建軌跡。用戶輸入目標關節的角度和軌跡的總時間。
* /open\_manipulator/moveit/set\_kinematics\_pose&#x20;
  * ([**open\_manipulator\_msgs/SetKinematicsPose**](http://emanual.robotis.com/docs/en/popup/open_manipulator_msgs_SetKinematicsPose/)) 用戶可以使用此服務通過 move\_group 在[**任務空間**](http://emanual.robotis.com/docs/en/popup/open_manipulator_coordinates/)中創建軌跡。用戶在[**任務空間**](http://emanual.robotis.com/docs/en/popup/open_manipulator_coordinates/)中輸入OpenMANIPULATOR-X 終端工具的運動學方位以及軌跡的總時間。

{% hint style="info" %}
TIP：如果你想在 inverse kinematics 反向運動學中使用 **position\_only**，請檢查 **open\_manipulator\_moveit - > config - > kinematics.yaml**，並將**position\_only\_ik** 參數設置為 **True**。
{% endhint %}

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm9Hh807l_D2u_pJueo%2F-Lm9QafWNA-1hGEP05z3%2FOpenManipulator_Chain_moveit_real_1.png?alt=media&#x26;token=ac73261a-65ac-4439-b260-09a673e99b5e" alt=""></div>

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm9Hh807l_D2u_pJueo%2F-Lm9QfbXV49r468rJol1%2FOpenManipulator_Chain_moveit_real_2.png?alt=media&#x26;token=a1f81615-32f0-4c39-9fb6-8033cc35f6a2" alt=""></div>

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm9Hh807l_D2u_pJueo%2F-Lm9Qkd7XT9vmmHD10ek%2FOpenManipulator_Chain_moveit_real_3.png?alt=media&#x26;token=730d14f4-535d-4dec-8296-b58c4e7a0d39" alt=""></div>

<div align="left"><img src="https://3058168660-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LkXc5k_SFaP9gK2gsU8%2F-Lm9Hh807l_D2u_pJueo%2F-Lm9Qn_bKZt_KLbCouaz%2FOpenManipulator_Chain_moveit_real_4.png?alt=media&#x26;token=139aaea8-8f82-4626-9025-fc23281020ff" alt=""></div>
