stm32f407-ros-serial-can-json-mqtt

本文介绍了如何使用rosserial在ROS系统中建立与单片机的通信桥梁,通过qtUI获取和发送数据。利用ROS的NodeHandle和发布订阅机制,结合HAL_UART库进行串口读写,并采用回调函数处理串口数据。同时,文章提到了ringbuffer在数据缓冲中的应用。
摘要由CSDN通过智能技术生成

ros coer

rosserial 桥接———
qt UI 获取收发数据/操作接口
类 发布   订阅 接口
类 发布   发布接口///

ros 转发功能nh ros.read 读取上位机  订阅数据nh     ros.serialread()   读取 单片机串口数据nh ros.serialwrite()   向单片机串口 写入要响应的订阅数据/

///:
单片机数据收发功能单片机 
roslib 主线程 发布   订阅数据单片机 
roslib 主线程 发布   发布数据

ros::NodeHandle nh;   映射句柄
std_msgs::String str_msg;  初始化字符消息
发布 赋值
ros::Publisher chatter("chatter", &str_msg);

char hello[] = "test from STM32!";

//在C中如何调用C++函数:将函数用extern "C"声明
回调接口
extern "C" void USART_RX_Callback()
{
           //HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
 串口数据转发到缓存队列  判断是否 dr
ringbuffer_putchar(&rb, huart2.Instance->DR);

}

extern "C" void setup()
{
     缓冲初始化
ringbuffer_init(&rb, RxBuffer, rbuflen);
开启传输
__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);

// Initialize ROS
nh.initNode();  节点初始化
nh.advertise(chatter);  开机字符
}

循环接口
extern "C" void loop()
{

HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
//HAL_UART_Transmit(&huart2, (uint8_t *)hello, strlen(hello), HAL_MAX_DELAY);
写发布消息
str_msg.data = hello;
chatter.publish(&str_msg);
操作锁
nh.spinOnce();

HAL_Delay(1000);
}

在这里插入图片描述

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值