无需try-catch块处理异常?Arduino平台ROS TF代码改造咨询
替代try-catch的tf变换获取方案
由于Arduino环境对C++异常的支持有限,你可以通过先检查变换是否可用,再执行获取操作的方式来替代try-catch块,具体实现如下:
- 调用
tf::TransformListener的waitForTransform方法,提前检测目标变换是否存在且可用 - 若检测通过,再安全调用
lookupTransform获取变换
修改后的代码示例:
tf::TransformListener listener; tf::StampedTransform transform; ros::Duration timeout(0.1); // 可根据实际需求调整超时时间 while(ros.ok()) { // 等待变换可用,超时则返回false if(listener.waitForTransform("/map", "/base_link", ros::Time(0), timeout)) { // 变换可用时直接获取,无需异常捕获 listener.lookupTransform("/map", "/base_link", ros::Time(0), transform); // 此处可添加transform的处理逻辑 } else { // 变换不可用时的自定义处理,比如打印提示(按需启用) // Serial.println("Transform not available"); } }
补充说明
waitForTransform会阻塞至变换可用,或到达设定的超时时间,返回布尔值标识是否成功获取到可用变换。这种方式完全不依赖try-catch异常处理,更适配Arduino这类对异常支持有限的环境。
内容的提问来源于stack exchange,提问作者Edvard
相关产品推荐
相关产品推荐

