@@ -186,25 +186,90 @@ static void chassis_move_right(command_info_t info, void *param, rt_uint16_t siz
186186 }
187187}
188188
189+ // TODO
190+
189191static void chassis_forward_with_param (command_info_t info , void * param , rt_uint16_t size )
190192{
191193 if (info -> target != RT_NULL )
192194 {
193195 if (size == sizeof (struct cmd_dt_velocity ))
194196 {
195197 struct cmd_dt_velocity * velocity_info = (struct cmd_dt_velocity * )param ;
198+ if (velocity_info -> data .linear_x < 0 )
199+ {
200+ return ;
201+ }
196202 chassis_straight (info -> target , velocity_info -> data .linear_x );
197203 }
198204 }
199205}
200206
207+ // TODO
208+
209+ static void chassis_set_linear_x (command_info_t info , void * param , rt_uint16_t size )
210+ {
211+ if (info -> target != RT_NULL )
212+ {
213+ if (size == sizeof (struct cmd_dt_velocity ))
214+ {
215+ struct cmd_dt_velocity * velocity_info = (struct cmd_dt_velocity * )param ;
216+ chassis_straight (info -> target , velocity_info -> data .linear_x );
217+ }
218+ }
219+ }
220+
221+ static void chassis_set_pid (command_info_t info , void * param , rt_uint16_t size )
222+ {
223+ if (info -> target != RT_NULL )
224+ {
225+ if (size == sizeof (struct cmd_dt_pid ))
226+ {
227+ chassis_t chas = (chassis_t )info -> target ;
228+ struct cmd_dt_pid * pid_info = (struct cmd_dt_pid * )param ;
229+ struct controller_param parameter = {
230+ .data .pid .kp = pid_info -> kp ,
231+ .data .pid .ki = pid_info -> ki ,
232+ .data .pid .kd = pid_info -> kd
233+ };
234+
235+ switch (pid_info -> id )
236+ {
237+ case PID_ID_WHEEL_0 :
238+ controller_set_param (chas -> c_wheels [0 ]-> w_controller , & parameter );
239+ break ;
240+ case PID_ID_WHEEL_1 :
241+ controller_set_param (chas -> c_wheels [1 ]-> w_controller , & parameter );
242+ break ;
243+ case PID_ID_WHEEL_2 :
244+ if (chas -> c_kinematics -> total_wheels > 2 )
245+ {
246+ controller_set_param (chas -> c_wheels [2 ]-> w_controller , & parameter );
247+ }
248+ break ;
249+ case PID_ID_WHEEL_3 :
250+ if (chas -> c_kinematics -> total_wheels > 3 )
251+ {
252+ controller_set_param (chas -> c_wheels [3 ]-> w_controller , & parameter );
253+ }
254+ break ;
255+ default :
256+ break ;
257+ }
258+ }
259+ }
260+ }
261+
201262static int chassis_command_register (void )
202263{
203264 // TODO
204265 command_register (COMMAND_CAR_STOP , chassis_stop );
205266
206267 command_register (COMMAND_CAR_FORWARD_WITH_PARAM , chassis_forward_with_param );
207268
269+ command_register (COMMAND_SET_CAR_VELOCITY_LINEAR_X , chassis_set_linear_x );
270+
271+ command_register (COMMAND_SET_PID , chassis_set_pid );
272+
208273 return RT_EOK ;
209274}
210275
0 commit comments