Hello,
I have a VESC Mini 4.12 50A, 2kW go-kart motor and a 10s20p battery in a pocket quad. The translation is adjusted in such a way that I get about 25km/h at full throttle and still get relatively good torque.
Now my problem, if I give full throttle when accelerating, the quad starts briefly and then stops accelerating with a jerk. This happens very often when going uphill. But if I try to accelerate slowly with the gas, then it doesn't switch off, but then again the problem is that I hardly get any torque from the engine because I give so little gas.
Can someone tell me if this is a hardware problem or if I've set something wrong?
Here is the XML for the motor:
<?xml version="1.0" encoding="UTF-8"?>
<MCConfiguration>
<pwm_mode>1</pwm_mode>
<comm_mode>0</comm_mode>
<motor_type>2</motor_type>
<sensor_mode>1</sensor_mode>
<l_current_max>75</l_current_max>
<l_current_min>-75</l_current_min>
<l_in_current_max>100</l_in_current_max>
<l_in_current_min>-100</l_in_current_min>
<l_abs_current_max>150</l_abs_current_max>
<l_min_erpm>-200000</l_min_erpm>
<l_max_erpm>200000</l_max_erpm>
<l_erpm_start>1</l_erpm_start>
<l_max_erpm_fbrake>300</l_max_erpm_fbrake>
<l_max_erpm_fbrake_cc>1500</l_max_erpm_fbrake_cc>
<l_min_vin>8</l_min_vin>
<l_max_vin>57</l_max_vin>
<l_battery_cut_start>31</l_battery_cut_start>
<l_battery_cut_end>29</l_battery_cut_end>
<l_slow_abs_current>1</l_slow_abs_current>
<l_temp_fet_start>85</l_temp_fet_start>
<l_temp_fet_end>100</l_temp_fet_end>
<l_temp_motor_start>85</l_temp_motor_start>
<l_temp_motor_end>100</l_temp_motor_end>
<l_temp_accel_dec>0.15</l_temp_accel_dec>
<l_min_duty>0.005</l_min_duty>
<l_max_duty>0.95</l_max_duty>
<l_watt_max>5000</l_watt_max>
<l_watt_min>-5000</l_watt_min>
<l_current_max_scale>1</l_current_max_scale>
<l_current_min_scale>1</l_current_min_scale>
<l_duty_start>1</l_duty_start>
<sl_min_erpm>150</sl_min_erpm>
<sl_min_erpm_cycle_int_limit>1100</sl_min_erpm_cycle_int_limit>
<sl_max_fullbreak_current_dir_change>10</sl_max_fullbreak_current_dir_change>
<sl_cycle_int_limit>468.27</sl_cycle_int_limit>
<sl_phase_advance_at_br>0.8</sl_phase_advance_at_br>
<sl_cycle_int_rpm_br>80000</sl_cycle_int_rpm_br>
<sl_bemf_coupling_k>454.5</sl_bemf_coupling_k>
<hall_table__0>-1</hall_table__0>
<hall_table__1>6</hall_table__1>
<hall_table__2>4</hall_table__2>
<hall_table__3>5</hall_table__3>
<hall_table__4>2</hall_table__4>
<hall_table__5>1</hall_table__5>
<hall_table__6>3</hall_table__6>
<hall_table__7>-1</hall_table__7>
<hall_sl_erpm>2000</hall_sl_erpm>
<foc_current_kp>0.0313</foc_current_kp>
<foc_current_ki>11.42</foc_current_ki>
<foc_f_sw>25000</foc_f_sw>
<foc_dt_us>0.12</foc_dt_us>
<foc_encoder_inverted>0</foc_encoder_inverted>
<foc_encoder_offset>180</foc_encoder_offset>
<foc_encoder_ratio>7</foc_encoder_ratio>
<foc_encoder_sin_gain>1</foc_encoder_sin_gain>
<foc_encoder_cos_gain>1</foc_encoder_cos_gain>
<foc_encoder_sin_offset>1.65</foc_encoder_sin_offset>
<foc_encoder_cos_offset>1.65</foc_encoder_cos_offset>
<foc_encoder_sincos_filter_constant>0.5</foc_encoder_sincos_filter_constant>
<foc_sensor_mode>2</foc_sensor_mode>
<foc_pll_kp>2000</foc_pll_kp>
<foc_pll_ki>30000</foc_pll_ki>
<foc_motor_l>3.131e-05</foc_motor_l>
<foc_motor_ld_lq_diff>0</foc_motor_ld_lq_diff>
<foc_motor_r>0.0114</foc_motor_r>
<foc_motor_flux_linkage>0.014925</foc_motor_flux_linkage>
<foc_observer_gain>4.49e+06</foc_observer_gain>
<foc_observer_gain_slow>0.05</foc_observer_gain_slow>
<foc_duty_dowmramp_kp>10</foc_duty_dowmramp_kp>
<foc_duty_dowmramp_ki>200</foc_duty_dowmramp_ki>
<foc_openloop_rpm>1000</foc_openloop_rpm>
<foc_openloop_rpm_low>0</foc_openloop_rpm_low>
<foc_d_gain_scale_start>0.9</foc_d_gain_scale_start>
<foc_d_gain_scale_max_mod>0.2</foc_d_gain_scale_max_mod>
<foc_sl_openloop_hyst>0.1</foc_sl_openloop_hyst>
<foc_sl_openloop_time_lock>0</foc_sl_openloop_time_lock>
<foc_sl_openloop_time_ramp>0.1</foc_sl_openloop_time_ramp>
<foc_sl_openloop_time>0.05</foc_sl_openloop_time>
<foc_hall_table__0>255</foc_hall_table__0>
<foc_hall_table__1>139</foc_hall_table__1>
<foc_hall_table__2>9</foc_hall_table__2>
<foc_hall_table__3>172</foc_hall_table__3>
<foc_hall_table__4>75</foc_hall_table__4>
<foc_hall_table__5>110</foc_hall_table__5>
<foc_hall_table__6>40</foc_hall_table__6>
<foc_hall_table__7>255</foc_hall_table__7>
<foc_hall_interp_erpm>500</foc_hall_interp_erpm>
<foc_sl_erpm>4000</foc_sl_erpm>
<foc_sample_v0_v7>0</foc_sample_v0_v7>
<foc_sample_high_current>0</foc_sample_high_current>
<foc_sat_comp>0</foc_sat_comp>
<foc_temp_comp>0</foc_temp_comp>
<foc_temp_comp_base_temp>25</foc_temp_comp_base_temp>
<foc_current_filter_const>0.1</foc_current_filter_const>
<foc_cc_decoupling>2</foc_cc_decoupling>
<foc_observer_type>0</foc_observer_type>
<foc_hfi_voltage_start>20</foc_hfi_voltage_start>
<foc_hfi_voltage_run>4</foc_hfi_voltage_run>
<foc_hfi_voltage_max>10</foc_hfi_voltage_max>
<foc_sl_erpm_hfi>2000</foc_sl_erpm_hfi>
<foc_hfi_start_samples>65</foc_hfi_start_samples>
<foc_hfi_obs_ovr_sec>0.001</foc_hfi_obs_ovr_sec>
<foc_hfi_samples>1</foc_hfi_samples>
<gpd_buffer_notify_left>200</gpd_buffer_notify_left>
<gpd_buffer_interpol>0</gpd_buffer_interpol>
<gpd_current_filter_const>0.1</gpd_current_filter_const>
<gpd_current_kp>0.03</gpd_current_kp>
<gpd_current_ki>50</gpd_current_ki>
<s_pid_kp>0.004</s_pid_kp>
<s_pid_ki>0.004</s_pid_ki>
<s_pid_kd>0.0001</s_pid_kd>
<s_pid_kd_filter>0.2</s_pid_kd_filter>
<s_pid_min_erpm>900</s_pid_min_erpm>
<s_pid_allow_braking>1</s_pid_allow_braking>
<s_pid_ramp_erpms_s>-1</s_pid_ramp_erpms_s>
<p_pid_kp>0.03</p_pid_kp>
<p_pid_ki>0</p_pid_ki>
<p_pid_kd>0.0004</p_pid_kd>
<p_pid_kd_filter>0.2</p_pid_kd_filter>
<p_pid_ang_div>1</p_pid_ang_div>
<cc_startup_boost_duty>0.01</cc_startup_boost_duty>
<cc_min_current>0.05</cc_min_current>
<cc_gain>0.0046</cc_gain>
<cc_ramp_step_max>0.04</cc_ramp_step_max>
<m_fault_stop_time_ms>500</m_fault_stop_time_ms>
<m_duty_ramp_step>0.02</m_duty_ramp_step>
<m_current_backoff_gain>0.5</m_current_backoff_gain>
<m_encoder_counts>8192</m_encoder_counts>
<m_sensor_port_mode>0</m_sensor_port_mode>
<m_invert_direction>1</m_invert_direction>
<m_drv8301_oc_mode>3</m_drv8301_oc_mode>
<m_drv8301_oc_adj>31</m_drv8301_oc_adj>
<m_bldc_f_sw_min>3000</m_bldc_f_sw_min>
<m_bldc_f_sw_max>35000</m_bldc_f_sw_max>
<m_dc_f_sw>25000</m_dc_f_sw>
<m_ntc_motor_beta>3380</m_ntc_motor_beta>
<m_out_aux_mode>0</m_out_aux_mode>
<m_motor_temp_sens_type>0</m_motor_temp_sens_type>
<m_ptc_motor_coeff>0.61</m_ptc_motor_coeff>
<m_hall_extra_samples>1</m_hall_extra_samples>
<si_motor_poles>14</si_motor_poles>
<si_gear_ratio>2.769</si_gear_ratio>
<si_wheel_diameter>0.37</si_wheel_diameter>
<si_battery_type>0</si_battery_type>
<si_battery_cells>10</si_battery_cells>
<si_battery_ah>33.5</si_battery_ah>
<motor_brand>Unnamed</motor_brand>
<motor_model>Not Specified</motor_model>
<motor_weight>0</motor_weight>
<motor_poles>14</motor_poles>
<motor_sensor_type>0</motor_sensor_type>
<motor_description><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Roboto'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">A motor description can be edited here.</p></body></html></motor_description>
<motor_loss_torque>0.03</motor_loss_torque>
<motor_quality_bearings>0</motor_quality_bearings>
<motor_quality_magnets>0</motor_quality_magnets>
<motor_quality_construction>0</motor_quality_construction>
<motor_quality_description><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'Roboto'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Some comments about the motor quality. Images can be added as well.</p></body></html></motor_quality_description>
<bms.type>1</bms.type>
<bms.t_limit_start>45</bms.t_limit_start>
<bms.t_limit_end>65</bms.t_limit_end>
<bms.soc_limit_start>0.05</bms.soc_limit_start>
<bms.soc_limit_end>0</bms.soc_limit_end>
</MCConfiguration>
And here for the app config:
<?xml version="1.0" encoding="UTF-8"?>
<APPConfiguration>
<ConfigVersion>2</ConfigVersion>
<controller_id>12</controller_id>
<timeout_msec>1000</timeout_msec>
<timeout_brake_current>0</timeout_brake_current>
<send_can_status>4</send_can_status>
<send_can_status_rate_hz>50</send_can_status_rate_hz>
<can_baud_rate>2</can_baud_rate>
<pairing_done>0</pairing_done>
<permanent_uart_enabled>1</permanent_uart_enabled>
<shutdown_mode>7</shutdown_mode>
<can_mode>0</can_mode>
<uavcan_esc_index>0</uavcan_esc_index>
<uavcan_raw_mode>0</uavcan_raw_mode>
<app_to_use>2</app_to_use>
<app_ppm_conf.ctrl_type>0</app_ppm_conf.ctrl_type>
<app_ppm_conf.pid_max_erpm>15000</app_ppm_conf.pid_max_erpm>
<app_ppm_conf.hyst>0.15</app_ppm_conf.hyst>
<app_ppm_conf.pulse_start>1</app_ppm_conf.pulse_start>
<app_ppm_conf.pulse_end>2</app_ppm_conf.pulse_end>
<app_ppm_conf.pulse_center>1.5</app_ppm_conf.pulse_center>
<app_ppm_conf.median_filter>1</app_ppm_conf.median_filter>
<app_ppm_conf.safe_start>1</app_ppm_conf.safe_start>
<app_ppm_conf.throttle_exp>0</app_ppm_conf.throttle_exp>
<app_ppm_conf.throttle_exp_brake>0</app_ppm_conf.throttle_exp_brake>
<app_ppm_conf.throttle_exp_mode>2</app_ppm_conf.throttle_exp_mode>
<app_ppm_conf.ramp_time_pos>0.4</app_ppm_conf.ramp_time_pos>
<app_ppm_conf.ramp_time_neg>0.2</app_ppm_conf.ramp_time_neg>
<app_ppm_conf.multi_esc>1</app_ppm_conf.multi_esc>
<app_ppm_conf.tc>0</app_ppm_conf.tc>
<app_ppm_conf.tc_max_diff>3000</app_ppm_conf.tc_max_diff>
<app_ppm_conf.max_erpm_for_dir>4000</app_ppm_conf.max_erpm_for_dir>
<app_ppm_conf.smart_rev_max_duty>0.07</app_ppm_conf.smart_rev_max_duty>
<app_ppm_conf.smart_rev_ramp_time>3</app_ppm_conf.smart_rev_ramp_time>
<app_adc_conf.ctrl_type>5</app_adc_conf.ctrl_type>
<app_adc_conf.hyst>0.15</app_adc_conf.hyst>
<app_adc_conf.voltage_start>0.89</app_adc_conf.voltage_start>
<app_adc_conf.voltage_end>1.75</app_adc_conf.voltage_end>
<app_adc_conf.voltage_center>1.32</app_adc_conf.voltage_center>
<app_adc_conf.voltage2_start>0</app_adc_conf.voltage2_start>
<app_adc_conf.voltage2_end>3.3</app_adc_conf.voltage2_end>
<app_adc_conf.use_filter>1</app_adc_conf.use_filter>
<app_adc_conf.safe_start>1</app_adc_conf.safe_start>
<app_adc_conf.cc_button_inverted>0</app_adc_conf.cc_button_inverted>
<app_adc_conf.rev_button_inverted>0</app_adc_conf.rev_button_inverted>
<app_adc_conf.voltage_inverted>0</app_adc_conf.voltage_inverted>
<app_adc_conf.voltage2_inverted>1</app_adc_conf.voltage2_inverted>
<app_adc_conf.throttle_exp>-1.25</app_adc_conf.throttle_exp>
<app_adc_conf.throttle_exp_brake>0</app_adc_conf.throttle_exp_brake>
<app_adc_conf.throttle_exp_mode>0</app_adc_conf.throttle_exp_mode>
<app_adc_conf.ramp_time_pos>0.1</app_adc_conf.ramp_time_pos>
<app_adc_conf.ramp_time_neg>0.1</app_adc_conf.ramp_time_neg>
<app_adc_conf.multi_esc>1</app_adc_conf.multi_esc>
<app_adc_conf.tc>0</app_adc_conf.tc>
<app_adc_conf.tc_max_diff>3000</app_adc_conf.tc_max_diff>
<app_adc_conf.update_rate_hz>500</app_adc_conf.update_rate_hz>
<app_uart_baudrate>115200</app_uart_baudrate>
<app_chuk_conf.ctrl_type>1</app_chuk_conf.ctrl_type>
<app_chuk_conf.hyst>0.15</app_chuk_conf.hyst>
<app_chuk_conf.ramp_time_pos>0.4</app_chuk_conf.ramp_time_pos>
<app_chuk_conf.ramp_time_neg>0.2</app_chuk_conf.ramp_time_neg>
<app_chuk_conf.stick_erpm_per_s_in_cc>3000</app_chuk_conf.stick_erpm_per_s_in_cc>
<app_chuk_conf.throttle_exp>0</app_chuk_conf.throttle_exp>
<app_chuk_conf.throttle_exp_brake>0</app_chuk_conf.throttle_exp_brake>
<app_chuk_conf.throttle_exp_mode>2</app_chuk_conf.throttle_exp_mode>
<app_chuk_conf.multi_esc>1</app_chuk_conf.multi_esc>
<app_chuk_conf.tc>0</app_chuk_conf.tc>
<app_chuk_conf.tc_max_diff>3000</app_chuk_conf.tc_max_diff>
<app_chuk_conf.use_smart_rev>1</app_chuk_conf.use_smart_rev>
<app_chuk_conf.smart_rev_max_duty>0.07</app_chuk_conf.smart_rev_max_duty>
<app_chuk_conf.smart_rev_ramp_time>3</app_chuk_conf.smart_rev_ramp_time>
<app_nrf_conf.speed>1</app_nrf_conf.speed>
<app_nrf_conf.power>3</app_nrf_conf.power>
<app_nrf_conf.crc_type>1</app_nrf_conf.crc_type>
<app_nrf_conf.retry_delay>0</app_nrf_conf.retry_delay>
<app_nrf_conf.retries>3</app_nrf_conf.retries>
<app_nrf_conf.channel>76</app_nrf_conf.channel>
<app_nrf_conf.address__0>198</app_nrf_conf.address__0>
<app_nrf_conf.address__1>199</app_nrf_conf.address__1>
<app_nrf_conf.address__2>0</app_nrf_conf.address__2>
<app_nrf_conf.send_crc_ack>1</app_nrf_conf.send_crc_ack>
<app_balance_conf.kp>0</app_balance_conf.kp>
<app_balance_conf.ki>0</app_balance_conf.ki>
<app_balance_conf.kd>0</app_balance_conf.kd>
<app_balance_conf.hertz>1000</app_balance_conf.hertz>
<app_balance_conf.fault_pitch>20</app_balance_conf.fault_pitch>
<app_balance_conf.fault_roll>45</app_balance_conf.fault_roll>
<app_balance_conf.fault_duty>0.9</app_balance_conf.fault_duty>
<app_balance_conf.fault_adc1>0</app_balance_conf.fault_adc1>
<app_balance_conf.fault_adc2>0</app_balance_conf.fault_adc2>
<app_balance_conf.fault_delay_pitch>0</app_balance_conf.fault_delay_pitch>
<app_balance_conf.fault_delay_roll>0</app_balance_conf.fault_delay_roll>
<app_balance_conf.fault_delay_duty>0</app_balance_conf.fault_delay_duty>
<app_balance_conf.fault_delay_switch_half>0</app_balance_conf.fault_delay_switch_half>
<app_balance_conf.fault_delay_switch_full>0</app_balance_conf.fault_delay_switch_full>
<app_balance_conf.fault_adc_half_erpm>1000</app_balance_conf.fault_adc_half_erpm>
<app_balance_conf.tiltback_angle>15</app_balance_conf.tiltback_angle>
<app_balance_conf.tiltback_speed>5</app_balance_conf.tiltback_speed>
<app_balance_conf.tiltback_duty>0.75</app_balance_conf.tiltback_duty>
<app_balance_conf.tiltback_high_voltage>200</app_balance_conf.tiltback_high_voltage>
<app_balance_conf.tiltback_low_voltage>0</app_balance_conf.tiltback_low_voltage>
<app_balance_conf.tiltback_constant>0</app_balance_conf.tiltback_constant>
<app_balance_conf.tiltback_constant_erpm>500</app_balance_conf.tiltback_constant_erpm>
<app_balance_conf.startup_pitch_tolerance>20</app_balance_conf.startup_pitch_tolerance>
<app_balance_conf.startup_roll_tolerance>8</app_balance_conf.startup_roll_tolerance>
<app_balance_conf.startup_speed>30</app_balance_conf.startup_speed>
<app_balance_conf.deadzone>0</app_balance_conf.deadzone>
<app_balance_conf.current_boost>0</app_balance_conf.current_boost>
<app_balance_conf.multi_esc>0</app_balance_conf.multi_esc>
<app_balance_conf.yaw_kp>0</app_balance_conf.yaw_kp>
<app_balance_conf.yaw_ki>0</app_balance_conf.yaw_ki>
<app_balance_conf.yaw_kd>0</app_balance_conf.yaw_kd>
<app_balance_conf.roll_steer_kp>0</app_balance_conf.roll_steer_kp>
<app_balance_conf.roll_steer_erpm_kp>0</app_balance_conf.roll_steer_erpm_kp>
<app_balance_conf.brake_current>0</app_balance_conf.brake_current>
<app_balance_conf.yaw_current_clamp>0</app_balance_conf.yaw_current_clamp>
<app_balance_conf.setpoint_pitch_filter>0</app_balance_conf.setpoint_pitch_filter>
<app_balance_conf.setpoint_target_filter>1</app_balance_conf.setpoint_target_filter>
<app_balance_conf.setpoint_filter_clamp>8</app_balance_conf.setpoint_filter_clamp>
<app_balance_conf.kd_pt1_frequency>0</app_balance_conf.kd_pt1_frequency>
<app_pas_conf.ctrl_type>0</app_pas_conf.ctrl_type>
<app_pas_conf.sensor_type>0</app_pas_conf.sensor_type>
<app_pas_conf.pedal_rpm_start>10</app_pas_conf.pedal_rpm_start>
<app_pas_conf.pedal_rpm_end>180</app_pas_conf.pedal_rpm_end>
<app_pas_conf.invert_pedal_direction>0</app_pas_conf.invert_pedal_direction>
<app_pas_conf.magnets>24</app_pas_conf.magnets>
<app_pas_conf.use_filter>1</app_pas_conf.use_filter>
<app_pas_conf.current_scaling>0.1</app_pas_conf.current_scaling>
<app_pas_conf.ramp_time_pos>0.6</app_pas_conf.ramp_time_pos>
<app_pas_conf.ramp_time_neg>0.3</app_pas_conf.ramp_time_neg>
<app_pas_conf.update_rate_hz>500</app_pas_conf.update_rate_hz>
<imu_conf.type>1</imu_conf.type>
<imu_conf.mode>0</imu_conf.mode>
<imu_conf.sample_rate_hz>200</imu_conf.sample_rate_hz>
<imu_conf.accel_confidence_decay>1</imu_conf.accel_confidence_decay>
<imu_conf.mahony_kp>0.3</imu_conf.mahony_kp>
<imu_conf.mahony_ki>0</imu_conf.mahony_ki>
<imu_conf.madgwick_beta>0.1</imu_conf.madgwick_beta>
<imu_conf.rot_roll>0</imu_conf.rot_roll>
<imu_conf.rot_pitch>0</imu_conf.rot_pitch>
<imu_conf.rot_yaw>0</imu_conf.rot_yaw>
<imu_conf.accel_offsets__0>0</imu_conf.accel_offsets__0>
<imu_conf.accel_offsets__1>0</imu_conf.accel_offsets__1>
<imu_conf.accel_offsets__2>0</imu_conf.accel_offsets__2>
<imu_conf.gyro_offsets__0>0</imu_conf.gyro_offsets__0>
<imu_conf.gyro_offsets__1>0</imu_conf.gyro_offsets__1>
<imu_conf.gyro_offsets__2>0</imu_conf.gyro_offsets__2>
<imu_conf.gyro_offset_comp_fact__0>0</imu_conf.gyro_offset_comp_fact__0>
<imu_conf.gyro_offset_comp_fact__1>0</imu_conf.gyro_offset_comp_fact__1>
<imu_conf.gyro_offset_comp_fact__2>0</imu_conf.gyro_offset_comp_fact__2>
<imu_conf.gyro_offset_comp_clamp>5</imu_conf.gyro_offset_comp_clamp>
</APPConfiguration>
I'd plug in a phone or laptop while it's running and look for error codes. That's probably the quickest way. I'd guess you're hitting 50 amps and it's cutting out.
You may want to lower these settings that seems to be a little to much for that hardware.
<l_current_max>75</l_current_max>
<l_current_min>-75</l_current_min>
<l_in_current_max>100</l_in_current_max>
<l_in_current_min>-100</l_in_current_min>
<l_abs_current_max>150</l_abs_current_max>
NextGen FOC High voltage 144v/34s, 30kw (https://vesc-project.com/node/1477)