mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-05 12:37:48 +08:00
feat: add bag record and playback support
This commit is contained in:
@@ -548,12 +548,14 @@ void OBCameraNode::publishDepthFiltersStatus() {
|
||||
}
|
||||
|
||||
OBCameraNode::OBCameraNode(rclcpp::Node *node, std::shared_ptr<ob::Device> device,
|
||||
std::shared_ptr<Parameters> parameters, bool use_intra_process)
|
||||
std::shared_ptr<Parameters> parameters, bool use_intra_process,
|
||||
bool is_playback_device)
|
||||
: node_(node),
|
||||
device_(std::move(device)),
|
||||
parameters_(std::move(parameters)),
|
||||
logger_(node->get_logger()),
|
||||
use_intra_process_(use_intra_process) {
|
||||
use_intra_process_(use_intra_process),
|
||||
is_playback_device_(is_playback_device) {
|
||||
pid_ = device_->getDeviceInfo()->getPid();
|
||||
RCLCPP_INFO_STREAM(logger_,
|
||||
"OBCameraNode: use_intra_process: " << (use_intra_process ? "ON" : "OFF"));
|
||||
@@ -879,6 +881,16 @@ void OBCameraNode::setupDevices() {
|
||||
}
|
||||
auto device_info = device_->getDeviceInfo();
|
||||
CHECK_NOTNULL(device_info);
|
||||
|
||||
if (is_playback_device_) {
|
||||
// Everything below this point only tunes real-hardware-only behavior
|
||||
// (heartbeat, USB3 retry, laser, depth limits, multi-device sync, PTP,
|
||||
// etc.). Those SDK device components aren't registered on a playback
|
||||
// device, so querying them throws instead of returning "not supported".
|
||||
// None of it is needed to correctly publish a recorded .bag file.
|
||||
return;
|
||||
}
|
||||
|
||||
auto should_apply_launch_config = [this](const std::string ¶m_name) {
|
||||
return isLaunchParamProvided(param_name);
|
||||
};
|
||||
@@ -3967,7 +3979,9 @@ void OBCameraNode::onTemperatureUpdate(diagnostic_updater::DiagnosticStatusWrapp
|
||||
}
|
||||
|
||||
void OBCameraNode::setupDiagnosticUpdater() {
|
||||
if (diagnostic_period_ <= 0.0) {
|
||||
if (diagnostic_period_ <= 0.0 || is_playback_device_) {
|
||||
// Temperature reporting requires live hardware monitoring that doesn't
|
||||
// exist for a recorded .bag file; skip to avoid repeated SDK errors.
|
||||
return;
|
||||
}
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user