Skip to content
趙 漠居(Zhao, Moju) edited this page May 26, 2019 · 6 revisions

servo ID in each link:

joint_yaw: 1
joint_pitch: 2
gimbal_pitch: 3
gimbal_roll: 4

note: servo ID in spinal/SetBoardConfig : minus 1 (-1) from servo ID in each link (e.g. joint_yaw: 0)

inital phase:

  • check all neuron state by following command: $ rosservice call /get_board_info "{}"

Following is the result on 2018.12

boards: 
  - 
    slave_id: 1
    imu_send_data_flag: 0
    servos: 
      - 
        id: 1
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 2
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 3
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 0
        current_limit: 0
        send_data_flag: 0
      - 
        id: 4
        p_gain: 2500
        i_gain: 100
        d_gain: 16000
        profile_velocity: 110
        current_limit: 0
        send_data_flag: 0
  - 
    slave_id: 2
    imu_send_data_flag: 0
    servos: 
      - 
        id: 1
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 2
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 3
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 0
        current_limit: 0
        send_data_flag: 0
      - 
        id: 4
        p_gain: 2500
        i_gain: 100
        d_gain: 16000
        profile_velocity: 110
        current_limit: 0
        send_data_flag: 0
  - 
    slave_id: 3
    imu_send_data_flag: 0
    servos: 
      - 
        id: 1
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 2
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 10
        current_limit: 648
        send_data_flag: 1
      - 
        id: 3
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 0
        current_limit: 0
        send_data_flag: 0
      - 
        id: 4
        p_gain: 2500
        i_gain: 100
        d_gain: 16000
        profile_velocity: 110
        current_limit: 0
        send_data_flag: 0
  - 
    slave_id: 4
    imu_send_data_flag: 0
    servos: 
      - 
        id: 3
        p_gain: 2500
        i_gain: 100
        d_gain: 3000
        profile_velocity: 0
        current_limit: 0
        send_data_flag: 0
      - 
        id: 4
        p_gain: 2500
        i_gain: 100
        d_gain: 16000
        profile_velocity: 110
        current_limit: 0
        send_data_flag: 0
  • check servo state by following command: $ rostopic echo /servo/states -c
stamp: 
  secs: 1491045517
  nsecs:  35114374
servos: 
  - 
    index: 0
    angle: 4069
    temp: 30
    load: -3
    error: 0
  - 
    index: 1
    angle: 2010
    temp: 30
    load: 9
    error: 0
  - 
    index: 4
    angle: 4085
    temp: 28
    load: -8
    error: 0
  - 
    index: 5
    angle: 2038
    temp: 32
    load: -9
    error: 0
  - 
    index: 8
    angle: 4065
    temp: 29
    load: 8
    error: 0
  - 
    index: 9
    angle: 2039
    temp: 30
    load: -7
    error: 0
---

Note: the angle should be around 5, if the true joint angle is -1.57[rad], or should be around 4095 if the true joint angle is 1.57[rad].

  • set the local index 1 servo of No.2 neuron to 5 (neutral point).

calibration

joint

guarantee the enough tension for each joint, using the clamp as shown in following figure.

yaw: using following command (for neuron id 2) at the joint angles is ideally -1.57[rad]

$ rosserive call /set_board_info spinal/SetBoardInfo “command: 2 data: [2, 0, 5]”
Note: set a small offset (e.g. 5) from the true value 0, because of the different gear ratio.

pitch: using following command (for neuron id 2) at the joint angles is ideally 0[rad]

$ rosserive call /set_board_info spinal/SetBoardInfo “command: 2 data: [2, 1, 2047]”

gimbal

use following tool to make sure the gimbal module is level against the ground, then use following command.

$ rosserive call /set_board_info spinal/SetBoardInfo “command: 2 data: [2, 2, 2047]”
$ rosserive call /set_board_info spinal/SetBoardInfo “command: 2 data: [2, 3, 2047]”

Servo PID gain and velocity

joint

XH430-W350R

  • PID gains: [2500, 100, 3000], date: 2017.08
  • velocity: 25, date: 2019.03

gimbal pitch

MX28-AR

  • PID gains: [2500,100,3000], date: 2017.08
  • velocity: 0, date: 2017.08

gimbal roll

MX28-AR (link2, link3)

  • PID gains: [2500,100,16000], date: 2017.08
  • velocity: 110, date: 2017.08

XH430-W350R

  • PID gains: [1000,100,2500], date: 2019.02
  • velocity: 0, date: 2019.02 (note: this is the max speed, but still slower than other type servo)

XM430-W210R (link1), no reduction

  • PID gains: [1500,100,10000], date: 2019.05.26
  • velocity: 110, date: 2019.05.26

XM430-W210R (link4), no reduction

  • PID gains: [1500,100,6000], date: 2019.05.26
  • velocity: 110, date: 2019.05.26

XM430-W210R (link1/link4), with reduction (34-60)

  • PID gains: [1000,100,4000], date: 2019.05.27
  • velocity: 220, date: 2019.05.27
  • with rigid, no any dead zone