紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼开源的ROS2串口库最新Bug已经修复,目前已经16颗星,欢迎品尝
-
大家好,我是爱吃鱼香ROS的小鱼,最近有小伙伴反应用小鱼之前开源的串口库遇到了异常,具体的问题见社区帖子: https://fishros.org.cn/forum/topic/766
最终经过这位小伙伴测试,给出了关键性的问题
结合代码,相信聪明的小伙伴已经知道问题在哪里了
int main(int argc, char** argv) { /* 初始化rclcpp */ rclcpp::init(argc, argv); /*产生一个node_01的节点*/ auto node = std::make_shared<rclcpp::Node>("example_fish_protocol"); // 打印一句自我介绍 RCLCPP_INFO(node->get_logger(), "example_fish_protocol节点已经启动."); fish_protocol::ProtocolConfig proto_config; proto_config.protocol_type_ = fish_protocol::PROTOCOL_TYPE::SERIAL; proto_config.serial_baut_ = 115200; proto_config.serial_address_ = "/dev/ttyS12"; // 初始化 auto protocol = GetProtocolByConfig(proto_config); // 发送数据 protocol->ProtocolSendRawData("Hello FishBot!"); // 接收数据 protocol->SetDataRecvCallback([](const std::string& data) -> void { std::cout << "recv" << data << std::endl; }); /* 运行节点,并检测退出信号 Ctrl+C*/ rclcpp::spin(node); // 销毁 protocol->ProtocolDestory(); /* 停止运行 */ rclcpp::shutdown(); return 0; }
我们是在构造函数里连接的串口,当有数据时就会调用回调函数,但是没有对回调函数是否为空进行判断,造成了这一问题。
so改一下!
void SerialProtocol::_recvDataCallback(const boost::system::error_code &error, size_t bytes_transferred) { if (bytes_transferred > 0) { std::string data_str(recv_data_buffer_, bytes_transferred); if (recv_data_callback_) { // 回调数据 recv_data_callback_(data_str); } } _asyncReadSomeData(); }
完成!
最新的代码小鱼已经提交了,欢迎有需要的小伙伴使用~