#tcp #arduino #wifi #particle-photon
#tcp #arduino #wifi #частица-фотон
Вопрос:
Я пытаюсь управлять дроном с помощью джойстика с компьютера через Wi-Fi. На борту у меня есть доска, похожая на Aruino, под названием Particle Photon. Я хочу отправить 3 поплавка (тангаж, крен, дроссель) через TCP, и я придумал что-то подобное:
На стороне клиента PC — python он просто отправляет это с частотой 20 кадров в секунду / 50 мс:
try:
s.sendall(bytearray(struct.pack("f", float(-20*axis0))))
s.sendall(bytearray(struct.pack("f", float(20*axis1))))
s.sendall(bytearray(struct.pack("f", float(axis2))))
except socket.error as e:
print("error while sending :: " str(e))
где s — моя розетка.
На стороне сервера-дрона у меня есть это:
if (myIMU.delt_t >= 25)
{
if (TCPcomms amp;amp; client.connected()){
// Check for 12 bytes (3 floats) from joystick input --
// if we have them, update roll, pitch and throttle references
if(client.available() >= 12){
byte tempBuff[4];
float newInput[3];
for(int j = 0; j < 3; j ){
for(int i = 0; i < 4; i )
{
tempBuff[i] = client.read();
}
newInput[j] = *((float*)(tempBuff));
}
roll_reference = newInput[0];
pitch_reference = newInput[1];
throttle_reference = newInput[2];
...
Drone loop работает намного быстрее, отсюда и проверка времени вверху (не нужно проверять слишком часто).
Теперь я отладил его на более медленных скоростях, и все кажется нормальным. Всякий раз, когда есть 3 готовых поплавка, код дрона считывает их, если нет, он просто продолжается.
Но в половине случаев, когда я пытаюсь запустить его с нормальной скоростью, Древесностружечная плита просто отключается через некоторое время и полностью отключается. По-видимому, он делает это всякий раз, когда возникает какая-либо проблема, но это не очень хорошо помогает донести суть проблемы…
Раньше у меня также был механизм, который отключается через X секунд, но он также часто отключает соединения. Я проверил с помощью Wireshark, что это всегда совпадало с повторной передачей пакетов.
Я предполагаю, что мой вопрос заключается в том, что это ошибка WiFi / TCP, и это просто не подходит для такого типа задач, или я делаю что-то глупое? У кого-нибудь была аналогичная проблема с Arduino или Particle?
Комментарии:
1. Фотон частиц — это не Arduino
2. Но он использует много одного и того же кода, библиотек, файлов .ino и т. Д. Я не думаю, что это вопрос, связанный с фотонами частиц.