两台电脑完成ros串口通信,一台电脑上的串口调试助手发送一组数据,含字节头字节尾和需要输出的数;在另一台电脑的ros写一个C++程序,用于接收发来的数据,并在终端显示
时间: 2024-05-05 18:16:02 浏览: 93
以下是一个简单的ROS串口通信的C++程序示例,用于接收另一台电脑发送的数据,并在终端显示:
```cpp
#include <ros/ros.h>
#include <serial/serial.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "serial_node");
ros::NodeHandle nh;
// 创建串口对象
serial::Serial serial_port;
serial_port.setPort("/dev/ttyUSB0");
serial_port.setBaudrate(115200);
serial_port.setTimeout(serial::Timeout::simpleTimeout(1000)); // 设置超时时间
// 打开串口
try
{
serial_port.open();
}
catch (serial::IOException& e)
{
ROS_ERROR_STREAM("Unable to open serial port: " << e.what());
return -1;
}
// 设置ROS的定时器,定时读取串口数据
ros::Rate loop_rate(10); // 10Hz
while (ros::ok())
{
if (serial_port.available())
{
std::string data = serial_port.read(serial_port.available());
ROS_INFO_STREAM("Received data: " << data);
}
loop_rate.sleep();
}
// 关闭串口
serial_port.close();
return 0;
}
```
在另一台电脑上,可以用串口调试助手发送以下格式的数据:
```
0x01 0x02 0x03 ... 0x0F 0x10
```
其中,`0x01`为字节头,`0x10`为字节尾,`0x02`到`0x0F`为需要输出的数。
在第一台电脑上运行该程序,可以看到终端输出接收到的数据,例如:
```
[INFO] [1631712037.123456789]: Received data: 0x01 0x02 0x03 ... 0x0F 0x10
```
阅读全文