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);
}