You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 05:20:28