# v3.6.1 The z1_controller is mainly used to control the robot arm and communicate with the Z1 SDK ## Notice support robot: Z1(v3.6.1) not support robot: Z1(v3.4, v3.5) ## Dependencies - [ROS](https://www.ros.org/)(Melodic) - build-essential ```bash sudo apt install build-essential ``` - Boost (version 1.5.4 or higher) ```bash dpkg -S /usr/include/boost/version.hpp # check boost version sudo apt install libboost-dev # install boost ``` - CMake (version 2.8.3 or higher) ```bash cmake --version # check cmake version sudo apt install cmake # install cmake ``` - [Eigen](https://gitlab.com/libeigen/eigen/-/releases/3.3.9) (version 3.3.9 or higher) ```bash cd eigen-3.3.9 mkdir build && cd build cmake .. sudo make install sudo ln -s /usr/local/include/eigen3 /usr/include/eigen3 sudo ln -s /usr/local/include/eigen3/Eigen /usr/local/include/Eigen ``` - [RBDL](https://github.com/rbdl/rbdl/releases/tag/v2.6.0) (version 2.6.0) ```bash cd rbdl-2.6.0 mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=Release .. sudo make install sudo sh -c "echo '/usr/local/lib' >> /etc/ld.so.conf" sudo ldconfig ``` ## Build ```bash # config //z1_controller/CMakeList.txt cd //z1_controller && mkdir build && cd build cmake .. make -j4 ``` ## Usage The default IP of the robot is 192.168.123.110, you need to change the IP of your PC before using the SDK so that your PC can ping to the robot. First, please connect the network cable between your PC and robot. Then run ifconfig in a terminal, you will find your port name. For example, enpxxx. ```bash sudo ifconfig enpxxx down # enpxxx is your PC port sudo ifconfig enpxxx 192.168.123.162/24 sudo ifconfig enpxxx up ping 192.168.123.110 ``` Then run program. ``` cd //z1_controller/build sudo ./z1_ctrl ``` - FSM(finite-state machine) | State | Keyswitch | Switchable | | ----------- | --------- | --------------------------- | | BACKTOSTART | ~ | 1 2 | | PASSIVE | 1 | ~ 2 3 = | | JOINTCTRL | 2 | ~ 1 3 4 5 6 7 8 9 0 - | | CARTESIAN | 3 | ~ 1 2 4 5 6 9 | | MoveJ | 4 | ~ 1 2 3 5 6 9 | | MoveL | 5 | ~ 1 2 3 4 6 9 | | MOVEC | 6 | ~ 1 2 3 4 5 9 | | TEACH | 7 | ~ 1 2 | | TEACHREPEAT | 8 | automatically switches to 2 | | SAVESTATE | 9 | automatically switches to 2 | | TOSTATE | 0 | automatically switches to 2 | | TRAJECTORY | - | ~ 1 2 | | CALIBRATION | = | automatically switches to 2 | | NEXT | ] | next state | #### FSM Details - Key ~ (BACKTOSTART) : All motors return to initial positions - Key1(PASSIVE): All motor enter passive state(The state of the Z1 startup) - Key2( JOINTCTRL) | Joint ID | 0 | 1 | 2 | 3 | 4 | 5 | Gripper | | :------------------------------ | :---------------------- | :---------------------- | :---------------------- | :---------------------- | :---------------------- | :---------------------- | ----------------------- | | Keyboard | Q/A | W/ S | D/ E | R/F | T/G | Y/H | up/down | | Joint Action
(right hand) | positive
/negative | positive
/negative | positive
/negative | positive
/negative | positive
/negative | positive
/negative | positive
/negative | - Key3(CARTESIAN): The reference coordinate system is cartesian | Keyboard | Q/A | W/S | E/D | R/F | T/G | Y/H | | ------------ | ---------------------- | ---------------- | ------------- | ----------------------- | ------------------------ | ---------------------- | | Key Function | forward
/backward | right
/left | up
/down | roll
(right hand) | pitch
(right hand) | yaw
(right hand) | - Key4(MoveJ): ``` Key4—— Enter the desired end pose(roll pitch yaw x y z)——The Z1 joint rotate to the joint target point(After Z1 arrived the target point, it automatically switches to the joint space control state) ``` - Key5(MoveL): ``` Key5——Enter the desired end pose(roll pitch yaw x y z)——The Z1 follows the generated straight trajectory to the target point(After Z1 arrived the target point, it automatically switches to the joint space control state) ``` - Key6(MoveC): ``` Key6——Enter the desired middle and end pose(roll pitch yaw x y z)——The Z1 follows the generated arc trajectory to the target point(After Z1 arrived the target point, it automatically switches to the joint space control state) ``` - Key7(TEACH): ``` Key7——Enter the teaching trajectory label —— Drag Z1 —— Press Key2 to complete teaching. ``` - Key8(TEACHREPEAT): ``` Key8———— Enter the saved teaching trajectory label—— Z1 repeate the teaching trajectory ``` - Key9(SAVESTATE): ``` Key9——Enter the current pose label —— Z1 automatically switches to the joint space control state ``` - Key0(TOSTATE): ``` Key0——Enter the pose label to save(After Z1 arrived the target point, it automatically switches to the joint space control state) ``` - Key -(TRAJECTORY): ``` Key - —— Z1 repeats in a written trajectory ``` - Key=(CALIBRATION); ``` Key= —— Set the current position as the initial position, and enter the joint space control state after setting ``` - Key ] (NEXT): used to debug joystick contrl ``` Key]—— Enter next state ``` ## SDK If you want to develop your own control methods of Z1, you can refer to the SDK(z1_sdk). We have written an example of keyboard control based on SDK, you can use it fllowing the steps below. ### State change - First, set(CTRL_PANEL SDK) # z1_ws/src/z1_controller/CMakeList.txt,and then rebuild the z1_ws to generate z1_ctrl, then open a teminal to run z1_ctrl ``` cd //z1_controller/build sudo ./z1_ctrl ``` - Sencond, build the z1_sdk, and then open another terminal to run example. ``` cd //z1_sdk && mkdir build && cd build cmake .. make -j4 ./example_state_send ``` ### Low level control ``` sudo ./z1_ctrl # Running in a terminal ./example_lowCmd_send # Running in another terminal ``` ### Keyboard control ``` sudo ./z1_ctrl # Running in a terminal ./example_keyboard_send # Running in another terminal ``` ### State control ``` sudo ./z1_ctrl # Running in a terminal ./example_keyboard_send # Running in another terminal ```