3-GPS室外定位导航车和底盘通信接口
单片机往外发送的接口
在rosNodeNom.c
void dataPackSend(void)
{ com_x_send_data.x_pos.fv = position_x;//x坐标--->转换为经度E com_x_send_data.y_pos.fv = position_y;//y坐标--->转换为纬度N坐标系 com_x_send_data.x_v.fv = velocity_linear_x;//x方向速度 com_x_send_data.y_v.fv = velocity_linear_y;//y 方向速度 com_x_send_data.angular_v.fv = velocity_angular;//角速度 绕z轴 com_x_send_data.pose_angular.fv = velocity_angular;//yaw偏航角 com_x_send_data.vr.fv = velocity_linear_r; com_x_send_data.vl.fv = velocity_linear_l; USARTzTxBuffer[0] = 0xaa;
USARTzTxBuffer[1] = 0xaa;
USARTzTxBuffer[2] = com_x_send_data.x_pos.cv[0];
USARTzTxBuffer[3] = com_x_send_data.x_pos.cv[1];
USARTzTxBuffer[4] = com_x_send_data.x_pos.cv[2];
USARTzTxBuffer[5] = com_x_send_data.x_pos.cv[3];
USARTzTxBuffer[6] = com_x_send_data.y_pos.cv[0];
USARTzTxBuffer[7] = com_x_send_data.y_pos.cv[1];
USARTzTxBuffer[8] = com_x_send_data.y_pos.cv[2];
USARTzTxBuffer[9] = com_x_send_data.y_pos.cv[3];
USARTzTxBuffer[10] = com_x_send_data.x_v.cv[0];
USARTzTxBuffer[11] = com_x_send_data.x_v.cv[1];
USARTzTxBuffer[12] = com_x_send_data.x_v.cv[2];
USARTzTxBuffer[13] = com_x_send_data.x_v.cv[3];
USARTzTxBuffer[14] = com_x_send_data.y_v.cv[0];
USARTzTxBuffer[15] = com_x_send_data.y_v.cv[1];
USARTzTxBuffer[16] = com_x_send_data.y_v.cv[2];
USARTzTxBuffer[17] = com_x_send_data.y_v.cv[3];
USARTzTxBuffer[18] = com_x_send_data.angular_v.cv[0];
USARTzTxBuffer[19] = com_x_send_data.angular_v.cv[1];
USARTzTxBuffer[20] = com_x_send_data.angular_v.cv[2];
USARTzTxBuffer[21] = com_x_send_data.angular_v.cv[3];
USARTzTxBuffer[22] = com_x_send_data.pose_angular.cv[0];
USARTzTxBuffer[23] = com_x_send_data.pose_angular.cv[1];
USARTzTxBuffer[24] = com_x_send_data.pose_angular.cv[2];
USARTzTxBuffer[25] = com_x_send_data.pose_angular.cv[3];
USARTzTxBuffer[26] = USARTzTxBuffer[2]^USARTzTxBuffer[3]^USARTzTxBuffer[4]^USARTzTxBuffer[5]^USARTzTxBuffer[6]^
USARTzTxBuffer[7]^USARTzTxBuffer[8]^USARTzTxBuffer[9]^USARTzTxBuffer[10]^USARTzTxBuffer[11]^
USARTzTxBuffer[12]^USARTzTxBuffer[13]^USARTzTxBuffer[14]^USARTzTxBuffer[15]^USARTzTxBuffer[16]^
USARTzTxBuffer[17]^USARTzTxBuffer[18]^USARTzTxBuffer[19]^USARTzTxBuffer[20]^USARTzTxBuffer[21]^
USARTzTxBuffer[22]^USARTzTxBuffer[23]^USARTzTxBuffer[24]^USARTzTxBuffer[25];
uart_send(1, USARTzTxBuffer, 27);
}
树莓派下发控制函数
在stm32_Control.c 中(树莓派路径 /home/pi/2navi_app/src )
/********************************************************** * 数据打包,将获取的cmd_vel信息打包并通过串口发送 * ********************************************************/ void data_pack(const char * cmd_vel){ unsigned char i; float_union Vx,Vy,Ang_v; memcpy(Vx.cvalue,cmd_vel+3,4); memcpy(Vy.cvalue,cmd_vel+7,4); memcpy(Ang_v.cvalue,cmd_vel+11,4); printf("vx speed:%.2f \n",Vx.fvalue); printf("ang speed:%.2f \n",Ang_v.fvalue); memset(s_buffer,0,sizeof(s_buffer)); //数据打包 s_buffer[0] = 0xff; s_buffer[1] = 0xff; s_buffer[2] = 15; //Vx s_buffer[3] = Vx.cvalue[0]; s_buffer[4] = Vx.cvalue[1]; s_buffer[5] = Vx.cvalue[2]; s_buffer[6] = Vx.cvalue[3]; //Vy s_buffer[7] = Vy.cvalue[0]; s_buffer[8] = Vy.cvalue[1]; s_buffer[9] = Vy.cvalue[2]; s_buffer[10] = Vy.cvalue[3]; //Ang_v s_buffer[11] = Ang_v.cvalue[0]; s_buffer[12] = Ang_v.cvalue[1]; s_buffer[13] = Ang_v.cvalue[2]; s_buffer[14] = Ang_v.cvalue[3]; //CRC s_buffer[15] = s_buffer[3]^s_buffer[4]^s_buffer[5]^s_buffer[6]^s_buffer[7]^s_buffer[8]^s_buffer[9]^s_buffer[10]^s_buffer[11]^s_buffer[12]^s_buffer[13]^s_buffer[14]; write(imu_fd, s_buffer,sBUFFERSIZE); } /********************************************************** * 数据打包,将获取的cmd_vel信息打包并通过串口发送 * ********************************************************/ void cmd_send(const char cmd_v){ unsigned char i; char cmd_vel[16]; float_union Vx,Vy,Ang_v; Vx.fvalue =0; Ang_v.fvalue = 0; if(cmd_v==1){ Vx.fvalue = 20; Ang_v.fvalue = 0; } else if(cmd_v == 2){ Vx.fvalue = -20; Ang_v.fvalue = 0; } else if(cmd_v == 3) { Vx.fvalue = 0; Ang_v.fvalue = 0.3; } else if(cmd_v == 4){ Ang_v.fvalue = -0.3; Vx.fvalue = 0; } else if(cmd_v == 0){ Vx.fvalue = 0; Ang_v.fvalue = 0; //Ang_v.fvalue = 0; } Vy.fvalue = 0; memset(s_buffer,0,sizeof(s_buffer)); //数据打包 s_buffer[0] = 0xff; s_buffer[1] = 0xff; s_buffer[2] = 15; //Vx s_buffer[3] = Vx.cvalue[0]; s_buffer[4] = Vx.cvalue[1]; s_buffer[5] = Vx.cvalue[2]; s_buffer[6] = Vx.cvalue[3]; //Vy s_buffer[7] = Vy.cvalue[0]; s_buffer[8] = Vy.cvalue[1]; s_buffer[9] = Vy.cvalue[2]; s_buffer[10] = Vy.cvalue[3]; //Ang_v s_buffer[11] = Ang_v.cvalue[0]; s_buffer[12] = Ang_v.cvalue[1]; s_buffer[13] = Ang_v.cvalue[2]; s_buffer[14] = Ang_v.cvalue[3]; //CRC s_buffer[15] = s_buffer[3]^s_buffer[4]^s_buffer[5]^s_buffer[6]^s_buffer[7]^s_buffer[8]^s_buffer[9]^s_buffer[10]^s_buffer[11]^s_buffer[12]^s_buffer[13]^s_buffer[14]; write(imu_fd, s_buffer,sBUFFERSIZE); }