Несколько вопросов о ROS и ArduinoC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Несколько вопросов о ROS и Arduino

Сообщение Anonymous »

Предыстория
ДИСТРО ROS: Noetic
ПЛАТА Arduino: Arduino Mega2560
последовательная библиотека
Я использую ROS и Arduino для связи через последовательную библиотеку ROS, и во время тестирования связь нормальная. Однако после того, как я закончил писать функции чтения и записи hardware_interface::RobotHW (по сути, вызывая Serial.read и Serial.write()), я столкнулся с ошибкой, которую я не мог понять при ее использовании.

Когда узел «hardware_interface_node» запущен, он может изначально нормально выполнять RobotHW::read() и RobotHW::write() и анализировать данные. Но через несколько секунд данные не могут быть прочитаны, и может быть выполнен только RobotHW::write(). В этот момент мигает только индикатор RX на плате Arduino. Как показано на следующем рисунке.

введите здесь описание изображения

введите здесь описание изображения
  • Я пробовал закомментировать функцию Serial.write() внутри функции RobotHW::write(), и после компиляции и запуска я обнаружил, что данные можно читать нормально.

    введите здесь описание изображения
  • Я рассказал Copilot об этой проблеме, и он сказал мне, что это может быть проблема с многопоточностью. Итак, я написал тестовую программу, используя только последовательную библиотеку и ros::Timer. После компиляции и запуска проблем не возникло.

Код: Выделить всё

#include "serial/serial.h"
#include "ros/init.h"
#include "ros/node_handle.h"
#include "ros/ros.h"
#include 

serial::Serial serial_;
std::string port;
int baudrate;
uint8_t rx_buffer[15];
uint8_t tx_buffer[15] = {0x55, 0x1, 0x2,  0x3,  0x4,  0x5,  0x6, 0x7,
0x8,  0x9, 0x10, 0x11, 0x12, 0x13, 0x14};

uint8_t computeChecksum(uint8_t *buffer) {
uint8_t checksum = 0;
for (size_t i = 0; i < sizeof(buffer) - 1; i++) {
checksum += buffer[i];
}
return checksum;
}

void read() {
serial_.read(rx_buffer, sizeof(rx_buffer));
ROS_WARN_STREAM("Data Received: "


Подробнее здесь: [url]https://stackoverflow.com/questions/78458153/some-questions-about-ros-and-arduino[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»