# 9.2.3. 執行 master-slave 範例

請打開 terminal 終端視窗，輸入 roscore 指令。

```
$ roscore
```

運行 roscore 後，執行 **Slave OpenManipulator 從手臂的控制器**。打開新的終端視窗，輸入以下指令。

* 指令內的 **dynamixel\_usb\_port** 是一個參數，是用來設定跟 slave OpenManipulator-X 從手臂智能馬達間的連接埠。它應該設置為 **/dev/ttyUSB@**，它應跟 master OpenManipulator-X 主手臂用的連接埠不同。

```
$ roslaunch open_manipulator_controller open_manipulator_controller.launch dynamixel_usb_port:=/dev/ttyUSB0
```

{% 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>

如果 master OpenManipulator-X 主手臂控制器已成功啟動，終端視窗將顯示以下消息。

```
SUMMARY
========

PARAMETERS
 * /open_manipulator/control_period: 0.01
 * /open_manipulator/moveit_sample_duration: 0.05
 * /open_manipulator/planning_group_name: arm
 * /open_manipulator/using_moveit: False
 * /open_manipulator/using_platform: True
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    open_manipulator (open_manipulator_controller/open_manipulator_controller)

ROS_MASTER_URI=http://localhost:11311

process[open_manipulator-1]: started with pid [23452]
Joint Dynamixel ID : 11, Model Name : XM430-W350
Joint Dynamixel ID : 12, Model Name : XM430-W350
Joint Dynamixel ID : 13, Model Name : XM430-W350
Joint Dynamixel ID : 14, Model Name : XM430-W350
Gripper Dynamixel ID : 15, Model Name :XM430-W350
[ INFO] [1544509070.096942788]: Succeeded to init /open_manipulator
```

然後再開新的終端視窗並輸入以下指令。此指令用於運行 **master OpenManipulator 主手臂的控制器**。

* 指令內的 **usb\_port** 是一個參數，是用來設定跟 master OpenManipulator-X 主手臂智能馬達間的連接埠。它應該設置為 **/dev/ttyUSB@**，它應跟 slave OpenManipulator-X 從手臂用的連接埠不同。

```
$ roslaunch open_manipulator_master_slave open_manipulator_master.launch usb_port:=/dev/ttyUSB1
```

如果 slave OpenManipulator-X 從手臂控制器已成功啟動，終端視窗將顯示以下消息

```
SUMMARY
========

PARAMETERS
 * /open_manipulator/open_manipulator_master/gripper_id: 5
 * /open_manipulator/open_manipulator_master/joint1_id: 1
 * /open_manipulator/open_manipulator_master/joint2_id: 2
 * /open_manipulator/open_manipulator_master/joint3_id: 3
 * /open_manipulator/open_manipulator_master/joint4_id: 4
 * /open_manipulator/open_manipulator_master/service_call_period: 0.01
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /open_manipulator/
    open_manipulator_master (open_manipulator_master_slave/open_manipulator_master)

ROS_MASTER_URI=http://localhost:11311

process[open_manipulator/open_manipulator_master-1]: started with pid [32026]
Joint Dynamixel ID : 1, Model Name : XM430-W350
Joint Dynamixel ID : 2, Model Name : XM430-W350
Joint Dynamixel ID : 3, Model Name : XM430-W350
Joint Dynamixel ID : 4, Model Name : XM430-W350
Gripper Dynamixel ID : 5, Model Name :XM430-W350
```

因此，你可以在終端視窗中看到以下消息。你可以檢查當前控制模式和機器手臂狀態（關節角度，終端工具位置）。

```
-----------------------------
Control Your OpenManipulator!
-----------------------------
Present Control Mode
Master - Slave Mode
-----------------------------
1 : Master - Slave Mode
2 : Start Recording Trajectory
3 : Stop Recording Trajectory
4 : Play Recorded Trajectory
-----------------------------
Present Joint Angle J1: -0.170 J2: 0.367 J3: -0.046 J4: 0.959
Present Tool Position: 0.000
-----------------------------
```

有四個控制指令選擇。請在終端視窗輸入指令號碼。

1. Master-Slave Mode: master 主手臂跟 slave 從手臂同步動作
2. Start Recording Trajectory: master 主手臂跟 slave 從手臂同步動作，控制器會錄製移動軌跡
3. Stop Recording Trajectory: 停止錄製&#x20;
4. Play Recorded Trajectory: 第 2 項所錄製的軌跡，在 slave 從手臂上回播
