Raspberry Pi — Серийная функция WiringPi C ++ случайно перестает работать

При запуске GPS Ros Node считывание с Raspberry Serial Port в большинстве случаев работает, но иногда после перезагрузки он не считывает данные правильно и выдает один и тот же символ снова и снова (всегда «?»). Только после перекомпиляции или перезапуска узла он снова начинает работать.

int main(int argc, char **argv)
{
int fd;

ros::init(argc, argv, "talker");

ros::NodeHandle n;

gps_node::gps_raw gps_data;

ros::Publisher chatter_pub = n.advertise<gps_node::gps_raw>("gps_raw", 100);

ros::Rate loop_rate(1000);if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)
{
fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
}

if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
}
char input = 0;
while (ros::ok())
{
while (serialDataAvail (fd))
{
input = serialGetchar (fd);
ROS_INFO_STREAM(input);
NazaDecoder.decode(input);
gps_data.gps_sats = round(NazaDecoder.getNumSat());
gps_data.lat = NazaDecoder.getLat();
gps_data.lon = NazaDecoder.getLon();
gps_data.heading = round(NazaDecoder.getHeadingNc());
gps_data.alt = NazaDecoder.getGpsAlt();
chatter_pub.publish(gps_data);
ros::spinOnce();
loop_rate.sleep();
}
}
return 0;
}

0

Решение

Я нашел рабочее решение, открыв последовательный порт по ошибке.

if (wiringPiSetup () == -1)
{
fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
}
REINIT:if ((fd = serialOpen ("/dev/ttyAMA0", 115200)) < 0)
{
fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
}

int input = 0;
while (ros::ok())
{
while (serialDataAvail (fd))
{
input = serialGetchar (fd);
NazaDecoder.decode(input);
gps_data.gps_sats = round(NazaDecoder.getNumSat());
gps_data.lat = NazaDecoder.getLat();
gps_data.lon = NazaDecoder.getLon();
gps_data.heading = round(NazaDecoder.getHeadingNc());
gps_data.alt = NazaDecoder.getGpsAlt();
chatter_pub.publish(gps_data);
ros::spinOnce();
loop_rate.sleep();
if(input==-1){
goto REINIT;
}
}
}
return 0;
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]