|
5 | 5 | #define DBG_LEVEL DBG_LOG |
6 | 6 | #include <rtdbg.h> |
7 | 7 |
|
| 8 | +#define DEFAULT_VELOCITY_LINEAR_X 0.2 |
| 9 | +#define DEFAULT_VELOCITY_LINEAR_Y 0.2 |
| 10 | +#define DEFAULT_VELOCITY_ANGULAR_Z 1 |
| 11 | + |
8 | 12 | chassis_t chassis_create(wheel_t* c_wheels, kinematics_t c_kinematics) |
9 | 13 | { |
10 | 14 | // Malloc memory for new chassis |
@@ -93,40 +97,115 @@ rt_err_t chassis_update(chassis_t chas) |
93 | 97 | return RT_EOK; |
94 | 98 | } |
95 | 99 |
|
96 | | -static void chassis_stop(command_info_t info) |
| 100 | +rt_err_t chassis_straight(chassis_t chas, float linear_x) |
97 | 101 | { |
98 | | - rt_kprintf("stop cmd\n"); |
| 102 | + struct velocity target_velocity = { |
| 103 | + .linear_x = linear_x, |
| 104 | + .linear_y = 0.0f, |
| 105 | + .angular_z = 0.0f |
| 106 | + }; |
| 107 | + rt_int16_t* res_rpm = kinematics_get_rpm(*chas->c_kinematics, target_velocity); |
| 108 | + return chassis_set_rpm(chas, res_rpm); |
99 | 109 | } |
100 | | -static void chassis_forward(command_info_t info) |
101 | | -{ |
102 | 110 |
|
103 | | -} |
104 | | -static void chassis_backward(command_info_t info) |
| 111 | +rt_err_t chassis_move(chassis_t chas, float linear_y) |
105 | 112 | { |
| 113 | + struct velocity target_velocity = { |
| 114 | + .linear_x = 0.0f, |
| 115 | + .linear_y = linear_y, |
| 116 | + .angular_z = 0.0f |
| 117 | + }; |
| 118 | + rt_int16_t* res_rpm = kinematics_get_rpm(*chas->c_kinematics, target_velocity); |
| 119 | + return chassis_set_rpm(chas, res_rpm); |
| 120 | +} |
106 | 121 |
|
| 122 | +rt_err_t chassis_rotate(chassis_t chas, float angular_z) |
| 123 | +{ |
| 124 | + struct velocity target_velocity = { |
| 125 | + .linear_x = 0.0f, |
| 126 | + .linear_y = 0.0f, |
| 127 | + .angular_z = angular_z |
| 128 | + }; |
| 129 | + rt_int16_t* res_rpm = kinematics_get_rpm(*chas->c_kinematics, target_velocity); |
| 130 | + return chassis_set_rpm(chas, res_rpm); |
107 | 131 | } |
108 | | -static void chassis_turn_left(command_info_t info) |
| 132 | + |
| 133 | +static void chassis_stop(command_info_t info, void *param, rt_uint16_t size) |
109 | 134 | { |
| 135 | + if (info->target != RT_NULL) |
| 136 | + { |
| 137 | + chassis_straight(info->target, 0); |
| 138 | + } |
| 139 | +} |
110 | 140 |
|
| 141 | +static void chassis_forward(command_info_t info, void *param, rt_uint16_t size) |
| 142 | +{ |
| 143 | + if (info->target != RT_NULL) |
| 144 | + { |
| 145 | + chassis_straight(info->target, DEFAULT_VELOCITY_LINEAR_X); |
| 146 | + } |
111 | 147 | } |
112 | | -static void chassis_turn_right(command_info_t info) |
| 148 | + |
| 149 | +static void chassis_backward(command_info_t info, void *param, rt_uint16_t size) |
113 | 150 | { |
| 151 | + if (info->target != RT_NULL) |
| 152 | + { |
| 153 | + chassis_straight(info->target, -DEFAULT_VELOCITY_LINEAR_X); |
| 154 | + } |
| 155 | +} |
114 | 156 |
|
| 157 | +static void chassis_rotate_left(command_info_t info, void *param, rt_uint16_t size) |
| 158 | +{ |
| 159 | + if (info->target != RT_NULL) |
| 160 | + { |
| 161 | + chassis_rotate(info->target, DEFAULT_VELOCITY_ANGULAR_Z); |
| 162 | + } |
115 | 163 | } |
116 | | -static void chassis_move_left(command_info_t info) |
| 164 | + |
| 165 | +static void chassis_rotate_right(command_info_t info, void *param, rt_uint16_t size) |
117 | 166 | { |
| 167 | + if (info->target != RT_NULL) |
| 168 | + { |
| 169 | + chassis_rotate(info->target, -DEFAULT_VELOCITY_ANGULAR_Z); |
| 170 | + } |
| 171 | +} |
118 | 172 |
|
| 173 | +static void chassis_move_left(command_info_t info, void *param, rt_uint16_t size) |
| 174 | +{ |
| 175 | + if (info->target != RT_NULL) |
| 176 | + { |
| 177 | + chassis_move(info->target, DEFAULT_VELOCITY_LINEAR_Y); |
| 178 | + } |
119 | 179 | } |
120 | | -static void chassis_move_right(command_info_t info) |
| 180 | + |
| 181 | +static void chassis_move_right(command_info_t info, void *param, rt_uint16_t size) |
121 | 182 | { |
| 183 | + if (info->target != RT_NULL) |
| 184 | + { |
| 185 | + chassis_move(info->target, DEFAULT_VELOCITY_LINEAR_Y); |
| 186 | + } |
| 187 | +} |
122 | 188 |
|
| 189 | +static void chassis_forward_with_param(command_info_t info, void *param, rt_uint16_t size) |
| 190 | +{ |
| 191 | + if (info->target != RT_NULL) |
| 192 | + { |
| 193 | + if (size == sizeof(struct cmd_dt_velocity)) |
| 194 | + { |
| 195 | + struct cmd_dt_velocity *velocity_info = (struct cmd_dt_velocity *)param; |
| 196 | + chassis_straight(info->target, velocity_info->data.linear_x); |
| 197 | + } |
| 198 | + } |
123 | 199 | } |
124 | 200 |
|
125 | | -static void chassis_command_register(void) |
| 201 | +static int chassis_command_register(void) |
126 | 202 | { |
127 | 203 | // TODO |
128 | 204 | command_register(COMMAND_CAR_STOP, chassis_stop); |
129 | 205 |
|
| 206 | + command_register(COMMAND_CAR_FORWARD_WITH_PARAM, chassis_forward_with_param); |
| 207 | + |
| 208 | + return RT_EOK; |
130 | 209 | } |
131 | 210 |
|
132 | 211 | INIT_APP_EXPORT(chassis_command_register); |
0 commit comments