Browse Source

优化宏定义并把手动四个方向移动挪到custom

paint_robot_new-v1.5
Lizongdi 1 week ago
parent
commit
3befb9be59
  1. 56
      RBcore/BHBF.c
  2. 16
      RBcore/include/BHBF.h
  3. 2
      RBcore/msp_Timer.c
  4. 2
      README.md
  5. 77
      project/paint_robot_new/paint_robot_new.c
  6. 16
      project/paint_robot_new/paint_robot_new_motors.c

56
RBcore/BHBF.c

@ -54,63 +54,13 @@ static void RBcore_ModuleHandler(const Msg_t *pstMsg)
{
return;
}
static int iVehicleSpeed = -1; // 表示由RD1转换来的速度值
int aiMotorSpeed[2] = {0}; //0索引表示左,1索引表示右,多轮时到对应motor的MOTOR_CMD_SET_SPEED命令自行处理
switch (pstMsg->m_uiMsgID)
{
case RBCORE_CMD_STOP_ALL:
{
MsgCenter_SendTo(MODULE_NAME_MOTOR, COMMON_CMD_STOP_ALL, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_CUSTOM, COMMON_CMD_STOP_ALL, NULL, 0);
break;
}
case RBCORE_CMD_MANUAL_FORWARD:
{
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = iVehicleSpeed * 10;
aiMotorSpeed[1] = iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
break;
}
case RBCORE_CMD_MANUAL_BACKWARD:
{
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = -iVehicleSpeed * 10;
aiMotorSpeed[1] = -iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
break;
}
case RBCORE_CMD_MANUAL_TURNLEFT:
{
if (g_stCV.LeftTurnSpeed > 0 && g_stCV.RightTurnSpeed > 0)
{
aiMotorSpeed[0] = -g_stCV.LeftTurnSpeed;
aiMotorSpeed[1] = g_stCV.RightTurnSpeed;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
break;
}
case RBCORE_CMD_MANUAL_TURNRIGHT:
{
if (g_stCV.LeftTurnSpeed > 0 && g_stCV.RightTurnSpeed > 0)
{
aiMotorSpeed[0] = g_stCV.LeftTurnSpeed;
aiMotorSpeed[1] = -g_stCV.RightTurnSpeed;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
break;
}
case RBCORE_GET_VEHICLE_SPEED:
{
if (pstMsg->m_uiDataLen >= sizeof(int))
{
RD_MEMCPY(&iVehicleSpeed, pstMsg->m_aucData, sizeof(int));
}
MsgCenter_SendTo(MODULE_NAME_MOTOR, CMD_STOP_ALL, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_CUSTOM, CMD_STOP_ALL, NULL, 0);
break;
}
default:

16
RBcore/include/BHBF.h

@ -75,24 +75,14 @@ extern "C"{
#define MODULE_NAME_TIMER "timer"
typedef enum {
COMMON_CMD_SHOW_INFO, // 终端信息展示
COMMON_CMD_STOP_ALL, // 机器人停止(建议各个控制硬件的模块都要实现)
MOTOR_START = 0x0100, // *电机命令开始*
CMD_SHOW_INFO, // 终端信息展示
CMD_STOP_ALL, // 机器人停止(建议各个控制硬件的模块都要实现)
GET_VEHICLE_SPEED, // 获取机器人速度(内部速度归一化)
MOTOR_SET_SPEED, // 设置速度
MOTOR_POWER_ENABLE, // 电机上电
MOTOR_POWER_DISABLE, // 电机失电
MOTOR_GET_VEHICLE_SPEED, // 获取机器人速度(内部速度归一化)
MOTOR_CMD_STOP_AFTER, // 先关枪后停车
RBCORE_START = 0x0200, // *机器人共性命令开始*
RBCORE_CMD_STOP_ALL, // 此命令统一调用机器人各个模块的COMMON_CMD_STOP_ALL
RBCORE_CMD_MANUAL_FORWARD, // 机器人手动前进
RBCORE_CMD_MANUAL_BACKWARD, // 机器人手动后退
RBCORE_CMD_MANUAL_TURNLEFT, // 机器人手动左转
RBCORE_CMD_MANUAL_TURNRIGHT, // 机器人手动右转
RBCORE_GET_VEHICLE_SPEED, // 获取机器人速度(内部速度归一化)
CUSTOM_START = 0x0300, // *机器人特性命令开始*
CUSTOM_GET_PV, // 获取PV
CUSTOM_GET_MK32, // 获取MK32
CUSTOM_GET_TL720D_ROLL, // 获取陀螺仪横滚角(IV显示)

2
RBcore/msp_Timer.c

@ -159,7 +159,7 @@ static void Timer_ModuleHandler(const Msg_t *pstMsg)
}
break;
}
case COMMON_CMD_SHOW_INFO:
case CMD_SHOW_INFO:
{
lua_print("\ng_dletAngle = %d\nuiLastSendTick = %d\nbTimerStarted = %d\ng_RF_Angle_Roll = %d\n",
g_dletAngle, uiLastSendTick, bTimerStarted, g_RF_Angle_Roll);

2
README.md

@ -18,7 +18,7 @@ c1((按下急停))
end
a((Read_MK32))-->CUSTOM_GET_MK32-->MOTOR_POWER_ENABLE-->CUSTOM_GET_MOTOR_OK-->c0
c1-->MOTOR_POWER_DISABLE-->m0
c1-->RBCORE_CMD_STOP_ALL-->COMMON_CMD_STOP_ALL
c1-->RBCORE_CMD_STOP_ALL-->CMD_STOP_ALL
```

77
project/paint_robot_new/paint_robot_new.c

@ -189,7 +189,7 @@ static void Move_Halt_AngleError(void)
{
if (Rd_GetTime() - uiLastTime >= 600 * g_stCV.Paint_Gun_Shutdown_Distance / g_stIV.RobotMoveSpeed)
{
MsgCenter_SendTo(MODULE_NAME_MOTOR, COMMON_CMD_STOP_ALL, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_MOTOR, CMD_STOP_ALL, NULL, 0);
}
return;
}
@ -202,7 +202,7 @@ static void Move_Halt_AngleError(void)
{
if(Rd_GetTime() - g_stAngleError_Ctl.m_ipaintOffCount > 1000)
{
MsgCenter_SendTo(MODULE_NAME_CUSTOM, COMMON_CMD_STOP_ALL, NULL, 0);//先关枪
MsgCenter_SendTo(MODULE_NAME_CUSTOM, CMD_STOP_ALL, NULL, 0);//先关枪
g_stAngleError_Ctl.m_iAnglelock = 1;
return;
}
@ -252,8 +252,16 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
if (pstMsg->m_uiDataLen >= sizeof(uiFailtCode))
{
RD_MEMCPY(uiFailtCode, pstMsg->m_aucData, sizeof(uiFailtCode));
if (uiFailtCode[0] == 1) g_stIV.Left_Motor_Err = uiFailtCode[1];
else g_stIV.Right_Motor_Err = uiFailtCode[1];
if (uiFailtCode[0] == 1)
{
g_stIV.Left_Motor_Err = uiFailtCode[1];
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_LEFT_MOTOR, NULL, 0);
}
else
{
g_stIV.Right_Motor_Err = uiFailtCode[1];
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_RIGHT_MOTOR, NULL, 0);
}
}
break;
}
@ -266,6 +274,11 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
if (1 == iCurrentSpeed[0])
{
g_stIV.CurrentSpeed = iCurrentSpeed[1];
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_LEFT_MOTOR, NULL, 0);
}
else
{
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_RIGHT_MOTOR, NULL, 0);
}
}
break;
@ -301,7 +314,7 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
g_ichangLineState = 1; // 走到这说明换道第一次转完了
break;
}
case COMMON_CMD_STOP_ALL:
case CMD_STOP_ALL:
{
HAL_GPIO_WritePin(OUT_1_GPIO_Port, OUT_1_Pin, 1);
g_stAngleError_Ctl.m_iPaintState = 1;
@ -382,8 +395,7 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
iVehicleSpeed = g_stCV.Speed_m_per_min*iSpeedSelection/30;
}
g_stIV.RobotMoveSpeed = iVehicleSpeed;
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_GET_VEHICLE_SPEED, (void *)&iVehicleSpeed, sizeof(int));
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_GET_VEHICLE_SPEED, (void *)&iVehicleSpeed, sizeof(int));
MsgCenter_SendTo(MODULE_NAME_MOTOR, GET_VEHICLE_SPEED, (void *)&iVehicleSpeed, sizeof(int));
Move_Halt_AngleError();
@ -459,12 +471,18 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
CH13_S2_Value = g_stMK32.CH13_S2;
}
int aiMotorSpeed[2] = {0}; //0索引表示左,1索引表示右,多轮时到对应motor的MOTOR_CMD_SET_SPEED命令自行处理
// 自动巡航
if (g_stMK32.CH5_SB == -1000)
{
if (g_stPV.RunMode == 1)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_FORWARD, NULL, 0);
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = iVehicleSpeed * 10;
aiMotorSpeed[1] = iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else if (g_stPV.RunMode == 2 || g_stPV.RunMode == 3)
{
@ -485,7 +503,12 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
{
if (g_stPV.RunMode == 1)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_BACKWARD, NULL, 0);
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = -iVehicleSpeed * 10;
aiMotorSpeed[1] = -iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else if (g_stPV.RunMode == 2 || g_stPV.RunMode == 3)
{
@ -512,7 +535,7 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
}
else
{
MsgCenter_SendTo(MODULE_NAME_MOTOR, COMMON_CMD_STOP_ALL, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_MOTOR, CMD_STOP_ALL, NULL, 0);
}
break;
}
@ -525,8 +548,13 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
{
if (g_stPV.RunMode == 1)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_FORWARD, NULL, 0);
}
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = iVehicleSpeed * 10;
aiMotorSpeed[1] = iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else if (g_stPV.RunMode == 2 || g_stPV.RunMode == 3)
{
if (0 == g_stAngleError_Ctl.m_iAnglelock)
@ -545,7 +573,12 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
{
if (g_stPV.RunMode == 1)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_BACKWARD, NULL, 0);
if (iVehicleSpeed >= 0)
{
aiMotorSpeed[0] = -iVehicleSpeed * 10;
aiMotorSpeed[1] = -iVehicleSpeed * 10;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else if (g_stPV.RunMode == 2 || g_stPV.RunMode == 3)
{
@ -563,19 +596,29 @@ static void Custom_ModuleHandler(const Msg_t *pstMsg)
}
else if (abs(angle - 0) <= g_stCV.Joy_Sticker_Angle_Allowance)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_TURNRIGHT, NULL, 0);
if (g_stCV.LeftTurnSpeed > 0 && g_stCV.RightTurnSpeed > 0)
{
aiMotorSpeed[0] = g_stCV.LeftTurnSpeed;
aiMotorSpeed[1] = -g_stCV.RightTurnSpeed;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else if (abs(angle - 180) <= g_stCV.Joy_Sticker_Angle_Allowance || abs(angle - (-180)) <= g_stCV.Joy_Sticker_Angle_Allowance)
{
MsgCenter_SendTo(MODULE_NAME_RBCORE, RBCORE_CMD_MANUAL_TURNLEFT, NULL, 0);
if (g_stCV.LeftTurnSpeed > 0 && g_stCV.RightTurnSpeed > 0)
{
aiMotorSpeed[0] = -g_stCV.LeftTurnSpeed;
aiMotorSpeed[1] = g_stCV.RightTurnSpeed;
MsgCenter_SendTo(MODULE_NAME_MOTOR, MOTOR_SET_SPEED, aiMotorSpeed, sizeof(aiMotorSpeed));
}
}
else
{
MsgCenter_SendTo(MODULE_NAME_MOTOR, COMMON_CMD_STOP_ALL, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_MOTOR, CMD_STOP_ALL, NULL, 0);
}
break;
}
case COMMON_CMD_SHOW_INFO:
case CMD_SHOW_INFO:
{
lua_print("MK32 Info\nRxIndex:%d\tIsOnline:%d\n", g_stMK32.RxIndex, g_stMK32.IsOnline);
lua_print("CH0_RY_H\t%d\n", g_stMK32.CH0_RY_H);

16
project/paint_robot_new/paint_robot_new_motors.c

@ -97,7 +97,7 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
HAL_GPIO_WritePin(OUT_0_GPIO_Port, OUT_0_Pin, 1);
break;
}
case MOTOR_GET_VEHICLE_SPEED:
case GET_VEHICLE_SPEED:
{
if (pstMsg->m_uiDataLen >= sizeof(int))
{
@ -112,7 +112,7 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
if (1 == g_iLastVehicleMove)
{
MsgCenter_SendTo(MODULE_NAME_CUSTOM, CUSTOM_SET_STOP_OFF_PAINT, NULL, 0);
MsgCenter_SendTo(MODULE_NAME_CUSTOM, COMMON_CMD_STOP_ALL, NULL, 0);//先关枪
MsgCenter_SendTo(MODULE_NAME_CUSTOM, CMD_STOP_ALL, NULL, 0);//先关枪
iIsDelayStop = 1;
}
@ -134,14 +134,14 @@ static void Motor_ModuleHandler(const Msg_t *pstMsg)
}
break;
}
case COMMON_CMD_STOP_ALL:
case CMD_STOP_ALL:
{
memset(g_aiMotorSpeed, 0, sizeof(g_aiMotorSpeed));
uiLastTime = Rd_GetTime();
g_iLastVehicleMove = 0;
break;
}
case COMMON_CMD_SHOW_INFO:
case CMD_SHOW_INFO:
{
lua_print("iVehicleSpeed = %d\nuiLastTime = %d\ng_isMotorInit = %d\ng_iLastVehicleMove = %d\n",
iVehicleSpeed, uiLastTime, g_isMotorInit, g_iLastVehicleMove);
@ -178,14 +178,6 @@ static void decode_LeiSaiMotor(const char *_pBuffer, uint32_t _iSize)
// 调用电机管理模块解析响应
MotorMgr_ParseResponse(ucMotorID, (const uint8_t *)_pBuffer, _iSize);
if (1 == ucMotorID)
{
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_LEFT_MOTOR, NULL, 0);
}
else if (2 == ucMotorID)
{
MsgCenter_SendTo(MODULE_NAME_DAEMON, DAEMON_SET_RIGHT_MOTOR, NULL, 0);
}
}
void MotorTask(void *argument)

Loading…
Cancel
Save