This commit is contained in:
ob-yalian
2026-01-04 01:12:38 +00:00
parent 0771e0b0c9
commit 220b4ea0dd
481 changed files with 21273 additions and 31092 deletions
@@ -0,0 +1,419 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>引言 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">引言</a><ul>
<li><a class="reference internal" href="#id2">支持的硬件产品</a></li>
<li><a class="reference internal" href="#orbbec">Orbbec 相机规格书</a></li>
<li><a class="reference internal" href="#id3">支持的平台</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">引言</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/1_overview/introduction.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>引言<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>OrbbecSDK ROS2 封装为 Orbbec 相机与 ROS 2 环境提供无缝集成。它支持 ROS2 Foxy、Humble 和 Jazzy 发行版。</p>
<p>默认推荐使用 <strong>v2-main</strong> 分支。对于 v2-main 尚不支持的旧 OpenNI 设备,请使用 <strong>main</strong> 分支。仅由 main 分支支持的设备型号列在下表中。</p>
<p>如果您是中国用户,推荐使用 <a class="reference external" href="https://gitee.com/orbbecdeveloper/OrbbecSDK_ROS2">gitee 仓库</a>。</p>
<p>下面是 main 分支 (v1.x) 与 v2-main 分支 (v2.x) 的设备支持列表:</p>
<table border="1" style="border-collapse: collapse; text-align: left; width: 100%;">
<thead>
<tr style="background-color: #1f4e78; color: white; text-align: center;">
<th>产品系列</th>
<th>产品</th>
<th><a href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/main" style="color: black; text-decoration: none;">main 分支</a></th>
<th><a href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main" style="color: black; text-decoration: none;">v2-main 分支</a></th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center; font-weight: bold;">Gemini 435Le</td>
<td>Gemini 435Le</td>
<td>not supported</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td rowspan="8" style="text-align: center; font-weight: bold;">Gemini 330</td>
<td>Gemini 335Le</td>
<td>not supported</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 335</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 336</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 330</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 335L</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 336L</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 330L</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 335Lg</td>
<td>not supported</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td rowspan="5" style="text-align: center; font-weight: bold;">Gemini 2</td>
<td>Gemini 2</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 2 L</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 2 XL</td>
<td>recommended for new designs</td>
<td>to be supported</td>
</tr>
<tr>
<td>Gemini 215</td>
<td>not supported</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Gemini 210</td>
<td>not supported</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td rowspan="3" style="text-align: center; font-weight: bold;">Femto</td>
<td>Femto Bolt</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Femto Mega</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Femto Mega I</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td rowspan="3" style="text-align: center; font-weight: bold;">Astra</td>
<td>Astra 2</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
<tr>
<td>Astra+</td>
<td>limited maintenance</td>
<td>not supported</td>
</tr>
<tr>
<td>Astra Pro Plus</td>
<td>limited maintenance</td>
<td>not supported</td>
</tr>
<tr>
<td style="text-align: center; font-weight: bold;">Astra Mini</td>
<td>Astra Mini (S) Pro</td>
<td>full maintenance</td>
<td>recommended for new designs</td>
</tr>
</tbody>
</table><p><strong>注意</strong>: 如果未找到您的设备,请联系我们的 FAE 或销售代表获取帮助。</p>
<p><strong>术语定义</strong>:</p>
<ol class="simple">
<li><p>建议用于新设计:我们将提供完整支持,包括新特性、缺陷修复与性能优化;</p></li>
<li><p>完整维护:我们将提供缺陷修复支持;</p></li>
<li><p>限制维护:我们仅提供关键缺陷修复支持;</p></li>
<li><p>不支持:当前版本不支持该设备;</p></li>
<li><p>即将支持:近期将添加支持。</p></li>
</ol>
<section id="id2">
<h2>支持的硬件产品<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>以下设备由 OrbbecSDK ROS2 封装 v2-main 分支支持。后续将增加更多设备支持。如果您在下表中未找到设备,请尝试 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2">main</a> 分支。</p>
<p>为获得最佳性能,强烈建议升级到最新固件版本,以确保获得最新的改进与缺陷修复。</p>
<p>关于如何获取与升级最新固件,<a class="reference internal" href="../3_quickstarts/orbbecviewer.html"><span class="doc">请点击这里</span></a>。</p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>产品列表</strong></th>
<th><strong>推荐固件版本</strong></th>
<th><strong>启动文件</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Astra Mini Pro</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Astra-Mini-Pro">2.0.03</a></td>
<td>astra.launch.py</td>
</tr>
<tr>
<td>Astra Mini S Pro</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Astra-Mini-S-Pro">2.0.03</a></td>
<td>astra.launch.py</td>
</tr>
<tr>
<td>Gemini 435Le</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemin435Le-Firmware">1.3.2</a></td>
<td>gemini435_le.launch.py</td>
</tr>
<tr>
<td>Gemini 330 series</td>
<td><a href="https://orbbec-debian-repos-aws.s3.amazonaws.com/product/Gemini330_Release_1.6.00.zip">1.6.00</a></td>
<td>gemini_330_series.launch.py</td>
</tr>
<tr>
<td>Gemini 215</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini215-Firmware">1.0.9</a></td>
<td>gemini210.launch.py</td>
</tr>
<tr>
<td>Gemini 210</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini210-Firmware">1.0.9</a></td>
<td>gemini210.launch.py</td>
</tr>
<tr>
<td>Gemini 2</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2-Firmware">1.4.98</a></td>
<td>gemini2.launch.py</td>
</tr>
<tr>
<td>Gemini 2 L</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2L-Firmware">1.5.2</a></td>
<td>gemini2L.launch.py</td>
</tr>
<tr>
<td>Femto Bolt</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Bolt-Firmware">1.1.2</a></td>
<td>femto_bolt.launch.py</td>
</tr>
<tr>
<td>Femto Mega</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-Firmware">1.3.1</a></td>
<td>femto_mega.launch.py</td>
</tr>
<tr>
<td>Femto Mega I</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-I-Firmware">2.0.4</a></td>
<td>femto_mega.launch.py</td>
</tr>
<tr>
<td>Astra 2</td>
<td><a href="https://orbbec-debian-repos-aws.s3.amazonaws.com/product/Astra2_Release_2.8.20.zip">2.8.20</a></td>
<td>astra2.launch.py</td>
</tr>
</tbody>
</table><p>所有启动文件本质上是类似的,主要区别在于同系列不同型号设置的参数默认值。USB 标准差异(如 USB 2.0 与 USB 3.0)可能需要调整这些参数。如果遇到启动失败,请仔细查看规格说明书,特别关注启动文件中的分辨率设置以及其他参数,以确保兼容与最佳性能。</p>
</section>
<section id="orbbec">
<h2>Orbbec 相机规格书<a class="headerlink" href="#orbbec" title="Link to this heading"></a></h2>
<p>更多信息请参考相机规格书。</p>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #ccc;
padding: 8px;
text-align: left;
vertical-align: middle;
}
thead th {
background-color: #1f4e78;
color: white;
text-align: center;
vertical-align: middle;
}
</style><table>
<thead>
<tr>
<th>产品系列</th>
<th>产品</th>
<th>规格书</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">Gemini 435Le</td>
<td>Gemini 435Le</td>
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/06/04011158/Orbbec-Gemini-435Le-Datasheet-V1.pdf">Orbbec Gemini 435Le 规格书</a></td>
</tr>
<tr>
<td style="text-align: center;" rowspan="6">Gemini 330</td>
<td>Gemini 335</td>
<td rowspan="4"><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/04/22062452/Gemini-330-series-Datasheet-V1.6.pdf">Gemini 330 系列 USB 设备规格书</a></td>
</tr>
<tr><td>Gemini 336</td></tr>
<tr><td>Gemini 335L</td></tr>
<tr><td>Gemini 336L</td></tr>
<tr>
<td>Gemini 335Lg</td>
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2024/10/22030914/Gemini-335Lg-Datasheet-V1.0-241022.pdf">Gemini 330 系列 GMSL 设备规格书</a></td>
</tr>
<tr>
<td>Gemini 335Le</td>
<td><a href="https://new-orbbec3d-s3.s3.amazonaws.com/wp-content/uploads/2025/03/24023151/Orbbec-Gemini-335Le-Datasheet-V1-2.pdf">Gemini 330 系列 以太网设备规格书</a></td>
</tr>
<tr>
<td style="text-align: center;" rowspan="3">Gemini 2</td>
<td>Gemini 2</td>
<td rowspan="2"><a href="https://xm917ch2uk.feishu.cn/file/Khxfb2vdioUghexIMqJcAyL3nXf">Orbbec Gemini 2 系列规格书</a></td>
</tr>
<tr><td>Gemini 2 L</td></tr>
<tr>
<td>Gemini 2 XL</td>
<td><a href="https://xm917ch2uk.feishu.cn/file/QW2vbNvwxoocRIxSL6Zcvut2npS">Orbbec Gemini 2 XL 规格书</a></td>
</tr>
<tr>
<td style="text-align: center;" rowspan="3">Femto</td>
<td>Femto Bolt</td>
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2024/08/ORBBEC_Datasheet_Femto-Bolt-v1.0.pdf">Orbbec Femto Bolt 规格书</a></td>
</tr>
<tr>
<td>Femto Mega</td>
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Femto-Mega1.pdf">Orbbec Femto Mega 规格书</a></td>
</tr>
<tr>
<td>Femto Mega I</td>
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/08/ORBBEC_Datasheet_Femto-Mega-I.pdf">Orbbec Femto Mega I 规格书</a></td>
</tr>
<tr>
<td style="text-align: center;" rowspan="3">Astra</td>
<td>Astra 2</td>
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Astra-2_V1.2.pdf">Orbbec Astra 2 规格书</a></td>
</tr>
<tr>
<td>Astra+</td>
<td><a href="https://xm917ch2uk.feishu.cn/file/Qk0zbx26Doh8XMxw0rIcOgQYnff">Orbbec Astra+ 规格书</a></td>
</tr>
<tr>
<td>Astra Mini Pro</td>
<td><a href="https://d1cd332k3pgc17.cloudfront.net/wp-content/uploads/2023/04/ORBBEC_Datasheet_Astra-Mini-Pro-1.pdf">Orbbec Astra Mini Pro 规格书</a></td>
</tr>
</tbody>
</table></section>
<hr class="docutils" />
<section id="id3">
<h2>支持的平台<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Linux x64:已在 Ubuntu 22.04 上测试</p></li>
<li><p>Linux ARM64:已在 NVIDIA Jetson AGX Orin、NVIDIA Jetson Orin NX、NVIDIA Jetson Orin Nano、NVIDIA Jetson AGX Xavier、NVIDIA Jetson Xavier NX 上测试</p></li>
</ul>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,291 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Orbbec SDK 概述 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">Orbbec SDK 概述</a><ul>
<li><a class="reference internal" href="#id1">术语</a></li>
<li><a class="reference internal" href="#orbbec-sdk-v2">Orbbec SDK v2 架构概述</a></li>
<li><a class="reference internal" href="#sdk">SDK 概念概述</a></li>
<li><a class="reference internal" href="#id2">SDK 编程模型</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Orbbec SDK 概述</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/1_overview/orbbecsdk_overview.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="orbbec-sdk">
<h1>Orbbec SDK 概述<a class="headerlink" href="#orbbec-sdk" title="Link to this heading"></a></h1>
<p>本节介绍 C++ 版本的 Orbbec SDK。其架构和概念与 Python 包装器一致。</p>
<section id="id1">
<h2>术语<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th>序号</th>
<th>名称</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>USB</td>
<td>通用串行总线(Universal Serial Bus)</td>
</tr>
<tr>
<td>2</td>
<td>UVC</td>
<td>USB 视频类(USB Video Class)</td>
</tr>
<tr>
<td>3</td>
<td>Firmware</td>
<td>3D 相机的固件</td>
</tr>
<tr>
<td>4</td>
<td>Disparity</td>
<td>视差是指从两个有一定距离的点观察同一目标时的方向差异。</td>
</tr>
<tr>
<td>5</td>
<td>D2D (Disparity to depth)</td>
<td>视差转深度是一种图像处理技术,用于将视差信息转换为深度信息。</td>
</tr>
<tr>
<td>6</td>
<td>Hardware D2D</td>
<td>视差转深度在设备内部实现,不占用主机的计算能力。</td>
</tr>
<tr>
<td>7</td>
<td>Software D2D</td>
<td>视差转深度,在 Orbbec SDK 中实现</td>
</tr>
<tr>
<td>8</td>
<td>Depth point cloud</td>
<td>深度点云,三维世界坐标系中点的坐标,可以使用深度相机的内参转换为点云。</td>
</tr>
<tr>
<td>9</td>
<td>RGBD point cloud</td>
<td>叠加了 RGB 信息的点云</td>
</tr>
<tr>
<td>10</td>
<td>D2C</td>
<td>"深度到彩色"(Depth to Color)是一种对深度图像进行逐像素几何变换的功能。其结果是通过 D2C 变换将深度图像与其对应的彩色图像对齐,使我们能够通过在变换后的深度图像中使用相同图像坐标位置来定位彩色像素的深度信息。经过 D2C 变换后,我们生成一个与目标彩色图像大小相同的深度图像,其中图像内容表示彩色相机坐标系中的深度数据。换句话说,它重建了一个使用彩色相机的原点和尺寸"拍摄"的深度图像,其中每个像素与彩色相机的相应像素坐标匹配。</td>
</tr>
<tr>
<td>11</td>
<td>Hardware D2C</td>
<td>硬件 D2C 是指在相机内部执行深度到彩色变换的功能,相机直接输出 D2C 变换的结果。</td>
</tr>
<tr>
<td>12</td>
<td>Software D2C</td>
<td>使用 SDK 在主机端执行 D2C 计算。</td>
</tr>
<tr>
<td>13</td>
<td>Frame aggregation (FrameSet)</td>
<td>帧聚合,将深度、红外和彩色帧组合成一个帧集(Frameset),并通过管道调用。</td>
</tr>
<tr>
<td>14</td>
<td>C2D</td>
<td>"彩色到深度"(Color to Depth)是一种对彩色图像进行逐像素几何变换的功能。其结果是通过 C2D 变换将彩色图像与其对应的深度图像对齐。</td>
</tr>
<tr>
<td>15</td>
<td>MetaData</td>
<td>帧元数据是一组参数(或属性),提供了帧生成时传感器配置和/或系统状态的快照。</td>
</tr>
<tr>
<td>16</td>
<td>HDR</td>
<td>高动态范围(High Dynamic Range,HDR)成像允许成像系统在极暗和极亮的场景中拍摄图像。我们提出了一种在主机 CPU 上运行的软件解决方案来实现此功能。它利用两个连续帧的数据,直接合成这两个深度图像,从而增强 16 位深度图像的动态范围。</td>
</tr>
<tr>
<td>17</td>
<td>LDP</td>
<td>激光近距离保护(Laser close-range protection)</td>
</tr>
</tbody>
</table></section>
<section id="orbbec-sdk-v2">
<h2>Orbbec SDK v2 架构概述<a class="headerlink" href="#orbbec-sdk-v2" title="Link to this heading"></a></h2>
<p><img alt="OrbbecSDK v2 软件架构" src="../../../_images/Soft_Architecture.png" /></p>
<ul class="simple">
<li><p>应用层(Application)</p></li>
</ul>
<p>OrbbecViewer、示例程序和用户应用程序实现。</p>
<ul class="simple">
<li><p>接口和封装层(Interfaces and Encapsulation Layer)</p></li>
</ul>
<p>OrbbecSDK 接口封装和包装器封装。</p>
<ul class="simple">
<li><p>高级层(High-level Layer)</p></li>
</ul>
<p>HighLevel 封装了核心业务组件,并使用管道(pipeline)向外部提供接口。</p>
<ul class="simple">
<li><p>基础业务层(Basic business layer)</p></li>
</ul>
<p>核心业务逻辑框架的实现。</p>
<ul class="simple">
<li><p>平台抽象层(Platform abstraction layer)</p></li>
</ul>
<p>跨平台组件抽象操作系统差异,提供统一的访问接口。</p>
<ul class="simple">
<li><p>平台实现层(Platform implementation layer)</p></li>
</ul>
<p>各平台的驱动实现。</p>
</section>
<section id="sdk">
<h2>SDK 概念概述<a class="headerlink" href="#sdk" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Context(上下文)</p></li>
</ul>
<p>上下文提供一组设置,包括设备状态更改回调、日志级别等设置。Context 可以访问多个设备。</p>
<ul class="simple">
<li><p>Device(设备)</p></li>
</ul>
<p>一个实际的硬件设备对应一个 Device 对象,用于获取设备的相关信息并控制其属性。</p>
<ul class="simple">
<li><p>Pipeline(管道)</p></li>
</ul>
<p>HighLevel 对应的对象,封装了快速访问 SDK 的接口。它具有简单的功能,使用户能够快速上手并使用 SDK。</p>
<ul class="simple">
<li><p>Config(配置)</p></li>
</ul>
<p>提供启用数据流、对齐模式和帧聚合模式的配置,用于控制数据输出的行为。</p>
<ul class="simple">
<li><p>StreamProfile(流配置)</p></li>
</ul>
<p>流配置定义分辨率、帧率和编码格式等参数,还提供相机参数的管理。</p>
<ul class="simple">
<li><p>Frame(帧)</p></li>
</ul>
<p>表示流中的一帧数据,还包含该帧数据的相关信息,如时间戳、类型等。</p>
<ul class="simple">
<li><p>Filter(滤镜)</p></li>
</ul>
<p>主要指用于复合流 FrameSet 的一些算法处理模块,如点云算法处理。</p>
<ul class="simple">
<li><p>Record(录制)</p></li>
</ul>
<p>录制功能,捕获数据流并将其保存为文件,以便后续分析或回放。</p>
<ul class="simple">
<li><p>Playback(回放)</p></li>
</ul>
<p>回放功能,播放录制的文件,并支持控制回放速度和其他相关参数。</p>
</section>
<section id="id2">
<h2>SDK 编程模型<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>以下是 C++ 编程逻辑流程图。Python 的编程逻辑与之相同。</p>
<ul class="simple">
<li><p>标准流程图:</p></li>
</ul>
<p><img alt="image.png" src="../../../_images/Standard_Flowchart.png" /></p>
<p>标准流程图演示了如何从设备列表创建设备、设置和获取参数,以及应用后处理滤镜。</p>
<ul class="simple">
<li><p>使用默认配置的流程图(基于 OrbbecSDKConfig.xml 中的默认设置获取流):</p></li>
</ul>
<p><img alt="image" src="../../../_images/Default_Flowchart.png" /></p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>概述 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">概述</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">概述</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/1_overview/overview.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>概述<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章节提供 Orbbec SDK 的概述,包括支持的产品、主要功能和架构。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="introduction.html">引言</a><ul>
<li class="toctree-l2"><a class="reference internal" href="introduction.html#id2">支持的硬件产品</a></li>
<li class="toctree-l2"><a class="reference internal" href="introduction.html#orbbec">Orbbec 相机规格书</a></li>
<li class="toctree-l2"><a class="reference internal" href="introduction.html#id3">支持的平台</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="orbbecsdk_overview.html">Orbbec SDK 概述</a><ul>
<li class="toctree-l2"><a class="reference internal" href="orbbecsdk_overview.html#id1">术语</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecsdk_overview.html#orbbec-sdk-v2">Orbbec SDK v2 架构概述</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecsdk_overview.html#sdk">SDK 概念概述</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecsdk_overview.html#id2">SDK 编程模型</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,158 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>环境配置 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">环境配置</a></li>
<li><a class="reference internal" href="#id2">二进制安装</a></li>
<li><a class="reference internal" href="#id3">从源码构建</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">环境配置</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/2_installation/build_the_package.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>环境配置<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>根据官方指南安装 ROS 2:</p>
<ul class="simple">
<li><p><a class="reference external" href="https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html">ROS 2 安装指南(Ubuntu)</a></p></li>
</ul>
<p>安装依赖项:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>libgflags-dev<span class="w"> </span>nlohmann-json3-dev<span class="w"> </span><span class="se">\</span>
ros-<span class="nv">$ROS_DISTRO</span>-image-transport<span class="w"> </span>ros-<span class="si">${</span><span class="nv">ROS_DISTRO</span><span class="si">}</span>-image-transport-plugins<span class="w"> </span>ros-<span class="si">${</span><span class="nv">ROS_DISTRO</span><span class="si">}</span>-compressed-image-transport<span class="w"> </span><span class="se">\</span>
ros-<span class="nv">$ROS_DISTRO</span>-image-publisher<span class="w"> </span>ros-<span class="nv">$ROS_DISTRO</span>-camera-info-manager<span class="w"> </span><span class="se">\</span>
ros-<span class="nv">$ROS_DISTRO</span>-diagnostic-updater<span class="w"> </span>ros-<span class="nv">$ROS_DISTRO</span>-diagnostic-msgs<span class="w"> </span>ros-<span class="nv">$ROS_DISTRO</span>-statistics-msgs<span class="w"> </span>ros-<span class="nv">$ROS_DISTRO</span>-xacro<span class="w"> </span><span class="se">\</span>
ros-<span class="nv">$ROS_DISTRO</span>-backward-ros<span class="w"> </span>libdw-dev<span class="w"> </span>libssl-dev
</pre></div>
</div>
<p>启用 ROS 2 自动补全:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">eval</span><span class="w"> </span><span class="s2">&quot;</span><span class="k">$(</span>register-python-argcomplete3<span class="w"> </span>ros2<span class="k">)</span><span class="s2">&quot;</span>
<span class="nb">eval</span><span class="w"> </span><span class="s2">&quot;</span><span class="k">$(</span>register-python-argcomplete3<span class="w"> </span>colcon<span class="k">)</span><span class="s2">&quot;</span>
</pre></div>
</div>
</section>
<section id="id2">
<h1>二进制安装<a class="headerlink" href="#id2" title="Link to this heading"></a></h1>
<p>查看软件包:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>update
apt<span class="w"> </span>list<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>orbbec
</pre></div>
</div>
<p>安装 OrbbecSDK ROS2 包:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>ros-humble-orbbec-camera<span class="w"> </span>ros-humble-orbbec-description
</pre></div>
</div>
<p>安装完成后,直接使用即可,无需编译。</p>
</section>
<hr class="docutils" />
<section id="id3">
<h1>从源码构建<a class="headerlink" href="#id3" title="Link to this heading"></a></h1>
<p>创建 <code class="docutils literal notranslate"><span class="pre">colcon</span></code> 工作空间:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>mkdir<span class="w"> </span>-p<span class="w"> </span>~/ros2_ws/src
</pre></div>
</div>
<p>克隆源代码并切换到 <code class="docutils literal notranslate"><span class="pre">v2-main</span></code> 分支:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>~/ros2_ws/src
git<span class="w"> </span>clone<span class="w"> </span>https://github.com/orbbec/OrbbecSDK_ROS2.git
<span class="nb">cd</span><span class="w"> </span>OrbbecSDK_ROS2
git<span class="w"> </span>checkout<span class="w"> </span>v2-main
</pre></div>
</div>
<p>构建:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>~/ros2_ws
colcon<span class="w"> </span>build<span class="w"> </span>--event-handlers<span class="w"> </span>console_direct+<span class="w"> </span>--cmake-args<span class="w"> </span>-DCMAKE_BUILD_TYPE<span class="o">=</span>Release
</pre></div>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,119 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>安装 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">安装</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">安装</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/2_installation/installation.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>安装<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章节说明如何安装 Orbbec ROS2 Python SDK,包括从源码构建、安装依赖项以及使用注册脚本。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="build_the_package.html">环境配置</a></li>
<li class="toctree-l1"><a class="reference internal" href="build_the_package.html#id2">二进制安装</a></li>
<li class="toctree-l1"><a class="reference internal" href="build_the_package.html#id3">从源码构建</a></li>
<li class="toctree-l1"><a class="reference internal" href="registration_script.html">注册脚本(必需)</a><ul>
<li class="toctree-l2"><a class="reference internal" href="registration_script.html#id2">二进制安装</a></li>
<li class="toctree-l2"><a class="reference internal" href="registration_script.html#id3">从源码构建</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,128 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>注册脚本(必需) &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">注册脚本(必需)</a><ul>
<li><a class="reference internal" href="#id2">二进制安装</a></li>
<li><a class="reference internal" href="#id3">从源码构建</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">注册脚本(必需)</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/2_installation/registration_script.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>注册脚本(必需)<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>为了让 Orbbec 相机在 Linux 上被正确识别,请安装 udev 规则。</p>
<section id="id2">
<h2>二进制安装<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>cp<span class="w"> </span>/opt/ros/<span class="nv">$ROS_DISTRO</span>/share/orbbec_camera/udev/99-obsensor-libusb.rules<span class="w"> </span>/etc/udev/rules.d/
sudo<span class="w"> </span>udevadm<span class="w"> </span>control<span class="w"> </span>--reload-rules<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>sudo<span class="w"> </span>udevadm<span class="w"> </span>trigger
</pre></div>
</div>
</section>
<section id="id3">
<h2>从源码构建<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>~/ros2_ws/src/OrbbecSDK_ROS2/orbbec_camera/scripts
sudo<span class="w"> </span>bash<span class="w"> </span>install_udev_rules.sh
sudo<span class="w"> </span>udevadm<span class="w"> </span>control<span class="w"> </span>--reload-rules<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>sudo<span class="w"> </span>udevadm<span class="w"> </span>trigger
</pre></div>
</div>
<p>此步骤对于 Linux 用户是<strong>必需的</strong>。</p>
<p><code class="docutils literal notranslate"><span class="pre">注意:</span></code> 如果不执行此脚本,由于权限问题,打开设备将会失败。您需要使用 sudo(管理员权限)运行示例程序。</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>OrbbecViewer 快速入门 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">OrbbecViewer 快速入门</a><ul>
<li><a class="reference internal" href="#id1">下载</a></li>
<li><a class="reference internal" href="#id2">连接设备</a></li>
<li><a class="reference internal" href="#id3">相机控制</a></li>
<li><a class="reference internal" href="#id4">设备信息和固件升级</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">OrbbecViewer 快速入门</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/3_quickstarts/orbbecviewer.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="orbbecviewer">
<h1>OrbbecViewer 快速入门<a class="headerlink" href="#orbbecviewer" title="Link to this heading"></a></h1>
<blockquote>
<div><p><strong>注意:</strong> 此 ROS 包的参数和功能与 <strong>Orbbec Viewer</strong> 保持一致;有关参数使用或设备型号支持的任何问题,请参考 Orbbec Viewer。</p>
</div></blockquote>
<section id="id1">
<h2>下载<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p><strong>仓库链接:</strong><a class="reference external" href="https://github.com/orbbec/OrbbecSDK_v2/releases">OrbbecViewer 下载</a></p>
<p>根据您的设备类型选择合适版本的 OrbbecViewer。</p>
<p><img alt="orbbecviewer" src="../../../_images/orbbecviewer1.png" /></p>
</section>
<section id="id2">
<h2>连接设备<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>当 Orbbec Viewer 打开时,当前设备连接状态将显著地显示在应用程序窗口的左上角。此区域提供关于相机是否已连接并正常工作的即时反馈。</p>
<p><img alt="orbbecviewer" src="../../../_images/orbbecviewer2.png" /></p>
</section>
<section id="id3">
<h2>相机控制<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>您可以使用窗口顶部的按钮快速查看图像,并在窗口左侧的相机面板中调整图像参数。</p>
<p><img alt="orbbecviewer" src="../../../_images/orbbecviewer3.png" /></p>
</section>
<section id="id4">
<h2>设备信息和固件升级<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<p>点击窗口左下角的图标以查看当前相机信息并升级固件。</p>
<p><img alt="orbbecviewer" src="../../../_images/orbbecviewer4.png" /></p>
<p>请参考下面的列表获取最新的相机固件。<a class="reference external" href="https://www.orbbec.com/docs/g330-explore-camera-functions-in-orbbec-viewer/">更多信息请点击这里。</a></p>
<p><strong>仓库链接:</strong><a class="reference external" href="https://github.com/orbbec/OrbbecFirmware?tab=readme-ov-file#firmware-download">固件下载</a></p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>产品列表</strong></th>
<th><strong>下载链接</strong></th>
<th>最新版本</th>
</tr>
</thead>
<tbody>
<tr>
<td>Femto Bolt</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Bolt-Firmware">Femto Bolt 固件</a></td>
<td>v1.1.2</td>
</tr>
<tr>
<td>Femto Mega</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-Firmware">Femto Mega 固件</a></td>
<td>v1.3.1</td>
</tr>
<tr>
<td>Gemini 2</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2-Firmware">Gemini 2 固件</a></td>
<td>v1.4.98</td>
</tr>
<tr>
<td>Gemini 2 L</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini2L-Firmware">Gemini 2L 固件</a></td>
<td>v1.5.02</td>
</tr>
<tr>
<td>Femto Mega I</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Femto-Mega-I-Firmware">Femto Mega I 固件</a></td>
<td>v2.0.4</td>
</tr>
<tr>
<td>Gemini 330 系列</td>
<td><a href="https://www.orbbec.com/docs/g330-firmware-release/?_gl=1">Gemini 330 系列固件</a></td>
<td></td>
</tr>
<tr>
<td>Gemini 215</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini215-Firmware">Gemini 215</a></td>
<td>v1.0.9</td>
</tr>
<tr>
<td>Gemini 210</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemini210-Firmware">Gemini 210</a></td>
<td>v1.0.9</td>
</tr>
<tr>
<td>Gemini 435Le</td>
<td><a href="https://github.com/orbbec/OrbbecFirmware/releases/tag/Gemin435Le-Firmware">Gemini 435Le</a></td>
<td>v1.3.2</td>
</tr>
</tbody>
</table></section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,211 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>ROS 包快速入门 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">ROS 包快速入门</a><ul>
<li><a class="reference internal" href="#id1">简介</a></li>
<li><a class="reference internal" href="#id2">构建您的第一个相机应用</a><ul>
<li><a class="reference internal" href="#ros-2">步骤 1:配置 ROS 2 和工作空间环境</a></li>
<li><a class="reference internal" href="#id3">步骤 2:启动相机节点</a></li>
<li><a class="reference internal" href="#rviz2">步骤 3:在 RViz2 中可视化</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id4">示例功能</a><ul>
<li><a class="reference internal" href="#id5">列出可用的话题/服务/参数</a></li>
<li><a class="reference internal" href="#id6">回显话题</a></li>
<li><a class="reference internal" href="#id7">调用服务</a></li>
<li><a class="reference internal" href="#rosbag2">使用 rosbag2 录制</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">ROS 包快速入门</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/3_quickstarts/quickstart.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="ros">
<h1>ROS 包快速入门<a class="headerlink" href="#ros" title="Link to this heading"></a></h1>
<section id="id1">
<h2>简介<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p>本节提供 Orbbec ROS 2 包装器的快速入门指南。
您将学习如何:</p>
<ul class="simple">
<li><p>启动相机节点。</p></li>
<li><p>在 <strong>RViz2</strong> 中可视化深度/彩色流。</p></li>
<li><p>使用 <strong>ROS 2 CLI 工具</strong>与话题和服务交互。</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="id2">
<h2>构建您的第一个相机应用<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<section id="ros-2">
<h3>步骤 1:配置 ROS 2 和工作空间环境<a class="headerlink" href="#ros-2" title="Link to this heading"></a></h3>
<p>确保已配置 ROS 2 和工作空间环境:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">source</span><span class="w"> </span>/opt/ros/<span class="nv">$ROS_DISTRO</span>/setup.bash
</pre></div>
</div>
<p>源码构建需要</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">source</span><span class="w"> </span>~/ros2_ws/install/setup.bash
</pre></div>
</div>
</section>
<section id="id3">
<h3>步骤 2:启动相机节点<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>在终端 1 中</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>.<span class="w"> </span>./install/setup.bash
ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_devices_node<span class="w"> </span><span class="c1">#检查相机是否已连接</span>
ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span><span class="c1"># 或其他启动文件,见下表</span>
</pre></div>
</div>
<p>如果您连接了多个相机,可以指定<strong>序列号</strong>:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span>serial_number:<span class="o">=</span>&lt;您的相机序列号&gt;
</pre></div>
</div>
</section>
<section id="rviz2">
<h3>步骤 3:在 RViz2 中可视化<a class="headerlink" href="#rviz2" title="Link to this heading"></a></h3>
<p>启动 RViz2 并加载默认配置:</p>
<ul class="simple">
<li><p>在终端 2 中</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>rviz2
</pre></div>
</div>
<ul class="simple">
<li><p>添加一个 <strong>Image</strong> 显示,将话题设置为 <code class="docutils literal notranslate"><span class="pre">/camera/color/image_raw</span></code>。</p></li>
<li><p>为 <code class="docutils literal notranslate"><span class="pre">/camera/depth/image_raw</span></code> 添加另一个 <strong>Image</strong> 显示。</p></li>
<li><p>可选:为 <code class="docutils literal notranslate"><span class="pre">/camera/depth/points</span></code> 添加 <strong>PointCloud2</strong> 显示。</p></li>
</ul>
<p>现在您应该能在 RViz2 中看到彩色流、深度流和 3D 点云。</p>
</section>
</section>
<hr class="docutils" />
<section id="id4">
<h2>示例功能<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<p>节点运行后,尝试一些 ROS 2 CLI 命令:</p>
<section id="id5">
<h3>列出可用的话题/服务/参数<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>topic<span class="w"> </span>list
ros2<span class="w"> </span>service<span class="w"> </span>list
ros2<span class="w"> </span>param<span class="w"> </span>list
</pre></div>
</div>
</section>
<section id="id6">
<h3>回显话题<a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
<p>查看深度相机数据:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>topic<span class="w"> </span><span class="nb">echo</span><span class="w"> </span>/camera/depth/camera_info
</pre></div>
</div>
</section>
<section id="id7">
<h3>调用服务<a class="headerlink" href="#id7" title="Link to this heading"></a></h3>
<p>例如,获取设备信息:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_device_info<span class="w"> </span>orbbec_camera_msgs/srv/GetDeviceInfo<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</section>
<section id="rosbag2">
<h3>使用 rosbag2 录制<a class="headerlink" href="#rosbag2" title="Link to this heading"></a></h3>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>bag<span class="w"> </span>record<span class="w"> </span>/camera/color/image_raw<span class="w"> </span>/camera/depth/image_raw
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,124 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>快速开始 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">快速开始</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">快速开始</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/3_quickstarts/quickstarts.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>快速开始<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章节提供 SDK 的快速入门指南,帮助用户快速运行基本示例程序。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">ROS 包快速入门</a><ul>
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#id1">简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#id2">构建您的第一个相机应用</a></li>
<li class="toctree-l2"><a class="reference internal" href="quickstart.html#id4">示例功能</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="orbbecviewer.html">OrbbecViewer 快速入门</a><ul>
<li class="toctree-l2"><a class="reference internal" href="orbbecviewer.html#id1">下载</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecviewer.html#id2">连接设备</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecviewer.html#id3">相机控制</a></li>
<li class="toctree-l2"><a class="reference internal" href="orbbecviewer.html#id4">设备信息和固件升级</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>应用指南 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">应用指南</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">应用指南</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/application_guide.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>应用指南<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章介绍使用SDK进行应用开发,包括启动参数配置、ROS2服务和话题使用。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="launch_parameters.html">启动参数</a><ul>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#id2">核心与数据流配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#id3">传感器控制</a></li>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#id7">设备、同步与高级功能</a></li>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#id13">基础与通用参数</a></li>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#imu">IMU</a></li>
<li class="toctree-l2"><a class="reference internal" href="launch_parameters.html#id18">深度滤波器</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="services.html">所有可用的相机控制服务</a><ul>
<li class="toctree-l2"><a class="reference internal" href="services.html#id2">数据流控制</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id7">传感器与发射器控制</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id8">设备信息与管理</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id9">同步与触发</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id10">深度滤波器配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id11">数据捕获与校准管理</a></li>
<li class="toctree-l2"><a class="reference internal" href="services.html#id12">点云下采样</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="topics.html">可用话题</a><ul>
<li class="toctree-l2"><a class="reference internal" href="topics.html#id2">图像流</a></li>
<li class="toctree-l2"><a class="reference internal" href="topics.html#id3">点云话题</a></li>
<li class="toctree-l2"><a class="reference internal" href="topics.html#imu">IMU话题</a></li>
<li class="toctree-l2"><a class="reference internal" href="topics.html#id4">设备状态与诊断</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="coordinate_and_tf.html">坐标系和 TF 变换</a><ul>
<li class="toctree-l2"><a class="reference internal" href="coordinate_and_tf.html#id1">相机传感器结构</a></li>
<li class="toctree-l2"><a class="reference internal" href="coordinate_and_tf.html#abtf">从坐标系A到坐标系B的TF变换:</a></li>
<li class="toctree-l2"><a class="reference internal" href="coordinate_and_tf.html#ros2-vs">ROS2机器人坐标系 vs 相机光学坐标系</a></li>
<li class="toctree-l2"><a class="reference internal" href="coordinate_and_tf.html#ros2-tf">ROS2 TF工具的使用</a></li>
<li class="toctree-l2"><a class="reference internal" href="coordinate_and_tf.html#id3">相机TF计算和发布机制</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="compressed_image.html">压缩图像</a></li>
<li class="toctree-l1"><a class="reference internal" href="point_cloud.html">在ROS 2中启用和可视化点云</a><ul>
<li class="toctree-l2"><a class="reference internal" href="point_cloud.html#id1">启用深度点云</a></li>
<li class="toctree-l2"><a class="reference internal" href="point_cloud.html#id3">启用彩色点云</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,112 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>压缩图像 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">压缩图像</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">压缩图像</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/compressed_image.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>压缩图像<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>您可以使用 <code class="docutils literal notranslate"><span class="pre">image_transport</span></code> 通过 <code class="docutils literal notranslate"><span class="pre">jpeg</span></code> 压缩图像。以下是使用示例:</p>
<p>要访问压缩的彩色图像,可以使用以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>topic<span class="w"> </span><span class="nb">echo</span><span class="w"> </span>/camera/color/image_raw/compressed<span class="w"> </span>--no-arr
</pre></div>
</div>
<p>此命令将允许您从指定话题接收压缩的彩色图像。</p>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,468 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>坐标系和 TF 变换 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">坐标系和 TF 变换</a><ul>
<li><a class="reference internal" href="#id1">相机传感器结构</a></li>
<li><a class="reference internal" href="#abtf">从坐标系A到坐标系B的TF变换:</a></li>
<li><a class="reference internal" href="#ros2-vs">ROS2机器人坐标系 vs 相机光学坐标系</a></li>
<li><a class="reference internal" href="#ros2-tf">ROS2 TF工具的使用</a><ul>
<li><a class="reference internal" href="#id2">查看TF树结构</a></li>
<li><a class="reference internal" href="#rviz2tf">使用rviz2可视化TF树</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id3">相机TF计算和发布机制</a><ul>
<li><a class="reference internal" href="#obcameranode-calcandpublishstatictransform">核心函数:OBCameraNode::calcAndPublishStaticTransform()</a></li>
<li><a class="reference internal" href="#id4">函数解析</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">坐标系和 TF 变换</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/coordinate_and_tf.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="tf">
<h1>坐标系和 TF 变换<a class="headerlink" href="#tf" title="Link to this heading"></a></h1>
<section id="id1">
<h2>相机传感器结构<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p><img alt="module in rviz2" src="../../../_images/image3.png" /></p>
<p><img alt="module in rviz2" src="../../../_images/image1.png" /></p>
</section>
<section id="abtf">
<h2>从坐标系A到坐标系B的TF变换:<a class="headerlink" href="#abtf" title="Link to this heading"></a></h2>
<p>在Orbbec相机中,原点(0,0,0)取自camera_link位置。</p>
<p>可以使用以下命令查看相机的URDF模型和坐标系结构:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_description<span class="w"> </span>view_model.launch.py<span class="w"> </span>model:<span class="o">=</span>gemini_335_336.urdf.xacro
</pre></div>
</div>
<p><img alt="rviz2中的模块" src="../../../_images/image2.png" /></p>
</section>
<section id="ros2-vs">
<h2>ROS2机器人坐标系 vs 相机光学坐标系<a class="headerlink" href="#ros2-vs" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>视角:</p>
<ul>
<li><p>想象我们站在相机后面,向前看。</p></li>
<li><p>在讨论坐标、左右红外、传感器位置等时,始终使用此视角。</p></li>
</ul>
</li>
</ul>
<p><img alt="ROS2和相机坐标系统" src="../../../_images/image0.png" /></p>
<ul class="simple">
<li><p>ROS2坐标系:(X: 向前,Y: 向左,Z: 向上)</p></li>
<li><p>相机光学坐标系:(X: 向右,Y: 向下,Z: 向前)</p></li>
<li><p>我们封装器话题中发布的所有数据都是直接从相机传感器获取的光学数据。</p></li>
<li><p>静态和动态TF话题发布光学坐标系和ROS坐标系,使用户能够在两个坐标系之间转换。</p></li>
</ul>
</section>
<section id="ros2-tf">
<h2>ROS2 TF工具的使用<a class="headerlink" href="#ros2-tf" title="Link to this heading"></a></h2>
<section id="id2">
<h3>查看TF树结构<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
<p>可以使用以下ROS2命令来打印和可视化相机包发布的TF树:</p>
<p><strong>打印所有TF关系:</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>tf2_tools<span class="w"> </span>view_frames
</pre></div>
</div>
<p>这个命令会生成一个 <code class="docutils literal notranslate"><span class="pre">frames.pdf</span></code>文件,展示所有frame之间的层级关系。</p>
<p><img alt="image-20251027111351870" src="../../../_images/image4.png" /></p>
<p><strong>查看所有正在发布的TF信息:</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>topic<span class="w"> </span><span class="nb">echo</span><span class="w"> </span>/tf_static
</pre></div>
</div>
<p><strong>查看指定两个frame之间的TF变换关系:</strong></p>
<p>使用以下命令可以查看两个特定frame之间的变换关系:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>tf2_ros<span class="w"> </span>tf2_echo<span class="w"> </span><span class="o">[</span>source_frame<span class="o">]</span><span class="w"> </span><span class="o">[</span>target_frame<span class="o">]</span>
</pre></div>
</div>
<p>例如,查看从 <code class="docutils literal notranslate"><span class="pre">camera_link</span></code> 到 <code class="docutils literal notranslate"><span class="pre">camera_depth_optical_frame</span></code> 的变换:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>tf2_ros<span class="w"> </span>tf2_echo<span class="w"> </span>camera_link<span class="w"> </span>camera_depth_optical_frame
</pre></div>
</div>
<p>此命令会持续输出两个frame之间的实时变换信息,包括:</p>
<ul class="simple">
<li><p>平移 (Translation):x、y、z 坐标(单位:米)</p></li>
<li><p>旋转 (Rotation):四元数 (x, y, z, w)</p></li>
<li><p>欧拉角 (RPY):以欧拉角形式表示的旋转</p></li>
<li><p>齐次变换矩阵 (Transform Matrix):包含旋转和平移信息的 4×4 矩阵</p></li>
</ul>
<p>示例输出:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">At</span> <span class="n">time</span> <span class="mf">0.0</span>
<span class="o">-</span> <span class="n">Translation</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.000</span><span class="p">,</span> <span class="mf">0.000</span><span class="p">,</span> <span class="mf">0.000</span><span class="p">]</span>
<span class="o">-</span> <span class="n">Rotation</span><span class="p">:</span> <span class="ow">in</span> <span class="n">Quaternion</span> <span class="p">[</span><span class="o">-</span><span class="mf">0.500</span><span class="p">,</span> <span class="mf">0.500</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.500</span><span class="p">,</span> <span class="mf">0.500</span><span class="p">]</span>
<span class="o">-</span> <span class="n">Rotation</span><span class="p">:</span> <span class="ow">in</span> <span class="n">RPY</span> <span class="p">(</span><span class="n">radian</span><span class="p">)</span> <span class="p">[</span><span class="o">-</span><span class="mf">1.571</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.000</span><span class="p">,</span> <span class="o">-</span><span class="mf">1.571</span><span class="p">]</span>
<span class="o">-</span> <span class="n">Rotation</span><span class="p">:</span> <span class="ow">in</span> <span class="n">RPY</span> <span class="p">(</span><span class="n">degree</span><span class="p">)</span> <span class="p">[</span><span class="o">-</span><span class="mf">90.000</span><span class="p">,</span> <span class="o">-</span><span class="mf">0.000</span><span class="p">,</span> <span class="o">-</span><span class="mf">90.000</span><span class="p">]</span>
<span class="o">-</span> <span class="n">Matrix</span><span class="p">:</span>
<span class="mf">0.000</span> <span class="mf">0.000</span> <span class="mf">1.000</span> <span class="mf">0.000</span>
<span class="o">-</span><span class="mf">1.000</span> <span class="mf">0.000</span> <span class="mf">0.000</span> <span class="mf">0.000</span>
<span class="mf">0.000</span> <span class="o">-</span><span class="mf">1.000</span> <span class="mf">0.000</span> <span class="mf">0.000</span>
<span class="mf">0.000</span> <span class="mf">0.000</span> <span class="mf">0.000</span> <span class="mf">1.000</span>
</pre></div>
</div>
</section>
<section id="rviz2tf">
<h3>使用rviz2可视化TF树<a class="headerlink" href="#rviz2tf" title="Link to this heading"></a></h3>
<p>在rviz2中可以实时可视化TF树结构和坐标系的相对位置:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>rviz2
</pre></div>
</div>
<p>在rviz2中:</p>
<ul class="simple">
<li><p>添加 <code class="docutils literal notranslate"><span class="pre">TF</span></code>显示插件</p></li>
<li><p>配置固定框架(Fixed Frame)为 <code class="docutils literal notranslate"><span class="pre">camera_link</span></code>或 <code class="docutils literal notranslate"><span class="pre">camera_depth_optical_frame</span></code></p></li>
<li><p>选择显示的TF框架树</p></li>
</ul>
<p><img alt="image-20251027140652727" src="../../../_images/image5.png" /></p>
</section>
</section>
<section id="id3">
<h2>相机TF计算和发布机制<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<section id="obcameranode-calcandpublishstatictransform">
<h3>核心函数:<a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/166c35b4ea211c60265ca9b38b1b15519d1ea3dd/orbbec_camera/src/ob_camera_node.cpp#L3475">OBCameraNode::calcAndPublishStaticTransform()</a><a class="headerlink" href="#obcameranode-calcandpublishstatictransform" title="Link to this heading"></a></h3>
<p>相机节点通过此函数计算和发布所有传感器之间的静态转换关系。</p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">OBCameraNode::calcAndPublishStaticTransform</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Quaternion</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">,</span><span class="w"> </span><span class="n">zero_rot</span><span class="p">;</span>
<span class="w"> </span><span class="n">zero_rot</span><span class="p">.</span><span class="n">setRPY</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">);</span>
<span class="w"> </span><span class="n">quaternion_optical</span><span class="p">.</span><span class="n">setRPY</span><span class="p">(</span><span class="o">-</span><span class="n">M_PI</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="n">M_PI</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Vector3</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">];</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">device_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">device_</span><span class="o">-&gt;</span><span class="n">getDeviceInfo</span><span class="p">();</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">device_info</span><span class="p">);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">pid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">device_info</span><span class="o">-&gt;</span><span class="n">getPid</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">base_stream_profile</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Failed to get base stream profile&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">base_stream_profile</span><span class="p">.</span><span class="n">get</span><span class="p">());</span>
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="o">&amp;</span><span class="n">item</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">stream_profile_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">stream_index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">item</span><span class="p">.</span><span class="n">first</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">stream_profile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">item</span><span class="p">.</span><span class="n">second</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">stream_profile</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">continue</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">base_stream_profile</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">stream_name_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotationMatrixToQuaternion</span><span class="p">(</span><span class="n">ex</span><span class="p">.</span><span class="n">rot</span><span class="p">);</span>
<span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">.</span><span class="n">inverse</span><span class="p">();</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Vector3</span><span class="w"> </span><span class="n">trans</span><span class="p">(</span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">timestamp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">node_</span><span class="o">-&gt;</span><span class="n">now</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stream_index</span><span class="p">.</span><span class="n">first</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">base_stream_</span><span class="p">.</span><span class="n">first</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stream_index</span><span class="p">.</span><span class="n">first</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">OB_STREAM_IR_RIGHT</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">base_stream_</span><span class="p">.</span><span class="n">first</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">OB_STREAM_DEPTH</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">abs</span><span class="p">(</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"> </span><span class="c1">// because left and right ir calibration is error</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">publishStaticTF</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span><span class="w"> </span><span class="n">trans</span><span class="p">,</span><span class="w"> </span><span class="n">Q</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">],</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">publishStaticTF</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">,</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">],</span>
<span class="w"> </span><span class="n">optical_frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]);</span>
<span class="w"> </span><span class="n">RCLCPP_INFO_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Publishing static transform from &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">stream_name_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; to &quot;</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">stream_name_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">]);</span>
<span class="w"> </span><span class="n">RCLCPP_INFO_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Translation &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;, &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">trans</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;, &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">trans</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span>
<span class="w"> </span><span class="n">RCLCPP_INFO_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;Rotation &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">Q</span><span class="p">.</span><span class="n">getX</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;, &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">Q</span><span class="p">.</span><span class="n">getY</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;, &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">Q</span><span class="p">.</span><span class="n">getZ</span><span class="p">()</span>
<span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot;, &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">Q</span><span class="p">.</span><span class="n">getW</span><span class="p">());</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">((</span><span class="n">pid</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FEMTO_BOLT_PID</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">pid</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">FEMTO_MEGA_PID</span><span class="p">)</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span>
<span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="c1">// calc depth to color</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">depth_to_color_extrinsics</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotationMatrixToQuaternion</span><span class="p">(</span><span class="n">depth_to_color_extrinsics</span><span class="p">.</span><span class="n">rot</span><span class="p">);</span>
<span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">.</span><span class="n">inverse</span><span class="p">();</span>
<span class="w"> </span><span class="n">publishStaticTF</span><span class="p">(</span><span class="n">node_</span><span class="o">-&gt;</span><span class="n">now</span><span class="p">(),</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">,</span><span class="w"> </span><span class="n">Q</span><span class="p">,</span><span class="w"> </span><span class="n">camera_link_frame_id_</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">publishStaticTF</span><span class="p">(</span><span class="n">node_</span><span class="o">-&gt;</span><span class="n">now</span><span class="p">(),</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">,</span><span class="w"> </span><span class="n">zero_rot</span><span class="p">,</span><span class="w"> </span><span class="n">camera_link_frame_id_</span><span class="p">,</span>
<span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_color_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">INFRA0</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_ir_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">INFRA0</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">INFRA0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA0</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA0</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">INFRA1</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_left_ir_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">INFRA1</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">INFRA1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA1</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA1</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">INFRA2</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_right_ir_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">INFRA2</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="n">std</span><span class="o">::</span><span class="n">abs</span><span class="p">(</span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">INFRA2</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA2</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">INFRA2</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">ACCEL</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_accel_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">ACCEL</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">ACCEL</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">ACCEL</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">ACCEL</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">frame_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">&quot;depth_to_gyro_extrinsics&quot;</span><span class="p">;</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">]);</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">ob</span><span class="o">::</span><span class="n">Error</span><span class="w"> </span><span class="o">&amp;</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">RCLCPP_ERROR_STREAM</span><span class="p">(</span><span class="n">logger_</span><span class="p">,</span>
<span class="w"> </span><span class="s">&quot;Failed to get &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">frame_id</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="s">&quot; extrinsic: &quot;</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">getMessage</span><span class="p">());</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">OBExtrinsic</span><span class="p">({{</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">},</span><span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">}});</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id</span><span class="p">);</span>
<span class="w"> </span><span class="n">CHECK_NOTNULL</span><span class="p">(</span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">]);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_sync_output_accel_gyro_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Quaternion</span><span class="w"> </span><span class="n">zero_rot</span><span class="p">;</span>
<span class="w"> </span><span class="n">zero_rot</span><span class="p">.</span><span class="n">setRPY</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">);</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Vector3</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
<span class="w"> </span><span class="n">publishStaticTF</span><span class="p">(</span><span class="n">node_</span><span class="o">-&gt;</span><span class="n">now</span><span class="p">(),</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">,</span><span class="w"> </span><span class="n">zero_rot</span><span class="p">,</span><span class="w"> </span><span class="n">optical_frame_id_</span><span class="p">[</span><span class="n">GYRO</span><span class="p">],</span>
<span class="w"> </span><span class="n">accel_gyro_frame_id_</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
</section>
<section id="id4">
<h3>函数解析<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<p>下面是代码的详细解释:</p>
<p><strong>四元数初始化与坐标系变换</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="n">tf2</span><span class="o">::</span><span class="n">Quaternion</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">,</span><span class="w"> </span><span class="n">zero_rot</span><span class="p">;</span>
<span class="n">zero_rot</span><span class="p">.</span><span class="n">setRPY</span><span class="p">(</span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">);</span>
<span class="n">quaternion_optical</span><span class="p">.</span><span class="n">setRPY</span><span class="p">(</span><span class="o">-</span><span class="n">M_PI</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mf">0.0</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="n">M_PI</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
</pre></div>
</div>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">quaternion_optical</span></code>:定义光学坐标系到ROS标准坐标系的旋转变换(90度旋转)</p></li>
<li><p>这个旋转将相机光学坐标系(X右、Y下、Z前)转换为ROS标准坐标系(X前、Y左、Z上)</p></li>
</ul>
<p><strong>获取设备信息与基准流</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="k">auto</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">];</span>
<span class="k">auto</span><span class="w"> </span><span class="n">device_info</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">device_</span><span class="o">-&gt;</span><span class="n">getDeviceInfo</span><span class="p">();</span>
<span class="c1">// 通常基准流是深度流(DEPTH)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>选择一个基准流(通常是深度流),所有其他传感器的变换都相对于这个基准流进行计算</p></li>
</ul>
<p><strong>遍历所有流并计算相对变换</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="o">&amp;</span><span class="n">item</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="n">stream_profile_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">stream_index</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">item</span><span class="p">.</span><span class="n">first</span><span class="p">;</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">stream_profile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">item</span><span class="p">.</span><span class="n">second</span><span class="p">;</span>
<span class="w"> </span><span class="c1">// 获取该流相对于基准流的外参</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="p">;</span>
<span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">base_stream_profile</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 将旋转矩阵转换为四元数</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">rotationMatrixToQuaternion</span><span class="p">(</span><span class="n">ex</span><span class="p">.</span><span class="n">rot</span><span class="p">);</span>
<span class="w"> </span><span class="c1">// 应用光学坐标系变换:Q_new = quaternion_optical * Q * quaternion_optical.inverse()</span>
<span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">Q</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">.</span><span class="n">inverse</span><span class="p">();</span>
<span class="w"> </span><span class="n">tf2</span><span class="o">::</span><span class="n">Vector3</span><span class="w"> </span><span class="nf">trans</span><span class="p">(</span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="w"> </span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="w"> </span><span class="n">ex</span><span class="p">.</span><span class="n">trans</span><span class="p">[</span><span class="mi">2</span><span class="p">]);</span>
</pre></div>
</div>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">OBExtrinsic</span></code>包含了两个传感器之间的旋转矩阵(<code class="docutils literal notranslate"><span class="pre">rot</span></code>)和平移向量(<code class="docutils literal notranslate"><span class="pre">trans</span></code>)</p></li>
<li><p>通过四元数乘法将光学坐标系变换应用到每个传感器的旋转关系中</p></li>
<li><p>这个变换将相机原生的光学坐标系转换为ROS标准坐标系</p></li>
</ul>
<p><strong>发布TF变换</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="c1">// 发布传感器到基准流的变换(在ROS坐标系中)</span>
<span class="n">publishStaticTF</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span><span class="w"> </span><span class="n">trans</span><span class="p">,</span><span class="w"> </span><span class="n">Q</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">base_stream_</span><span class="p">],</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]);</span>
<span class="c1">// 发布传感器到其光学frame的变换</span>
<span class="n">publishStaticTF</span><span class="p">(</span><span class="n">timestamp</span><span class="p">,</span><span class="w"> </span><span class="n">zero_trans</span><span class="p">,</span><span class="w"> </span><span class="n">quaternion_optical</span><span class="p">,</span><span class="w"> </span><span class="n">frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">],</span>
<span class="w"> </span><span class="n">optical_frame_id_</span><span class="p">[</span><span class="n">stream_index</span><span class="p">]);</span>
</pre></div>
</div>
<ul class="simple">
<li><p>第一个 <code class="docutils literal notranslate"><span class="pre">publishStaticTF</span></code>:发布从基准流到当前传感器的变换(平移+旋转)</p></li>
<li><p>第二个 <code class="docutils literal notranslate"><span class="pre">publishStaticTF</span></code>:发布从物理frame到光学frame的变换(纯旋转,无平移)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">frame_id_[stream_index]</span></code>:物理坐标系frame名称(如 <code class="docutils literal notranslate"><span class="pre">camera_depth_frame</span></code>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">optical_frame_id_[stream_index]</span></code>:光学坐标系frame名称(如 <code class="docutils literal notranslate"><span class="pre">camera_depth_optical_frame</span></code>)</p></li>
</ul>
<p><strong>特殊处理左右红外摄像头</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">stream_index</span><span class="p">.</span><span class="n">first</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">OB_STREAM_IR_RIGHT</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">base_stream_</span><span class="p">.</span><span class="n">first</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">OB_STREAM_DEPTH</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">abs</span><span class="p">(</span><span class="n">trans</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span>
<span class="p">}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>左右红外摄像头在设备坐标系中关于中心平面对称</p></li>
<li><p>通过 <code class="docutils literal notranslate"><span class="pre">abs()</span></code>确保X轴偏移为正值,保持几何一致性</p></li>
</ul>
<p><strong>发布深度到其他传感器的外参</strong></p>
<div class="highlight-cpp notranslate"><div class="highlight"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">DEPTH</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_stream_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">enable_publish_extrinsic_</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">OBExtrinsic</span><span class="w"> </span><span class="n">ex</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">base_stream_profile</span><span class="o">-&gt;</span><span class="n">getExtrinsicTo</span><span class="p">(</span><span class="n">stream_profile_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]);</span>
<span class="w"> </span><span class="k">auto</span><span class="w"> </span><span class="n">ex_msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">obExtrinsicsToMsg</span><span class="p">(</span><span class="n">ex</span><span class="p">,</span><span class="w"> </span><span class="s">&quot;depth_to_color_extrinsics&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="n">depth_to_other_extrinsics_publishers_</span><span class="p">[</span><span class="n">COLOR</span><span class="p">]</span><span class="o">-&gt;</span><span class="n">publish</span><span class="p">(</span><span class="n">ex_msg</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>通过TF发布变换关系</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,794 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>启动参数 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">启动参数</a><ul>
<li><a class="reference internal" href="#id2">核心与数据流配置</a></li>
<li><a class="reference internal" href="#id3">传感器控制</a><ul>
<li><a class="reference internal" href="#id4">彩色流</a></li>
<li><a class="reference internal" href="#id5">深度流</a></li>
<li><a class="reference internal" href="#id6">红外流</a></li>
<li><a class="reference internal" href="#ldp">激光 / LDP</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id7">设备、同步与高级功能</a><ul>
<li><a class="reference internal" href="#id8">多相机同步</a></li>
<li><a class="reference internal" href="#id9">网络相机</a></li>
<li><a class="reference internal" href="#id10">设备特定</a></li>
<li><a class="reference internal" href="#id11">视差</a></li>
<li><a class="reference internal" href="#ae">交错AE模式</a></li>
<li><a class="reference internal" href="#id12">相机内同步</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id13">基础与通用参数</a><ul>
<li><a class="reference internal" href="#id14">固件与后端</a></li>
<li><a class="reference internal" href="#tf">TF、外参与校准</a></li>
<li><a class="reference internal" href="#id15">时间同步</a></li>
<li><a class="reference internal" href="#id16">日志与诊断</a></li>
<li><a class="reference internal" href="#id17">其他</a></li>
</ul>
</li>
<li><a class="reference internal" href="#imu">IMU</a></li>
<li><a class="reference internal" href="#id18">深度滤波器</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">启动参数</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/launch_parameters.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>启动参数<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<blockquote>
<div><p>如果您不确定如何设置参数,可以连接orbbec相机并打开 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK/releases">OrbbecViewer</a>。</p>
</div></blockquote>
<p>以下是可用的启动参数:</p>
<section id="id2">
<h2>核心与数据流配置<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">camera_name</span></code></strong></p>
<ul>
<li><p>启动节点的命名空间。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">serial_number</span></code></strong></p>
<ul>
<li><p>相机的序列号。当使用多个相机时需要此参数。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">usb_port</span></code></strong></p>
<ul>
<li><p>相机的USB端口。当使用多个相机时需要此参数。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">device_num</span></code></strong></p>
<ul>
<li><p>设备数量。如果需要多个相机,必须填写此参数。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">[color|depth|left_ir|right_ir|ir]_[width|height|fps|format]</span></code></strong></p>
<ul>
<li><p>传感器流的分辨率和帧率。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">[color|depth|left_ir|right_ir|ir]_rotation</span></code></strong></p>
<ul>
<li><p>设置流图像旋转。</p></li>
<li><p>可能的值为 <code class="docutils literal notranslate"><span class="pre">0</span></code>、<code class="docutils literal notranslate"><span class="pre">90</span></code>、<code class="docutils literal notranslate"><span class="pre">180</span></code>、<code class="docutils literal notranslate"><span class="pre">270</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">[color|depth|left_ir|right_ir|ir]_flip</span></code></strong></p>
<ul>
<li><p>启用流图像翻转。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">[color|depth|left_ir|right_ir|ir]_mirror</span></code></strong></p>
<ul>
<li><p>启用流图像镜像。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_point_cloud</span></code></strong></p>
<ul>
<li><p>启用点云。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_colored_point_cloud</span></code></strong></p>
<ul>
<li><p>启用RGB点云。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">cloud_frame_id</span></code></strong></p>
<ul>
<li><p>修改ros消息中的 <code class="docutils literal notranslate"><span class="pre">frame_id</span></code> 名称。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">ordered_pc</span></code></strong></p>
<ul>
<li><p>启用无效点云过滤。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">point_cloud_qos</span></code>、<code class="docutils literal notranslate"><span class="pre">[stream]_qos</span></code>、<code class="docutils literal notranslate"><span class="pre">[stream]_camera_info_qos</span></code></strong></p>
<ul>
<li><p>ROS 2消息服务质量(QoS)设置。可能的值为 <code class="docutils literal notranslate"><span class="pre">SYSTEM_DEFAULT</span></code>、<code class="docutils literal notranslate"><span class="pre">DEFAULT</span></code>、<code class="docutils literal notranslate"><span class="pre">PARAMETER_EVENTS</span></code>、<code class="docutils literal notranslate"><span class="pre">SERVICES_DEFAULT</span></code>、<code class="docutils literal notranslate"><span class="pre">PARAMETERS</span></code>、<code class="docutils literal notranslate"><span class="pre">SENSOR_DATA</span></code>,不区分大小写。这些分别对应 <code class="docutils literal notranslate"><span class="pre">rmw_qos_profile_system_default</span></code>、<code class="docutils literal notranslate"><span class="pre">rmw_qos_profile_default</span></code>、<code class="docutils literal notranslate"><span class="pre">rmw_qos_profile_parameter_events</span></code>、<code class="docutils literal notranslate"><span class="pre">rmw_qos_profile_services_default</span></code>、<code class="docutils literal notranslate"><span class="pre">rmw_qos_profile_parameters</span></code> 和 <code class="docutils literal notranslate"><span class="pre">SENSOR_DATA</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color.image_raw.enable_pub_plugins</span></code></strong></p>
<ul>
<li><p>启用彩色图像传输插件。默认值:<code class="docutils literal notranslate"><span class="pre">[&quot;image_transport/compressed&quot;,</span> <span class="pre">&quot;image_transport/raw&quot;,</span> <span class="pre">&quot;image_transport/theora&quot;]</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">depth.image_raw.enable_pub_plugins</span></code></strong></p>
<ul>
<li><p>启用深度图像传输插件。默认值:<code class="docutils literal notranslate"><span class="pre">[&quot;image_transport/compressedDepth&quot;,</span> <span class="pre">&quot;image_transport/raw&quot;]</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">left_ir.image_raw.enable_pub_plugins</span></code></strong></p>
<ul>
<li><p>启用左红外图像传输插件。默认值:<code class="docutils literal notranslate"><span class="pre">[&quot;image_transport/compressed&quot;,</span> <span class="pre">&quot;image_transport/raw&quot;,</span> <span class="pre">&quot;image_transport/theora&quot;]</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">right_ir.image_raw.enable_pub_plugins</span></code></strong></p>
<ul>
<li><p>启用右红外图像传输插件。默认值:<code class="docutils literal notranslate"><span class="pre">[&quot;image_transport/compressed&quot;,</span> <span class="pre">&quot;image_transport/raw&quot;,</span> <span class="pre">&quot;image_transport/theora&quot;]</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">point_cloud_decimation_filter_factor</span></code></strong></p>
<ul>
<li><p>点云下采样因子。范围:<code class="docutils literal notranslate"><span class="pre">1–8</span></code>,<code class="docutils literal notranslate"><span class="pre">1</span></code>表示不下采样,数值越大下采样越强。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">preset_resolution_config</span></code></strong></p>
<ul>
<li><p>摄像头设备的预设分辨率配置。格式: &quot;width,height,ir_decimation_factor,depth_decimation_factor&quot;. Example: &quot;1280,720,4,4&quot;. 仅在 Gemini435Le 设备上受支持。留空禁用。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id3">
<h2>传感器控制<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<section id="id4">
<h3>彩色流<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_color_auto_exposure</span></code></strong></p>
<ul>
<li><p>启用彩色自动曝光。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_color_auto_exposure_priority</span></code></strong></p>
<ul>
<li><p>启用彩色自动曝光优先级。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_exposure</span></code></strong></p>
<ul>
<li><p>设置彩色曝光。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_gain</span></code></strong></p>
<ul>
<li><p>设置彩色增益。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_color_auto_white_balance</span></code></strong></p>
<ul>
<li><p>启用彩色自动白平衡。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_white_balance</span></code></strong></p>
<ul>
<li><p>设置彩色白平衡。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_ae_max_exposure</span></code></strong></p>
<ul>
<li><p>设置彩色自动曝光的最大曝光值。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_brightness</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">color_sharpness</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">color_gamma</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">color_saturation</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">color_contrast</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">color_hue</span></code></strong></p>
<ul>
<li><p>设置彩色亮度、锐度、伽马、饱和度、对比度和色调。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_backlight_compensation</span></code></strong></p>
<ul>
<li><p>启用彩色相机的背光补偿功能。<strong>范围</strong>:<code class="docutils literal notranslate"><span class="pre">0–6</span></code>,<strong>默认值</strong>:<code class="docutils literal notranslate"><span class="pre">3</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_powerline_freq</span></code></strong></p>
<ul>
<li><p>设置电源线频率。可能的值为 <code class="docutils literal notranslate"><span class="pre">disable</span></code>、<code class="docutils literal notranslate"><span class="pre">50hz</span></code>、<code class="docutils literal notranslate"><span class="pre">60hz</span></code>、<code class="docutils literal notranslate"><span class="pre">auto</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_color_decimation_filter</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">color_decimation_filter_scale</span></code></strong></p>
<ul>
<li><p>启用彩色抽取滤波器并设置其比例。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_ae_roi_[left|right|top|bottom]</span></code></strong></p>
<ul>
<li><p>设置彩色自动曝光ROI。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">color_denoising_level</span></code></strong></p>
<ul>
<li><p>启用Gemini 330系列设备的ISP降噪功能。<strong>范围:</strong> <code class="docutils literal notranslate"><span class="pre">0–8</span></code>,<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">0</span></code>(自动)。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id5">
<h3>深度流<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<ul>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_depth_auto_exposure_priority</span></code></strong></p>
<ul class="simple">
<li><p>启用深度自动曝光优先级。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">mean_intensity_set_point</span></code></strong></p>
<ul class="simple">
<li><p>设置深度图像的目标平均强度。例如:<code class="docutils literal notranslate"><span class="pre">mean_intensity_set_point:=100</span></code>。</p></li>
</ul>
<blockquote>
<div><p><strong>注意:</strong> 这取代了已弃用的 <code class="docutils literal notranslate"><span class="pre">depth_brightness</span></code>,后者仍支持以保持向后兼容性。</p>
</div></blockquote>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_depth_scale</span></code></strong></p>
<ul class="simple">
<li><p>启用深度缩放。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">depth_precision</span></code></strong></p>
<ul class="simple">
<li><p>深度精度应为 <code class="docutils literal notranslate"><span class="pre">1mm</span></code> 格式。默认值为 <code class="docutils literal notranslate"><span class="pre">1mm</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">depth_ae_roi_[left|right|top|bottom]</span></code></strong></p>
<ul class="simple">
<li><p>设置深度自动曝光ROI。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id6">
<h3>红外流<a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_ir_auto_exposure</span></code></strong></p>
<ul>
<li><p>启用红外自动曝光。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">ir_exposure</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">ir_gain</span></code></strong></p>
<ul>
<li><p>设置红外曝光和增益。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">ir_ae_max_exposure</span></code></strong></p>
<ul>
<li><p>设置红外自动曝光的最大曝光值。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">ir_brightness</span></code></strong></p>
<ul>
<li><p>设置红外亮度。</p></li>
</ul>
</li>
</ul>
</section>
<section id="ldp">
<h3>激光 / LDP<a class="headerlink" href="#ldp" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_laser</span></code></strong></p>
<ul>
<li><p>启用激光。默认值为 <code class="docutils literal notranslate"><span class="pre">true</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">laser_energy_level</span></code></strong></p>
<ul>
<li><p>设置激光能量级别。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_ldp</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">ldp_power_level</span></code></strong></p>
<ul>
<li><p>启用LDP并设置其功率级别。</p></li>
</ul>
</li>
</ul>
</section>
</section>
<section id="id7">
<h2>设备、同步与高级功能<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
<section id="id8">
<h3>多相机同步<a class="headerlink" href="#id8" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">sync_mode</span></code></strong></p>
<ul>
<li><p>设置同步模式。默认值为 <code class="docutils literal notranslate"><span class="pre">standalone</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">depth_delay_us</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">color_delay_us</span></code></strong></p>
<ul>
<li><p>接收捕获命令或触发信号后深度/彩色图像捕获的延迟时间(微秒)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">trigger2image_delay_us</span></code></strong></p>
<ul>
<li><p>接收捕获命令或触发信号后图像捕获的延迟时间(微秒)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">trigger_out_delay_us</span></code></strong></p>
<ul>
<li><p>接收捕获命令或触发信号后触发信号输出的延迟时间(微秒)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">trigger_out_enabled</span></code></strong></p>
<ul>
<li><p>启用触发输出信号。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">software_trigger_enabled</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">software_trigger_period</span></code></strong></p>
<ul>
<li><p>启用软件触发输出信号 / 设置软件触发周期(毫秒)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">frames_per_trigger</span></code></strong></p>
<ul>
<li><p>触发模式下每次触发后每个流的帧数。</p></li>
</ul>
</li>
</ul>
<blockquote>
<div><p>用于 <a class="reference internal" href="../5_advanced_guide/multi_camera/multi_camera_synced.html"><span class="doc">多相机同步</span></a>。</p>
</div></blockquote>
</section>
<section id="id9">
<h3>网络相机<a class="headerlink" href="#id9" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enumerate_net_device</span></code></strong></p>
<ul>
<li><p>启用自动枚举网络设备。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">net_device_ip</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">net_device_port</span></code></strong></p>
<ul>
<li><p>设置网络设备的IP地址和端口(通常为 <code class="docutils literal notranslate"><span class="pre">8090</span></code>)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_enable</span></code></strong></p>
<ul>
<li><p>启用强制IP功能。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">false</span></code></p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_mac</span></code></strong></p>
<ul>
<li><p>连接多个相机时的目标设备MAC地址(例如,<code class="docutils literal notranslate"><span class="pre">&quot;54:14:FD:06:07:DA&quot;</span></code>)。您可以使用 <code class="docutils literal notranslate"><span class="pre">list_devices_node</span></code> 查找每个设备的MAC。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">&quot;&quot;</span></code></p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_address</span></code></strong></p>
<ul>
<li><p>要分配的静态IP地址。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">192.168.1.10</span></code></p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_subnet_mask</span></code></strong></p>
<ul>
<li><p>静态IP的子网掩码。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">255.255.255.0</span></code></p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_gateway</span></code></strong></p>
<ul>
<li><p>静态IP的网关地址。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">192.168.1.1</span></code></p></li>
</ul>
</li>
</ul>
<blockquote>
<div><p>用于 <a class="reference internal" href="../5_advanced_guide/configuration/net_camera.html"><span class="doc">网络相机</span></a>。</p>
</div></blockquote>
</section>
<section id="id10">
<h3>设备特定<a class="headerlink" href="#id10" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">device_preset</span></code></strong></p>
<ul>
<li><p>默认值为 <code class="docutils literal notranslate"><span class="pre">Default</span></code>。仅支持G330系列。有关更多信息,请参阅 <a class="reference external" href="https://www.orbbec.com/docs/g330-use-depth-presets/">G330文档</a>。该值应为 <a class="reference internal" href="../5_advanced_guide/configuration/predefined_presets.html"><span class="doc">表中列出</span></a> 的预设名称之一。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_gmsl_trigger</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">gmsl_trigger_fps</span></code></strong></p>
<ul>
<li><p>启用gmsl触发输出信号 / 设置gmsl触发fps。用于 <a class="reference internal" href="../5_advanced_guide/multi_camera/gmsl_camera.html"><span class="doc">gmsl相机</span></a>。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id11">
<h3>视差<a class="headerlink" href="#id11" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">disparity_to_depth_mode</span></code></strong></p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">HW</span></code>:使用硬件视差到深度转换。<code class="docutils literal notranslate"><span class="pre">SW</span></code>:使用软件视差到深度转换。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">disparity_range_mode</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">disparity_search_offset</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">disparity_offset_config</span></code></strong></p>
<ul>
<li><p>视差搜索偏移参数。用于 <a class="reference internal" href="../5_advanced_guide/configuration/disparity_search_offset.html"><span class="doc">视差搜索偏移</span></a>。</p></li>
</ul>
</li>
</ul>
</section>
<section id="ae">
<h3>交错AE模式<a class="headerlink" href="#ae" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">interleave_ae_mode</span></code></strong></p>
<ul>
<li><p>设置 <code class="docutils literal notranslate"><span class="pre">laser</span></code> 或 <code class="docutils literal notranslate"><span class="pre">hdr</span></code> 交错。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">interleave_frame_enable</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">interleave_skip_enable</span></code></strong>、<strong><code class="docutils literal notranslate"><span class="pre">interleave_skip_index</span></code></strong></p>
<ul>
<li><p>控制交错帧模式的参数。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">[hdr|laser]_index[0|1]_[...]</span></code></strong></p>
<ul>
<li><p>在交错帧模式下,设置hdr或laser交错帧的第0和第1帧参数。</p></li>
</ul>
</li>
<li><p><em>所有交错参数用于 <a class="reference internal" href="../5_advanced_guide/configuration/interleave_ae_mode.html"><span class="doc">交错ae模式</span></a>。</em></p></li>
</ul>
</section>
<section id="id12">
<h3>相机内同步<a class="headerlink" href="#id12" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">depth_registration</span></code></strong></p>
<ul>
<li><p>启用深度帧与彩色帧的对齐。当 <code class="docutils literal notranslate"><span class="pre">enable_colored_point_cloud</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时需要此字段。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">align_mode</span></code></strong></p>
<ul>
<li><p>要使用的对齐模式。选项为 <code class="docutils literal notranslate"><span class="pre">HW</span></code>(硬件对齐)和 <code class="docutils literal notranslate"><span class="pre">SW</span></code>(软件对齐)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">align_target_stream</span></code></strong></p>
<ul>
<li><p>设置对齐目标流模式。</p></li>
<li><p>可能的值为 <code class="docutils literal notranslate"><span class="pre">COLOR</span></code>、<code class="docutils literal notranslate"><span class="pre">DEPTH</span></code>。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">COLOR</span></code>:将深度对齐到彩色。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">DEPTH</span></code>:将彩色对齐到深度。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">intra_camera_sync_reference</span></code></strong></p>
<ul>
<li><p>设置相机内同步的参考点。适用于Gemini 330系列设备,当 <code class="docutils literal notranslate"><span class="pre">sync_mode</span></code> 设置为<strong>软件</strong>或<strong>硬件触发</strong>模式时。<strong>选项:</strong> <code class="docutils literal notranslate"><span class="pre">Start</span></code>、<code class="docutils literal notranslate"><span class="pre">Middle</span></code>、<code class="docutils literal notranslate"><span class="pre">End</span></code>。设置为空时,长基线设备默认End,短基线设备默认Middle。</p></li>
</ul>
</li>
</ul>
</section>
</section>
<section id="id13">
<h2>基础与通用参数<a class="headerlink" href="#id13" title="Link to this heading"></a></h2>
<section id="id14">
<h3>固件与后端<a class="headerlink" href="#id14" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">upgrade_firmware</span></code></strong></p>
<ul>
<li><p>输入参数为固件路径。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">preset_firmware_path</span></code></strong></p>
<ul>
<li><p>输入参数为预设固件路径。如果输入多个路径,每个路径需要用 <code class="docutils literal notranslate"><span class="pre">,</span></code> 分隔,最多可输入3个固件路径。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">uvc_backend</span></code></strong></p>
<ul>
<li><p>可选值:<code class="docutils literal notranslate"><span class="pre">v4l2</span></code>、<code class="docutils literal notranslate"><span class="pre">libuvc</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">connection_delay</span></code></strong></p>
<ul>
<li><p>重新打开设备的延迟时间(毫秒)。某些设备(如Astra mini)需要较长时间初始化,热插拔时立即重新打开设备可能导致固件崩溃。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">retry_on_usb3_detection_failure</span></code></strong></p>
<ul>
<li><p>如果相机连接到USB 2.0端口且未检测到,系统将尝试重置相机最多三次。使用USB 2.0连接时建议将此参数设置为 <code class="docutils literal notranslate"><span class="pre">false</span></code>,以避免不必要的重置。</p></li>
</ul>
</li>
</ul>
</section>
<section id="tf">
<h3>TF、外参与校准<a class="headerlink" href="#tf" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">publish_tf</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">tf_publish_rate</span></code></strong></p>
<ul>
<li><p>启用TF发布并设置其发布速率。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_publish_extrinsic</span></code></strong></p>
<ul>
<li><p>启用外参发布。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">ir_info_url</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">color_info_url</span></code></strong></p>
<ul>
<li><p>设置IR/彩色相机信息的URL。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_color_undistortion</span></code></strong></p>
<ul>
<li><p>启用彩色去畸变。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id15">
<h3>时间同步<a class="headerlink" href="#id15" title="Link to this heading"></a></h3>
<ul>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_sync_host_time</span></code></strong></p>
<ul class="simple">
<li><p>启用主机时间与相机时间的同步。默认值为 <code class="docutils literal notranslate"><span class="pre">true</span></code>。如果使用全局时间,设置为 <code class="docutils literal notranslate"><span class="pre">false</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">time_domain</span></code></strong></p>
<ul class="simple">
<li><p>选择时间戳类型:<code class="docutils literal notranslate"><span class="pre">device</span></code>、<code class="docutils literal notranslate"><span class="pre">global</span></code> 和 <code class="docutils literal notranslate"><span class="pre">system</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">time_sync_period</span></code></strong></p>
<ul class="simple">
<li><p>相机时间与主机系统同步的间隔(秒)。</p></li>
</ul>
<blockquote>
<div><p><strong>注意</strong>:仅当 <strong><code class="docutils literal notranslate"><span class="pre">enable_sync_host_time</span> <span class="pre">=</span> <span class="pre">true</span></code></strong> 且 <strong><code class="docutils literal notranslate"><span class="pre">time_domain</span> <span class="pre">=</span> <span class="pre">device</span></code></strong> 时需要设置此参数。</p>
</div></blockquote>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_ptp_config</span></code></strong></p>
<ul class="simple">
<li><p>启用PTP时间同步。仅适用于Gemini 335Le。需要 <code class="docutils literal notranslate"><span class="pre">enable_sync_host_time</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">false</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_frame_sync</span></code></strong></p>
<ul class="simple">
<li><p>启用帧同步。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id16">
<h3>日志与诊断<a class="headerlink" href="#id16" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">log_level</span></code></strong></p>
<ul>
<li><p>SDK日志级别。默认为 <code class="docutils literal notranslate"><span class="pre">info</span></code>。可选值:<code class="docutils literal notranslate"><span class="pre">debug</span></code>、<code class="docutils literal notranslate"><span class="pre">info</span></code>、<code class="docutils literal notranslate"><span class="pre">warn</span></code>、<code class="docutils literal notranslate"><span class="pre">error</span></code>、<code class="docutils literal notranslate"><span class="pre">fatal</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">log_file_name</span></code></strong></p>
<ul>
<li><p>保存的SDK日志文件名。当<code class="docutils literal notranslate"><span class="pre">log_level</span></code>为<code class="docutils literal notranslate"><span class="pre">debug</span></code>时生效。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">diagnostic_period</span></code></strong></p>
<ul>
<li><p>诊断周期(秒)。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_heartbeat</span></code></strong></p>
<ul>
<li><p>启用心跳功能。默认为 <code class="docutils literal notranslate"><span class="pre">false</span></code>。如果为 <code class="docutils literal notranslate"><span class="pre">true</span></code>,相机节点将向固件发送心跳信号。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id17">
<h3>其他<a class="headerlink" href="#id17" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">config_file_path</span></code></strong></p>
<ul>
<li><p>YAML配置文件的路径。默认为 <code class="docutils literal notranslate"><span class="pre">&quot;&quot;</span></code>。如果未指定,将使用启动文件中的默认参数。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">frame_aggregate_mode</span></code></strong></p>
<ul>
<li><p>设置帧聚合输出模式。可选值:<code class="docutils literal notranslate"><span class="pre">full_frame</span></code>、<code class="docutils literal notranslate"><span class="pre">color_frame</span></code>、<code class="docutils literal notranslate"><span class="pre">ANY</span></code>、<code class="docutils literal notranslate"><span class="pre">disable</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_d2c_viewer</span></code></strong></p>
<ul>
<li><p>发布D2C叠加图像(仅用于测试)。</p></li>
</ul>
</li>
</ul>
</section>
</section>
<section id="imu">
<h2>IMU<a class="headerlink" href="#imu" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_accel</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">enable_gyro</span></code></strong></p>
<ul>
<li><p>启用加速度计/陀螺仪并输出其信息话题数据。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_sync_output_accel_gyro</span></code></strong></p>
<ul>
<li><p>启用同步 <code class="docutils literal notranslate"><span class="pre">accel_gyro</span></code>,并输出IMU话题实时数据。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">accel_rate</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">gyro_rate</span></code></strong></p>
<ul>
<li><p>加速度计/陀螺仪的频率。值范围从 <code class="docutils literal notranslate"><span class="pre">1.5625hz</span></code> 到 <code class="docutils literal notranslate"><span class="pre">32khz</span></code>。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">accel_range</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">gyro_range</span></code></strong></p>
<ul>
<li><p>加速度计(<code class="docutils literal notranslate"><span class="pre">2g</span></code>、<code class="docutils literal notranslate"><span class="pre">4g</span></code>、<code class="docutils literal notranslate"><span class="pre">8g</span></code>、<code class="docutils literal notranslate"><span class="pre">16g</span></code>)和陀螺仪(<code class="docutils literal notranslate"><span class="pre">16dps</span></code> 到 <code class="docutils literal notranslate"><span class="pre">2000dps</span></code>)的范围。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_accel_data_correction</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">enable_gyro_data_correction</span></code></strong></p>
<ul>
<li><p>启用加速度计/陀螺仪的数据校正。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">linear_accel_cov</span></code></strong> / <strong><code class="docutils literal notranslate"><span class="pre">angular_vel_cov</span></code></strong></p>
<ul>
<li><p>线性加速度和角速度的协方差。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id18">
<h2>深度滤波器<a class="headerlink" href="#id18" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_decimation_filter</span></code></strong></p>
<ul>
<li><p>启用深度抽取滤波器。使用 <code class="docutils literal notranslate"><span class="pre">decimation_filter_scale</span></code> 设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_hdr_merge</span></code></strong></p>
<ul>
<li><p>启用深度hdr合并滤波器。使用 <code class="docutils literal notranslate"><span class="pre">hdr_merge_exposure_1</span></code> 等设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_sequence_id_filter</span></code></strong></p>
<ul>
<li><p>启用深度序列id滤波器。使用 <code class="docutils literal notranslate"><span class="pre">sequence_id_filter_id</span></code> 设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_threshold_filter</span></code></strong></p>
<ul>
<li><p>启用深度阈值滤波器。使用 <code class="docutils literal notranslate"><span class="pre">threshold_filter_max</span></code>、<code class="docutils literal notranslate"><span class="pre">threshold_filter_min</span></code> 设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_hardware_noise_removal_filter</span></code></strong></p>
<ul>
<li><p>启用深度硬件降噪滤波器。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_noise_removal_filter</span></code></strong></p>
<ul>
<li><p>启用深度软件降噪滤波器。使用 <code class="docutils literal notranslate"><span class="pre">noise_removal_filter_min_diff</span></code> 等设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_spatial_filter</span></code></strong></p>
<ul>
<li><p>启用深度空间滤波器。使用 <code class="docutils literal notranslate"><span class="pre">spatial_filter_alpha</span></code> 等设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_temporal_filter</span></code></strong></p>
<ul>
<li><p>启用深度时间滤波器。使用 <code class="docutils literal notranslate"><span class="pre">temporal_filter_diff_threshold</span></code> 等设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_hole_filling_filter</span></code></strong></p>
<ul>
<li><p>启用深度孔洞填充滤波器。使用 <code class="docutils literal notranslate"><span class="pre">hole_filling_filter_mode</span></code> 设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_spatial_fast_filter</span></code></strong></p>
<ul>
<li><p>启用深度空间快速滤波器。使用 <code class="docutils literal notranslate"><span class="pre">spatial_fast_filter_radius</span></code> 设置。</p></li>
</ul>
</li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">enable_spatial_moderate_filter</span></code></strong></p>
<ul>
<li><p>启用深度空间中等滤波器。使用 <code class="docutils literal notranslate"><span class="pre">spatial_moderate_filter_diff_threshold</span></code> 等设置。</p></li>
</ul>
</li>
</ul>
<hr class="docutils" />
<blockquote>
<div><p><strong><em>重要</em></strong>:请仔细阅读 <a class="reference external" href="https://www.orbbec.com/docs/g330-use-depth-post-processing-blocks/">此链接</a> 中有关软件滤波设置的说明。如果不确定,请勿修改这些设置。</p>
</div></blockquote>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>在ROS 2中启用和可视化点云 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">在ROS 2中启用和可视化点云</a><ul>
<li><a class="reference internal" href="#id1">启用深度点云</a><ul>
<li><a class="reference internal" href="#id2">启用深度点云的命令</a></li>
<li><a class="reference internal" href="#rviz2">在RViz2中可视化深度点云</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id3">启用彩色点云</a><ul>
<li><a class="reference internal" href="#id4">启用彩色点云的命令</a></li>
<li><a class="reference internal" href="#id5">在RViz2中可视化彩色点云</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">在ROS 2中启用和可视化点云</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/point_cloud.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="ros-2">
<h1>在ROS 2中启用和可视化点云<a class="headerlink" href="#ros-2" title="Link to this heading"></a></h1>
<p>本节演示如何从相机节点启用点云数据输出并使用RViz2进行可视化。</p>
<section id="id1">
<h2>启用深度点云<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<section id="id2">
<h3>启用深度点云的命令<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
<p>要激活深度信息的点云数据流,使用以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span>enable_point_cloud:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
</section>
<section id="rviz2">
<h3>在RViz2中可视化深度点云<a class="headerlink" href="#rviz2" title="Link to this heading"></a></h3>
<p>运行上述命令后,执行以下步骤可视化深度点云:</p>
<ol class="simple">
<li><p>打开RViz2。</p></li>
<li><p>添加 <code class="docutils literal notranslate"><span class="pre">PointCloud2</span></code> 显示。</p></li>
<li><p>选择 <code class="docutils literal notranslate"><span class="pre">/camera/depth/points</span></code> 话题进行可视化。</p></li>
<li><p>将固定帧设置为 <code class="docutils literal notranslate"><span class="pre">camera_link</span></code> 以正确对齐数据。</p></li>
</ol>
<ul class="simple">
<li><p><strong>可视化示例</strong></p></li>
</ul>
<p>深度点云在RViz2中可能如下所示:</p>
<p><img alt="深度点云可视化" src="../../../_images/image5.jpg" /></p>
</section>
</section>
<section id="id3">
<h2>启用彩色点云<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<section id="id4">
<h3>启用彩色点云的命令<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<p>要启用彩色点云功能,输入以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span>enable_colored_point_cloud:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
</section>
<section id="id5">
<h3>在RViz2中可视化彩色点云<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<p>要可视化彩色点云数据:</p>
<ol class="simple">
<li><p>执行命令后启动RViz2。</p></li>
<li><p>添加 <code class="docutils literal notranslate"><span class="pre">PointCloud2</span></code> 显示面板。</p></li>
<li><p>从列表中选择 <code class="docutils literal notranslate"><span class="pre">/camera/depth_registered/points</span></code> 话题。</p></li>
<li><p>确保固定帧设置为 <code class="docutils literal notranslate"><span class="pre">camera_link</span></code>。</p></li>
</ol>
<ul class="simple">
<li><p><strong>可视化示例</strong></p></li>
</ul>
<p>RViz2中彩色点云的结果应该如下所示:</p>
<p><img alt="彩色点云可视化" src="../../../_images/image6.jpg" /></p>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,458 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>所有可用的相机控制服务 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">所有可用的相机控制服务</a><ul>
<li><a class="reference internal" href="#id2">数据流控制</a><ul>
<li><a class="reference internal" href="#id3">彩色流</a></li>
<li><a class="reference internal" href="#id4">深度流</a></li>
<li><a class="reference internal" href="#id5">红外流</a></li>
<li><a class="reference internal" href="#id6">所有数据流</a></li>
</ul>
</li>
<li><a class="reference internal" href="#id7">传感器与发射器控制</a></li>
<li><a class="reference internal" href="#id8">设备信息与管理</a></li>
<li><a class="reference internal" href="#id9">同步与触发</a></li>
<li><a class="reference internal" href="#id10">深度滤波器配置</a></li>
<li><a class="reference internal" href="#id11">数据捕获与校准管理</a></li>
<li><a class="reference internal" href="#id12">点云下采样</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">所有可用的相机控制服务</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/services.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>所有可用的相机控制服务<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<blockquote>
<div><p><strong>注意:</strong> 与特定数据流相关的服务(例如 <code class="docutils literal notranslate"><span class="pre">/camera/set_color_*</span></code>)仅在启动文件中启用该数据流时可用(例如 <code class="docutils literal notranslate"><span class="pre">enable_color:=true</span></code>)。</p>
</div></blockquote>
<section id="id2">
<h2>数据流控制<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<section id="id3">
<h3>彩色流<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/toggle_color</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/toggle_color<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_color_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_color_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_color_exposure<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_color_gain<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_color_auto_exposure</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_auto_exposure<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_color_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/set_color_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_exposure<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 1}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_gain<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 64}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_color_mirror</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_color_flip</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_color_rotation</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_mirror<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_flip<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_rotation<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 180}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_color_ae_roi</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># data_param: [左, 右, 上, 下]</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_color_ae_roi<span class="w"> </span>orbbec_camera_msgs/srv/SetArrays<span class="w"> </span><span class="s1">&#39;{data_param: [0,1279,0,719]}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id4">
<h3>深度流<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/toggle_depth</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/toggle_depth<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_depth_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_depth_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_depth_exposure<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_depth_gain<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_depth_auto_exposure</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_auto_exposure<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_depth_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/set_depth_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_exposure<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 3000}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_gain<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 64}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_depth_mirror</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_depth_flip</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_depth_rotation</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_mirror<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_flip<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_rotation<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 180}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_depth_ae_roi</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># data_param: [左, 右, 上, 下]</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_depth_ae_roi<span class="w"> </span>orbbec_camera_msgs/srv/SetArrays<span class="w"> </span><span class="s1">&#39;{data_param: [0,847,0,479]}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id5">
<h3>红外流<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/toggle_ir</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/toggle_ir<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_ir_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_ir_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_ir_exposure<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_ir_gain<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ir_long_exposure</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_long_exposure<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ir_auto_exposure</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_auto_exposure<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ir_exposure</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/set_ir_gain</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_exposure<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 3000}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_gain<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 64}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ir_mirror</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_ir_flip</span></code>, <code class="docutils literal notranslate"><span class="pre">/camera/set_ir_rotation</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_mirror<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_flip<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ir_rotation<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 180}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/switch_ir</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/switch_ir<span class="w"> </span>orbbec_camera_msgs/srv/SetString<span class="w"> </span><span class="s1">&#39;{data: left}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id6">
<h3>所有数据流<a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_streams_enable</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/set_streams_enable</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_streams_enable<span class="w"> </span>orbbec_camera_msgs/srv/GetBool<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_streams_enable<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: false}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
</section>
<section id="id7">
<h2>传感器与发射器控制<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_auto_white_balance</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_auto_white_balance</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_auto_white_balance<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_auto_white_balance<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_white_balance</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_white_balance</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_white_balance<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 2800}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_white_balance<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_laser_enable</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_laser_enable<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
<p><code class="docutils literal notranslate"><span class="pre">/camera/get_laser_status</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_laser_status<span class="w"> </span>orbbec_camera_msgs/srv/GetBool<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ldp_enable</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_ldp_status</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ldp_enable<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_ldp_status<span class="w"> </span>orbbec_camera_msgs/srv/GetBool<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_ptp_config</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_ptp_config</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_ptp_config<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_ptp_config<span class="w"> </span>orbbec_camera_msgs/srv/GetBool<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_lrm_measure_distance</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_lrm_measure_distance<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_fan_work_mode</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_fan_work_mode<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 0}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_floor_enable</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_floor_enable<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id8">
<h2>设备信息与管理<a class="headerlink" href="#id8" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_device_info</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_device_info<span class="w"> </span>orbbec_camera_msgs/srv/GetDeviceInfo
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_sdk_version</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_sdk_version<span class="w"> </span>orbbec_camera_msgs/srv/GetString
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/reboot_device</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/reboot_device<span class="w"> </span>std_srvs/srv/Empty<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id9">
<h2>同步与触发<a class="headerlink" href="#id9" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/send_software_trigger</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/send_software_trigger<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_sync_hosttime</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_sync_hosttime<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_reset_timestamp</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 仅在time_domain参数设置为device时可用</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_reset_timestamp<span class="w"> </span>std_srvs/srv/SetBool<span class="w"> </span><span class="s1">&#39;{data: true}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_sync_interleaverlaser</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 仅在interleave_ae_mode为&#39;laser&#39;且interleave_frame_enable为true时可用</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_sync_interleaverlaser<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 0}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id10">
<h2>深度滤波器配置<a class="headerlink" href="#id10" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_filter</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># 设置DecimationFilter</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: DecimationFilter, filter_enable: false, filter_param: [5]}&#39;</span>
<span class="c1"># 设置SpatialAdvancedFilter</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: SpatialAdvancedFilter, filter_enable: true, filter_param: [0.5,160,1,8]}&#39;</span>
<span class="c1"># 设置SequenceIdFilter</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: SequenceIdFilter, filter_enable: true, filter_param: [1]}&#39;</span>
<span class="c1"># 设置ThresholdFilter</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: ThresholdFilter, filter_enable: true, filter_param: [0,15999]}&#39;</span>
<span class="c1"># 设置NoiseRemovalFilter</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: NoiseRemovalFilter, filter_enable: true, filter_param: [256,80]}&#39;</span>
<span class="c1"># 设置HardwareNoiseRemoval</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: HardwareNoiseRemoval, filter_enable: true, filter_param: []}&#39;</span>
<span class="c1"># 设置SpatialFastFilter</span>
<span class="c1"># filter_param: [radius]</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: SpatialFastFilter, filter_enable: true, filter_param: [4]}&#39;</span>
<span class="c1"># 设置SpatialModerateFilter</span>
<span class="c1"># filter_param: [disp_diff, magnitude, radius]</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_filter<span class="w"> </span>orbbec_camera_msgs/srv/SetFilter<span class="w"> </span><span class="s1">&#39;{filter_name: SpatialModerateFilter, filter_enable: true, filter_param: [160,1,3]}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id11">
<h2>数据捕获与校准管理<a class="headerlink" href="#id11" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/save_images</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/save_images<span class="w"> </span>std_srvs/srv/Empty<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/save_point_cloud</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/save_point_cloud<span class="w"> </span>std_srvs/srv/Empty<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
</ul>
<blockquote>
<div><p><strong>注意</strong>:以下服务目前仅支持435Le模块。每个服务一次只能存储一组数据或字符串。</p>
</div></blockquote>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/write_customer_data</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/read_customer_data</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/write_customer_data<span class="w"> </span>orbbec_camera_msgs/srv/SetString<span class="w"> </span><span class="s1">&#39;{data: &quot;string&quot;}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/read_customer_data<span class="w"> </span>orbbec_camera_msgs/srv/GetString<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_user_calib_params</span></code> &amp; <code class="docutils literal notranslate"><span class="pre">/camera/get_user_calib_params</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_user_calib_params<span class="w"> </span>orbbec_camera_msgs/srv/SetUserCalibParams<span class="w"> </span><span class="se">\</span>
<span class="s1">&#39;{k: [614.9613647460938, 0.0, 634.91552734375,</span>
<span class="s1"> 0.0, 614.65771484375, 391.407470703125,</span>
<span class="s1"> 0.0, 0.0, 1.0],</span>
<span class="s1"> d: [-0.03131488710641861,</span>
<span class="s1"> 0.032955970615148544,</span>
<span class="s1"> 9.096559369936585e-05,</span>
<span class="s1"> -0.0003368517500348389,</span>
<span class="s1"> -0.01115430984646082,</span>
<span class="s1"> 0.0, 0.0, 0.0],</span>
<span class="s1"> rotation: [0.9999880790710449, 0.0003024190664291382, -0.004874417092651129,</span>
<span class="s1"> -0.0002965621242765337, 0.9999992251396179, 0.001202247804030776,</span>
<span class="s1"> 0.004874777048826218, -0.0012007878394797444, 0.9999874234199524],</span>
<span class="s1"> translation: [-0.023897956848144532,</span>
<span class="s1"> -9.439220279455185e-05,</span>
<span class="s1"> -6.804073229432106e-06]}&#39;</span>
ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_user_calib_params<span class="w"> </span>orbbec_camera_msgs/srv/GetUserCalibParams<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
<section id="id12">
<h2>点云下采样<a class="headerlink" href="#id12" title="Link to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/set_point_cloud_decimation</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/set_point_cloud_decimation<span class="w"> </span>orbbec_camera_msgs/srv/SetInt32<span class="w"> </span><span class="s1">&#39;{data: 8}&#39;</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/get_point_cloud_decimation</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>service<span class="w"> </span>call<span class="w"> </span>/camera/get_point_cloud_decimation<span class="w"> </span>orbbec_camera_msgs/srv/GetInt32<span class="w"> </span><span class="s1">&#39;{}&#39;</span>
</pre></div>
</div>
</li>
</ul>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,228 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>可用话题 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">可用话题</a><ul>
<li><a class="reference internal" href="#id2">图像流</a></li>
<li><a class="reference internal" href="#id3">点云话题</a></li>
<li><a class="reference internal" href="#imu">IMU话题</a></li>
<li><a class="reference internal" href="#id4">设备状态与诊断</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">可用话题</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/4_application_guide/topics.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>可用话题<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>话题按数据流和功能组织。默认情况下,所有话题都发布在 <code class="docutils literal notranslate"><span class="pre">/camera</span></code> 命名空间下,可以通过 <code class="docutils literal notranslate"><span class="pre">camera_name</span></code> 启动参数进行更改。</p>
<blockquote>
<div><p><strong>注意:</strong> 特定数据流的话题(例如 <code class="docutils literal notranslate"><span class="pre">/camera/color/...</span></code>)只有在相应的启动参数(例如 <code class="docutils literal notranslate"><span class="pre">enable_color</span></code>)设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时才会发布。</p>
</div></blockquote>
<section id="id2">
<h2>图像流<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>这些话题提供每个启用的相机数据流的原始图像数据和相应的校准信息。对于 <code class="docutils literal notranslate"><span class="pre">color</span></code>、<code class="docutils literal notranslate"><span class="pre">depth</span></code>、<code class="docutils literal notranslate"><span class="pre">ir</span></code>、<code class="docutils literal notranslate"><span class="pre">left_ir</span></code> 和 <code class="docutils literal notranslate"><span class="pre">right_ir</span></code> 数据流,模式是一致的。</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/color/image_raw</span></code></p>
<ul>
<li><p>彩色流的原始图像数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/color/camera_info</span></code></p>
<ul>
<li><p>彩色流的相机校准数据和元数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/color/metadata</span></code></p>
<ul>
<li><p>来自彩色流固件的底层元数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth/image_raw</span></code></p>
<ul>
<li><p>深度流的原始图像数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth/camera_info</span></code></p>
<ul>
<li><p>深度流的相机校准数据和元数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth/metadata</span></code></p>
<ul>
<li><p>来自深度流固件的底层元数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/ir/image_raw</span></code></p>
<ul>
<li><p>红外(IR)流的原始图像数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/ir/camera_info</span></code></p>
<ul>
<li><p>IR流的相机校准数据和元数据。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/ir/metadata</span></code></p>
<ul>
<li><p>来自IR流固件的底层元数据。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id3">
<h2>点云话题<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth/points</span></code></p>
<ul>
<li><p>从深度流生成的点云数据。</p></li>
<li><p><strong>条件:</strong> 仅在 <code class="docutils literal notranslate"><span class="pre">enable_point_cloud</span></code> 为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时发布。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth_registered/points</span></code></p>
<ul>
<li><p>彩色点云数据,其中深度点配准到彩色图像帧。</p></li>
<li><p><strong>条件:</strong> 仅在 <code class="docutils literal notranslate"><span class="pre">enable_colored_point_cloud</span></code> 为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时发布。</p></li>
</ul>
</li>
</ul>
</section>
<section id="imu">
<h2>IMU话题<a class="headerlink" href="#imu" title="Link to this heading"></a></h2>
<p>惯性测量单元(IMU)话题提供加速度计和陀螺仪数据。其行为取决于同步设置。</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/accel/sample</span></code></p>
<ul>
<li><p>单独的加速度计数据流。</p></li>
<li><p><strong>条件:</strong> 在 <code class="docutils literal notranslate"><span class="pre">enable_accel</span></code> 为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 且 <code class="docutils literal notranslate"><span class="pre">enable_sync_output_accel_gyro</span></code> 为 <code class="docutils literal notranslate"><span class="pre">false</span></code> 时发布。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/gyro/sample</span></code></p>
<ul>
<li><p>单独的陀螺仪数据流。</p></li>
<li><p><strong>条件:</strong> 在 <code class="docutils literal notranslate"><span class="pre">enable_gyro</span></code> 为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 且 <code class="docutils literal notranslate"><span class="pre">enable_sync_output_accel_gyro</span></code> 为 <code class="docutils literal notranslate"><span class="pre">false</span></code> 时发布。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/gyro_accel/sample</span></code></p>
<ul>
<li><p>包含加速度计和陀螺仪数据的同步数据流(单条消息)。</p></li>
<li><p><strong>条件:</strong> 在 <code class="docutils literal notranslate"><span class="pre">enable_sync_output_accel_gyro</span></code> 为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时发布。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id4">
<h2>设备状态与诊断<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/device_status</span></code></p>
<ul>
<li><p>报告相机设备的当前状态。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/camera/depth_filter_status</span></code></p>
<ul>
<li><p>报告深度传感器后处理滤波器的状态。</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">/diagnostics</span></code></p>
<ul>
<li><p>发布相机节点的诊断信息。目前包括设备温度。</p></li>
</ul>
</li>
</ul>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,203 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>高级指南 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">高级指南</a><ul>
<li><a class="reference internal" href="#id2">性能与优化</a></li>
<li><a class="reference internal" href="#id3">多相机</a></li>
<li><a class="reference internal" href="#id4">配置与模式</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">高级指南</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/5_advanced_guide/advanced_guide.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>高级指南<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章介绍SDK的高级功能,包括多相机使用和特殊配置模式。</p>
<section id="id2">
<h2>性能与优化<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="performance/lower_cpu_usage.html">使用Orbbec ROS包降低CPU使用率</a><ul>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#cpu">降低CPU使用率的推荐设置</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#id1">用于测试的启动文件</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#id2">测试环境</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#id3">测试设置</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#id4">测试结果</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/lower_cpu_usage.html#id5">进一步优化</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="performance/efficient_intra_process_communication.html">高效的进程内通信:</a><ul>
<li class="toctree-l2"><a class="reference internal" href="performance/efficient_intra_process_communication.html#id2">简介</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/efficient_intra_process_communication.html#id3">示例</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="performance/fastdds_tuning.html">针对Orbbec相机与ROS2的Fast DDS优化</a><ul>
<li class="toctree-l2"><a class="reference internal" href="performance/fastdds_tuning.html#id1">调整系统参数</a></li>
<li class="toctree-l2"><a class="reference internal" href="performance/fastdds_tuning.html#fast-dds">Fast DDS配置</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="id3">
<h2>多相机<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="multi_camera/multi_camera.html">多相机</a><ul>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera.html#id2">多相机无数据流</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera.html#id3">多相机图像话题帧率过低</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="multi_camera/multi_camera_synced.html">多相机同步说明</a><ul>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced.html#id2">设置说明</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced.html#orbbecsdk-ros2">使用 OrbbecSDK_ROS2 检查相机端口</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced.html#id3">OrbbecSDK_ROS2 多相机同步配置</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced.html#id4">运行以下命令启动多相机同步</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="multi_camera/multi_camera_synced_verification_tool.html">多相机同步验证节点</a><ul>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced_verification_tool.html#id2">使用教程</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/multi_camera_synced_verification_tool.html#id5">必要系统配置</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="multi_camera/gmsl_camera.html">GMSL 相机</a><ul>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/gmsl_camera.html#id1">单个 GMSL 相机</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/gmsl_camera.html#id2">多个 GMSL 相机</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/gmsl_camera.html#id3">多个 GMSL 相机同步</a></li>
<li class="toctree-l2"><a class="reference internal" href="multi_camera/gmsl_camera.html#id4">GMSL 相机的使用限制</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="id4">
<h2>配置与模式<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="configuration/align_depth_color.html">在 ROS 2 中对齐深度到彩色</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration/align_depth_color.html#id1">对齐和查看深度和彩色图像的命令</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/align_depth_color.html#rviz2">在 RViz2 中选择话题</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/align_depth_color.html#id2">深度到彩色叠加示例</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration/configuration_of_depth_NFOV_and_WFOV_modes.html">深度 NFOV 和 WFOV 模式配置</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration/depth_work_mode_switch.html">深度工作模式切换</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration/disparity_search_offset.html">视差搜索偏移</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration/disparity_search_offset.html#id2">功能介绍</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/disparity_search_offset.html#id3">参数介绍</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/disparity_search_offset.html#id4">运行启动文件</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration/interleave_ae_mode.html">在 Gemini330 系列相机中使用 interleave_ae</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration/interleave_ae_mode.html#id1">参数介绍</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/interleave_ae_mode.html#id2">运行启动文件</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/interleave_ae_mode.html#multi-camera-synced-interleave-ae">Multi_camera_synced + Interleave_ae</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="configuration/predefined_presets.html">预定义预设</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration/net_camera.html">网络相机</a><ul>
<li class="toctree-l2"><a class="reference internal" href="configuration/net_camera.html#femto-mega-gemini-435le-gemini-335le">Femto Mega &amp; Gemini 435Le &amp; Gemini 335Le</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/net_camera.html#set-device-ip">set_device_ip 工具</a></li>
<li class="toctree-l2"><a class="reference internal" href="configuration/net_camera.html#ip">强制 IP 功能</a></li>
</ul>
</li>
</ul>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>在 ROS 2 中对齐深度到彩色 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">在 ROS 2 中对齐深度到彩色</a><ul>
<li><a class="reference internal" href="#id1">对齐和查看深度和彩色图像的命令</a></li>
<li><a class="reference internal" href="#rviz2">在 RViz2 中选择话题</a></li>
<li><a class="reference internal" href="#id2">深度到彩色叠加示例</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">在 ROS 2 中对齐深度到彩色</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/align_depth_color.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="ros-2">
<h1>在 ROS 2 中对齐深度到彩色<a class="headerlink" href="#ros-2" title="Link to this heading"></a></h1>
<p>本节说明如何使用 ROS 2 将深度图像与彩色图像对齐以创建叠加图像。这对于需要来自不同传感器模态的同步视觉信息的应用特别有用。</p>
<section id="id1">
<h2>对齐和查看深度和彩色图像的命令<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<ol>
<li><p><strong>基本深度到彩色对齐:</strong></p>
<p>要简单地将深度图像对齐到彩色图像,请使用以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span>depth_registration:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
<p>此命令激活深度配准功能,但不打开查看器。</p>
</li>
<li><p><strong>查看深度到彩色叠加:</strong></p>
<p>如果您希望查看深度到彩色叠加,需要使用以下命令启用查看器:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span>depth_registration:<span class="o">=</span><span class="nb">true</span><span class="w"> </span>enable_d2c_viewer:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
<p>这将启动带有深度到彩色配准的相机节点并打开查看器以显示叠加图像。</p>
</li>
</ol>
</section>
<section id="rviz2">
<h2>在 RViz2 中选择话题<a class="headerlink" href="#rviz2" title="Link to this heading"></a></h2>
<p>要在 RViz2 中可视化对齐的图像:</p>
<ol>
<li><p>运行上述命令之一后启动 RViz2。</p></li>
<li><p>选择深度到彩色叠加图像的话题。话题选择示例如下所示:</p>
<p><img alt="深度到彩色叠加的话题选择" src="../../../../_images/image31.png" /></p>
</li>
</ol>
</section>
<section id="id2">
<h2>深度到彩色叠加示例<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>在 RViz2 中选择适当的话题后,您将能够看到深度到彩色叠加图像。它可能看起来像这样:</p>
<p><img alt="深度到彩色叠加图像" src="../../../../_images/image4.jpg" /></p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,115 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>深度 NFOV 和 WFOV 模式配置 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">深度 NFOV 和 WFOV 模式配置</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">深度 NFOV 和 WFOV 模式配置</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/configuration_of_depth_NFOV_and_WFOV_modes.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="nfov-wfov">
<h1>深度 NFOV 和 WFOV 模式配置<a class="headerlink" href="#nfov-wfov" title="Link to this heading"></a></h1>
<p>对于 Femto Mega 和 Femto Bolt 设备,NFOV 和 WFOV 模式通过在启动文件中配置深度和 IR 的分辨率来实现。</p>
<p>在启动文件中,depth_width、depth_height、ir_width、ir_height 分别表示深度的分辨率和 IR 的分辨率。</p>
<p>IR 的帧率和分辨率必须与深度保持一致。不同模式与分辨率的对应关系如下:</p>
<ul class="simple">
<li><p>NFOV unbinned:640 x 576</p></li>
<li><p>NFOV binned:320 x 288</p></li>
<li><p>WFOV unbinned:1024 x 1024</p></li>
<li><p>WFOV binned:512 x 512</p></li>
</ul>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,133 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>深度工作模式切换 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">深度工作模式切换</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">深度工作模式切换</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/depth_work_mode_switch.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>深度工作模式切换<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>Orbbec SDK ROS 2 支持深度工作模式切换。Gemini 2、Gemini 2 L 和 Femto 以及 Femto Bolt 相机支持深度工作模式切换。</p>
<ul class="simple">
<li><p>在启动相机之前,可以为相应的 xxx.launch.py 文件的支持配置深度工作模式(depth_work_mode)。</p></li>
<li><p>Gemini 2、Gemini 2 L 和 Gemini 2 XL 相机支持深度工作模式切换。</p></li>
<li><p>xxx.launch.py 的默认深度工作模式配置是相机的默认配置。如果需要修改,可以根据需要切换到相应的模式。</p></li>
<li><p>具体相机深度工作模式支持类型可以在深度模式的注释中找到。</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># 深度工作模式支持如下:</span>
<span class="c1"># Unbinned Dense Default</span>
<span class="c1"># Unbinned Sparse Default</span>
<span class="c1"># Binned Sparse Default</span>
<span class="c1"># Obstacle Avoidance</span>
<span class="n">DeclareLaunchArgument</span><span class="p">(</span><span class="s1">&#39;depth_work_mode&#39;</span><span class="p">,</span> <span class="n">default_value</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
</pre></div>
</div>
<ul class="simple">
<li><p>查看深度工作模式:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_depth_work_mode_node
</pre></div>
</div>
<ul class="simple">
<li><p>示例:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini2L.launch.py<span class="w"> </span>depth_work_mode:<span class="o">=</span><span class="s2">&quot;Unbinned Dense Default&quot;</span>
</pre></div>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,202 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>视差搜索偏移 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">视差搜索偏移</a><ul>
<li><a class="reference internal" href="#id2">功能介绍</a></li>
<li><a class="reference internal" href="#id3">参数介绍</a></li>
<li><a class="reference internal" href="#id4">运行启动文件</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">视差搜索偏移</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/disparity_search_offset.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>视差搜索偏移<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<blockquote>
<div><p>本节介绍如何在 Gemini330 系列相机中使用 disparity_search_offset 功能(相机固件最低版本 <a class="reference external" href="https://www.orbbec.com/docs/g330-firmware-release/">1.4.60</a>)。Disparity_search_offset 仅对深度流的 1280×720、1280×800 和 640×400 分辨率有效。</p>
</div></blockquote>
<section id="id2">
<h2>功能介绍<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>视差搜索范围的定义:对于左图像中的任何像素 <em>(u_l, v)</em>,默认情况下,右图像中对应的视差搜索范围为 <em>[ (u_l - 255, v)</em>, <em>(u_l, v) ]</em>,其中视差搜索长度为 256,最大整数视差为 255。如果将搜索的起点调整为 <em>[ (u_l - 255 - offset, v)</em>, <em>(u_l - offset, v) ]</em>,则偏移量定义为视差偏移。因此,我们的视差搜索范围配置包括视差搜索长度和搜索位置偏移(也可称为视差偏移)。</p>
<p><img alt="深度点云可视化" src="../../../../_images/search_offset0.png" /></p>
</section>
<section id="id3">
<h2>参数介绍<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>disparity_search_offset 相关参数在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/launch/gemini_330_series.launch.py">gemini_330_series.launch.py</a> 中设置</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">disparity_range_mode</span></code>:视差搜索长度,只能设置为 64、128 和 256。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">disparity_search_offset</span></code>:视差搜索偏移值,可以设置为 0 到 127。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">disparity_offset_config</span></code>:视差搜索偏移交错帧。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">offset_index0</span></code>:帧 0 视差搜索偏移值。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">offset_index1</span></code>:帧 1 视差搜索偏移值。</p></li>
</ul>
<table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">视差范围模式</th>
<th style="text-align: center;">视差搜索偏移</th>
<th style="text-align: center;">倾斜墙最小深度 (mm)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">64</td>
<td style="text-align: center;">85</td>
<td style="text-align: center;">Gemini 335L 388-406</td>
</tr>
<tr>
<td style="text-align: center;">64</td>
<td style="text-align: center;">127</td>
<td style="text-align: center;">Gemini 335L 302-317</td>
</tr>
</tbody>
</table><table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">视差范围模式</th>
<th style="text-align: center;">视差搜索偏移</th>
<th style="text-align: center;">倾斜墙最小深度 (mm)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">128</td>
<td style="text-align: center;">0</td>
<td style="text-align: center;">Gemini 335 233-249<br />Gemini 335L 453-475</td>
</tr>
<tr>
<td style="text-align: center;">128</td>
<td style="text-align: center;">45</td>
<td style="text-align: center;">Gemini 335 172-184<br />Gemini 335L 334-349</td>
</tr>
<tr>
<td style="text-align: center;">128</td>
<td style="text-align: center;">127</td>
<td style="text-align: center;">Gemini 335 117-125<br />Gemini 335L 226-236</td>
</tr>
</tbody>
</table><table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">视差范围模式</th>
<th style="text-align: center;">视差搜索偏移</th>
<th style="text-align: center;">倾斜墙最小深度 (mm)</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">256</td>
<td style="text-align: center;">85</td>
<td style="text-align: center;">Gemini 335L 169-178</td>
</tr>
<tr>
<td style="text-align: center;">256</td>
<td style="text-align: center;">127</td>
<td style="text-align: center;">Gemini 335L 151-158</td>
</tr>
</tbody>
</table></section>
<section id="id4">
<h2>运行启动文件<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<p>设置 disparity_search_offset 参数,重新 <code class="docutils literal notranslate"><span class="pre">colcon</span> <span class="pre">build</span></code> 并运行启动文件</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,166 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>在 Gemini330 系列相机中使用 interleave_ae &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">在 Gemini330 系列相机中使用 interleave_ae</a><ul>
<li><a class="reference internal" href="#id1">参数介绍</a></li>
<li><a class="reference internal" href="#id2">运行启动文件</a></li>
<li><a class="reference internal" href="#multi-camera-synced-interleave-ae">Multi_camera_synced + Interleave_ae</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">在 Gemini330 系列相机中使用 interleave_ae</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/interleave_ae_mode.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="gemini330-interleave-ae">
<h1>在 Gemini330 系列相机中使用 interleave_ae<a class="headerlink" href="#gemini330-interleave-ae" title="Link to this heading"></a></h1>
<blockquote>
<div><p>本节介绍如何在 Gemini 330 系列相机中使用 interleave_ae(相机固件最低版本 <a class="reference external" href="https://www.orbbec.com/docs/g330-firmware-release/">1.4.00</a>)</p>
</div></blockquote>
<section id="id1">
<h2>参数介绍<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p>interleave_ae 相关参数在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/launch/gemini_330_series.launch.py">gemini_330_series.launch.py</a> 中设置</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">interleave_ae_mode</span></code>:设置激光或 hdr 交错。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">interleave_frame_enable</span></code>:启用交错帧模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">interleave_skip_enable</span></code>:启用跳帧模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">interleave_skip_index</span></code>:设置为 0 跳过图案 ir,设置为 1 跳过泛光 ir。</p></li>
</ul>
<p><strong>interleave hdr</strong></p>
<p>当 <code class="docutils literal notranslate"><span class="pre">interleave_ae_mode</span></code> 参数设置为 <code class="docutils literal notranslate"><span class="pre">hdr</span></code> 且 <code class="docutils literal notranslate"><span class="pre">interleave_frame_enable</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时,将启用 interleave hdr</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index1_laser_control</span></code>:帧 1 激光开关设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index1_depth_exposure</span></code>:帧 1 深度曝光值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index1_depth_gain</span></code>:帧 1 深度增益值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index1_ir_brightness</span></code>:帧 1 ir 增益值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index1_ir_ae_max_exposure</span></code>:AE(自动曝光)中帧 1 ir 最大曝光值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index0_laser_control</span></code>:帧 0 激光开关设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index0_depth_exposure</span></code>:帧 0 深度曝光值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index0_depth_gain</span></code>:帧 0 深度增益值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index0_ir_brightness</span></code>:帧 0 ir 增益值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">hdr_index0_ir_ae_max_exposure</span></code>:AE(自动曝光)中帧 0 ir 最大曝光值设置。</p></li>
</ul>
<p><strong>interleave laser</strong></p>
<p>当 <code class="docutils literal notranslate"><span class="pre">interleave_ae_mode</span></code> 参数设置为 <code class="docutils literal notranslate"><span class="pre">laser</span></code> 且 <code class="docutils literal notranslate"><span class="pre">interleave_frame_enable</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 时,将启用 interleave laser</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index1_laser_control</span></code>:帧 1 激光开关设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index1_depth_exposure</span></code>:帧 1 深度曝光值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index1_depth_gain</span></code>:帧 1 深度增益值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index1_ir_brightness</span></code>:帧 1 ir 增益值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index1_ir_ae_max_exposure</span></code>:AE(自动曝光)中帧 1 ir 最大曝光值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index0_laser_control</span></code>:帧 0 激光开关设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index0_depth_exposure</span></code>:帧 0 深度曝光值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index0_depth_gain</span></code>:帧 0 深度增益值设置,非 AE 模式。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index0_ir_brightness</span></code>:帧 0 ir 增益值设置。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">laser_index0_ir_ae_max_exposure</span></code>:AE(自动曝光)中帧 0 ir 最大曝光值设置。</p></li>
</ul>
</section>
<section id="id2">
<h2>运行启动文件<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>设置 interleave_ae 参数,重新 <code class="docutils literal notranslate"><span class="pre">colcon</span> <span class="pre">build</span></code> 并运行启动文件</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py
</pre></div>
</div>
<p><strong>示例可视化</strong></p>
<p><img alt="深度点云可视化" src="../../../../_images/interleave_ae0.jpeg" /></p>
<p><img alt="深度点云可视化" src="../../../../_images/interleave_ae1.jpeg" /></p>
</section>
<section id="multi-camera-synced-interleave-ae">
<h2>Multi_camera_synced + Interleave_ae<a class="headerlink" href="#multi-camera-synced-interleave-ae" title="Link to this heading"></a></h2>
<p>请参考 <a class="reference external" href="./multi_camera_synced">multi_camera_synced</a> 和 <a class="reference external" href="#%E5%8F%82%E6%95%B0%E4%BB%8B%E7%BB%8D">参数介绍</a></p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,202 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>网络相机 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">网络相机</a><ul>
<li><a class="reference internal" href="#femto-mega-gemini-435le-gemini-335le">Femto Mega &amp; Gemini 435Le &amp; Gemini 335Le</a></li>
<li><a class="reference internal" href="#set-device-ip">set_device_ip 工具</a></li>
<li><a class="reference internal" href="#ip">强制 IP 功能</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">网络相机</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/net_camera.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>网络相机<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<blockquote>
<div><p>本节介绍如何在 OrbbecSDK_ROS2 中使用网络相机。目前仅支持 Femto_Mega、Gemini 335Le 和 Gemini 435Le 设备,其他网络设备将在不久的将来得到支持。</p>
</div></blockquote>
<p>您可以在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples">example</a> 中找到示例使用代码。</p>
<section id="femto-mega-gemini-435le-gemini-335le">
<h2>Femto Mega &amp; Gemini 435Le &amp; Gemini 335Le<a class="headerlink" href="#femto-mega-gemini-435le-gemini-335le" title="Link to this heading"></a></h2>
<p><strong>参数介绍</strong></p>
<p>网络设备设置:<code class="docutils literal notranslate"><span class="pre">enumerate_net_device</span></code> 设置为 true,将自动枚举网络设备。</p>
<p>如果您不想自动枚举网络设备,可以将 <code class="docutils literal notranslate"><span class="pre">enumerate_net_device</span></code> 设置为 false,将 <code class="docutils literal notranslate"><span class="pre">net_device_ip</span></code> 设置为设备的 IP 地址,并将 <code class="docutils literal notranslate"><span class="pre">net_device_port</span></code> 设置为默认值 8090。</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">enumerate_net_device</span></code>:启用自动枚举网络设备。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">net_device_ip</span></code>:设置网络设备的 IP 地址。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">net_device_port</span></code>:设置网络设备的端口。通常可以设置为 8090。</p></li>
</ul>
<p><strong>单个网络相机</strong></p>
<blockquote>
<div><p>如果您需要运行 Gemini 435Le/Gemini 335Le,只需在运行命令中将 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/launch/femto_mega.launch.py">femto_mega.launch.py</a> 替换为 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/launch/gemini435_le.launch.py">gemini435_le.launch.py</a>/<a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/launch/gemini_330_series.launch.py">gemini_330_series.launch.py</a></p>
</div></blockquote>
<p>以 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/launch/femto_mega.launch.py">femto_mega.launch.py</a> 为例:</p>
<ul class="simple">
<li><p><strong>自动枚举网络设备:</strong></p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>femto_mega.launch.py<span class="w"> </span>enumerate_net_device:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
<ul class="simple">
<li><p><strong>指定 IP 地址启动设备:</strong></p></li>
</ul>
<p>注意:<code class="docutils literal notranslate"><span class="pre">net_device_ip</span></code> 需要更改为设备的 IP 地址,这里是 192.168.1.10</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>femto_mega.launch.py<span class="w"> </span>enumerate_net_device:<span class="o">=</span><span class="nb">false</span><span class="w"> </span>net_device_ip:<span class="o">=</span><span class="m">192</span>.168.1.10<span class="w"> </span>net_device_port:<span class="o">=</span><span class="m">8090</span>
</pre></div>
</div>
<p><strong>多个网络相机</strong></p>
<p>以 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/examples/net_camera/multi_net_camera.launch.py">multi_net_camera.launch.py</a> 为例:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>multi_net_camera.launch.py
</pre></div>
</div>
</section>
<section id="set-device-ip">
<h2>set_device_ip 工具<a class="headerlink" href="#set-device-ip" title="Link to this heading"></a></h2>
<p><strong><code class="docutils literal notranslate"><span class="pre">set_device_ip</span></code></strong> 可执行文件允许您直接从 ROS 2 配置网络相机的 IP 设置,包括在 DHCP 和静态 IP 之间切换,以及设置子网掩码和网关。这对于快速分配或更新 IP 地址而无需修改启动文件非常有用。</p>
<blockquote>
<div><p><strong>注意:<strong>使用 <code class="docutils literal notranslate"><span class="pre">set_device_ip</span></code> 应用的 IP 设置是</strong>永久性的</strong>,如果设备断电或重启,<strong>不会重置</strong>。</p>
</div></blockquote>
<p><strong>示例用法</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>set_device_ip<span class="w"> </span>--ros-args<span class="w"> </span><span class="se">\</span>
-p<span class="w"> </span>old_ip:<span class="o">=</span><span class="m">192</span>.168.1.10<span class="w"> </span><span class="se">\</span>
-p<span class="w"> </span>dhcp:<span class="o">=</span><span class="nb">false</span><span class="w"> </span><span class="se">\</span>
-p<span class="w"> </span>new_ip:<span class="o">=</span><span class="m">192</span>.168.1.11<span class="w"> </span><span class="se">\</span>
-p<span class="w"> </span>mask:<span class="o">=</span><span class="m">255</span>.255.255.0<span class="w"> </span><span class="se">\</span>
-p<span class="w"> </span>gateway:<span class="o">=</span><span class="m">192</span>.168.1.1
</pre></div>
</div>
<p><strong>参数</strong></p>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">old_ip</span></code></strong> – 设备的当前 IP 地址。</p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">dhcp</span></code></strong> – 设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 使用 DHCP 或 <code class="docutils literal notranslate"><span class="pre">false</span></code> 使用静态 IP。</p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">new_ip</span></code></strong> – 禁用 DHCP 时要分配的静态 IP 地址。</p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">mask</span></code></strong> – 新 IP 的子网掩码。</p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">gateway</span></code></strong> – 新 IP 的网关地址。</p></li>
</ul>
</section>
<section id="ip">
<h2>强制 IP 功能<a class="headerlink" href="#ip" title="Link to this heading"></a></h2>
<p><strong>强制 IP</strong> 功能允许您为网络相机分配<strong>静态 IP 地址</strong>,覆盖 DHCP 设置。当连接多个网络相机时,这非常有用,您需要每个设备具有固定的 IP 以实现可靠的通信。</p>
<blockquote>
<div><p><strong>注意:<strong>如果设备断电或重启,强制 IP 配置</strong>将被重置</strong>。您需要在重启后重新应用设置。</p>
</div></blockquote>
<p><strong>参数</strong></p>
<ul class="simple">
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_enable</span></code></strong> – 启用强制 IP 功能。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">false</span></code></p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_mac</span></code></strong> – 连接多个相机时的目标设备 MAC 地址(例如 <code class="docutils literal notranslate"><span class="pre">&quot;54:14:FD:06:07:DA&quot;</span></code>)。您可以使用 <code class="docutils literal notranslate"><span class="pre">list_devices_node</span></code> 查找每个设备的 MAC。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">&quot;&quot;</span></code></p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_address</span></code></strong> – 要分配的静态 IP 地址。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">192.168.1.10</span></code></p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_subnet_mask</span></code></strong> – 静态 IP 的子网掩码。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">255.255.255.0</span></code></p></li>
<li><p><strong><code class="docutils literal notranslate"><span class="pre">force_ip_gateway</span></code></strong> – 静态 IP 的网关地址。<strong>默认值:</strong> <code class="docutils literal notranslate"><span class="pre">192.168.1.1</span></code></p></li>
</ul>
<p><strong>示例用法</strong></p>
<ul class="simple">
<li><p><strong>为特定设备启用强制 IP:</strong></p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_series.launch.py<span class="w"> </span><span class="se">\</span>
force_ip_enable:<span class="o">=</span><span class="nb">true</span><span class="w"> </span><span class="se">\</span>
force_ip_mac:<span class="o">=</span><span class="m">54</span>:14:FD:06:07:DA<span class="w"> </span><span class="se">\</span>
force_ip_address:<span class="o">=</span><span class="m">192</span>.168.1.50<span class="w"> </span><span class="se">\</span>
force_ip_subnet_mask:<span class="o">=</span><span class="m">255</span>.255.255.0<span class="w"> </span><span class="se">\</span>
force_ip_gateway:<span class="o">=</span><span class="m">192</span>.168.1.1<span class="w"> </span><span class="se">\</span>
net_device_ip:<span class="o">=</span><span class="m">192</span>.168.1.50<span class="w"> </span><span class="se">\</span>
net_device_port:<span class="o">=</span><span class="m">8090</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,147 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>预定义预设 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">预定义预设</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">预定义预设</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/configuration/predefined_presets.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>预定义预设<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<table border="1" class="docutils">
<thead>
<tr>
<th>预设</th>
<th>特点</th>
<th>推荐使用场景</th>
</tr>
</thead>
<tbody>
<tr>
<td>Default</td>
<td>- 最佳视觉感知<br>- 在精度、填充率、微小物体等方面的整体性能良好</td>
<td>- 通用场景<br>- 机器人应用</td>
</tr>
<tr>
<td>Hand</td>
<td>- 清晰的手部和手指边缘</td>
<td>- 手势识别</td>
</tr>
<tr>
<td>High Accuracy</td>
<td>- 高置信度深度<br>- 几乎无噪声深度值<br>- 填充率较低</td>
<td>- 避障<br>- 物体扫描</td>
</tr>
<tr>
<td>High Density</td>
<td>- 更高填充率<br>- 更多微小物体<br>- 可能存在噪声深度值</td>
<td>- 物体识别<br>- 抓取和放置<br>- 前景和背景动画</td>
</tr>
<tr>
<td>Medium Density</td>
<td>- 填充率和精度的平衡性能<br>- 与 Default 相比:填充率较低,边缘质量更好</td>
<td>- 通用场景和 Default 的替代方案</td>
</tr>
<tr>
<td>Custom</td>
<td>- 用户自定义预设<br>- 从上述预设派生,具有自定义修改,例如后处理管道的新配置、深度 AE 功能的修改平均强度设定点等</td>
<td>- 通过使用自定义配置可获得比预定义预设更好的深度性能<br>- 适用于已建立的自定义配置</td>
</tr>
</tbody>
</table><p>根据您的具体使用场景选择合适的预设名称,并将其设置为 <code class="docutils literal notranslate"><span class="pre">device_preset</span></code> 参数的值。</p>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,173 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>GMSL 相机 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">GMSL 相机</a><ul>
<li><a class="reference internal" href="#id1">单个 GMSL 相机</a></li>
<li><a class="reference internal" href="#id2">多个 GMSL 相机</a></li>
<li><a class="reference internal" href="#id3">多个 GMSL 相机同步</a></li>
<li><a class="reference internal" href="#id4">GMSL 相机的使用限制</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">GMSL 相机</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/multi_camera/gmsl_camera.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="gmsl">
<h1>GMSL 相机<a class="headerlink" href="#gmsl" title="Link to this heading"></a></h1>
<blockquote>
<div><p>本节介绍如何在 OrbbecSDK_ROS2 中使用 GMSL 相机。目前仅支持 Gemini 335Lg 和 Gemini 345Lg 设备,其他 GMSL 设备将在不久的将来得到支持。</p>
</div></blockquote>
<p>您可以在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples">example</a> 中找到示例使用代码。</p>
<section id="id1">
<h2>单个 GMSL 相机<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p>GMSL 相机在 OrbbecSDK_ROS2 中的使用与通过 USB 的 Gemini 330 系列相机相同。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_330_gmsl.launch.py
</pre></div>
</div>
</section>
<section id="id2">
<h2>多个 GMSL 相机<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>要获取 GMSL 相机的 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code>,插入相机并在终端中运行以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_devices_node
</pre></div>
</div>
<p>例如,获得的 gmsl 相机 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code>:<code class="docutils literal notranslate"><span class="pre">gmsl2-1</span></code></p>
<p>转到 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/examples/gmsl_camera/multi_gmsl_camera.launch.py">multi_gmsl_camera.launch.py</a> 文件并更改 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code>。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>multi_gmsl_camera.launch.py
</pre></div>
</div>
<blockquote>
<div><p>注意:默认情况下,multi_gmsl_camera.launch.py 仅启动 color 和 depth。如果您想启动其他传感器,请转到 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/config/camera_secondary_params.yaml">camera_secondary_params.yaml</a> 进行修改。</p>
</div></blockquote>
</section>
<section id="id3">
<h2>多个 GMSL 相机同步<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>首先,请查看如何使用 <a class="reference internal" href="multi_camera_synced.html"><span class="doc">multi_camera_synced</span></a>。</p>
<p>此外,GMSL 多相机同步不需要 Multi-Camera Sync Hub Pro,因此无需设置 <code class="docutils literal notranslate"><span class="pre">primary</span></code> 模式。每个 GMSL 相机都是 <code class="docutils literal notranslate"><span class="pre">secondary</span></code>。</p>
<p><strong>额外的参数设置</strong></p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">gmsl_trigger_fps</span></code>:设置硬件 soc 触发源帧率。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">enable_gmsl_trigger</span></code>:启用硬件 soc 触发。</p></li>
</ul>
<p><strong>运行启动文件</strong></p>
<p>请参考 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/examples/gmsl_camera/multi_gmsl_camera_synced.launch.py">multi_gmsl_camera_synced.launch.py</a> 中的配置。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>multi_gmsl_camera_synced.launch.py
</pre></div>
</div>
<blockquote>
<div><p>注意:默认情况下,multi_gmsl_camera_synced.launch.py 仅启动 color 和 depth。如果您想启动其他传感器,请转到 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/config/camera_secondary_params.yaml">camera_secondary_params.yaml</a> 进行修改。</p>
</div></blockquote>
</section>
<section id="id4">
<h2>GMSL 相机的使用限制<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<p>GMSL 相机与各种反序列化器芯片(如 MAX9296 和 MAX92716)接口。Orbbec GMSL 相机支持多个流,包括深度、彩色、IR 和 IMU 数据,但存在某些使用限制:</p>
<ul class="simple">
<li><p>GMSL 仅支持 V4L2 和 YUYV 格式;不支持 MJPG 格式。RGB 输出源自 YUYV 格式转换。</p></li>
<li><p>Gemini-335Lg 的元数据通过单独的节点提供,而其他型号的元数据嵌入在视频帧中,这对用户保持透明。</p></li>
<li><p>当使用 Max96712 作为反序列化器芯片时,由于 Max96712 芯片的特性,在 secondary_synced 模式下必须提供多机同步触发信号。否则,在切换数据流时会发生数据流中断。</p></li>
<li><p>连接在同一个 MAX9296、MAX96712 LinkA/B 或 MAX96712 LinkC/D 上的两个相机有以下限制:</p>
<ul>
<li><p>在驱动程序版本 v1.2.02 之前,存在一个限制,即一个相机的 RGB 和另一个相机的右 IR 不能同时流式传输。在驱动程序版本 v1.2.02 之后,限制修改为一个相机的 RGB 和另一个相机的左 IR 不能同时流式传输。</p></li>
<li><p>在驱动程序版本 v1.2.02 之前,存在一个限制,即一个相机的 DEPTH 和另一个相机的左 IR 不能同时流式传输。在驱动程序版本 v1.2.02 之后,限制修改为一个相机的 DEPTH 和另一个相机的右 IR 不能同时流式传输。</p></li>
<li><p>两个相机的活动流的组合最大数量限制为四个(满足上述两个条件即可确保合规)。</p></li>
</ul>
</li>
</ul>
<p>有关更多已知限制,请参考 <a class="reference external" href="https://github.com/orbbec/MIPI_Camera_Platform_Driver/blob/main/doc/Instructions%20for%20Using%20GMSL%20Camera.md">Orbbec GMSL 相机的使用限制</a></p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,200 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>多相机 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">多相机</a><ul>
<li><a class="reference internal" href="#id2">多相机无数据流</a></li>
<li><a class="reference internal" href="#id3">多相机图像话题帧率过低</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">多相机</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/multi_camera/multi_camera.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>多相机<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<ul class="simple">
<li><p>要获取相机的 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code>,插入相机并在终端中运行以下命令:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_devices_node
</pre></div>
</div>
<ul class="simple">
<li><p>将 <code class="docutils literal notranslate"><span class="pre">device_num</span></code> 参数设置为您拥有的相机数量。</p></li>
<li><p>转到 <code class="docutils literal notranslate"><span class="pre">OrbbecSDK_ROS2/launch/multi_xxx.launch.py</span></code> 文件并更改 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code>。</p></li>
<li><p>不要忘记将 <code class="docutils literal notranslate"><span class="pre">include</span></code> 标签放在 <code class="docutils literal notranslate"><span class="pre">group</span></code> 标签内。
否则,不同相机的参数值可能会被污染。</p></li>
</ul>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">launch</span><span class="w"> </span><span class="kn">import</span> <span class="n">LaunchDescription</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch.actions</span><span class="w"> </span><span class="kn">import</span> <span class="n">DeclareLaunchArgument</span><span class="p">,</span> <span class="n">IncludeLaunchDescription</span><span class="p">,</span> <span class="n">GroupAction</span><span class="p">,</span> <span class="n">ExecuteProcess</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch.launch_description_sources</span><span class="w"> </span><span class="kn">import</span> <span class="n">PythonLaunchDescriptionSource</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch_ros.actions</span><span class="w"> </span><span class="kn">import</span> <span class="n">Node</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">ament_index_python.packages</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_package_share_directory</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="k">def</span><span class="w"> </span><span class="nf">generate_launch_description</span><span class="p">():</span>
<span class="c1"># Include launch files</span>
<span class="n">package_dir</span> <span class="o">=</span> <span class="n">get_package_share_directory</span><span class="p">(</span><span class="s1">&#39;orbbec_camera&#39;</span><span class="p">)</span>
<span class="n">launch_file_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">package_dir</span><span class="p">,</span> <span class="s1">&#39;launch&#39;</span><span class="p">)</span>
<span class="n">launch1_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s1">&#39;gemini2L.launch.py&#39;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;camera_name&#39;</span><span class="p">:</span> <span class="s1">&#39;camera_01&#39;</span><span class="p">,</span>
<span class="s1">&#39;usb_port&#39;</span><span class="p">:</span> <span class="s1">&#39;6-2.4.4.2&#39;</span><span class="p">,</span> <span class="c1"># replace your usb port here</span>
<span class="s1">&#39;device_num&#39;</span><span class="p">:</span> <span class="s1">&#39;2&#39;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">launch2_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s1">&#39;gemini2L.launch.py&#39;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s1">&#39;camera_name&#39;</span><span class="p">:</span> <span class="s1">&#39;camera_02&#39;</span><span class="p">,</span>
<span class="s1">&#39;usb_port&#39;</span><span class="p">:</span> <span class="s1">&#39;6-2.4.1&#39;</span><span class="p">,</span> <span class="c1"># replace your usb port here</span>
<span class="s1">&#39;device_num&#39;</span><span class="p">:</span> <span class="s1">&#39;2&#39;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="c1"># If you need more cameras, just add more launch_include here, and change the usb_port and device_num</span>
<span class="c1"># Launch description</span>
<span class="n">ld</span> <span class="o">=</span> <span class="n">LaunchDescription</span><span class="p">([</span>
<span class="n">GroupAction</span><span class="p">([</span><span class="n">launch1_include</span><span class="p">]),</span>
<span class="n">GroupAction</span><span class="p">([</span><span class="n">launch2_include</span><span class="p">]),</span>
<span class="p">])</span>
<span class="k">return</span> <span class="n">ld</span>
</pre></div>
</div>
<ul class="simple">
<li><p>要启动相机,运行以下命令:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>multi_camera.launch.py
</pre></div>
</div>
<section id="id2">
<h2>多相机无数据流<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p><strong>电源供应不足</strong>:</p>
<ul class="simple">
<li><p>确保每个相机连接到单独的集线器。</p></li>
<li><p>使用带电源的集线器为每个相机提供足够的电力。</p></li>
</ul>
<p><strong>高分辨率</strong>:</p>
<ul class="simple">
<li><p>尝试降低分辨率以解决数据流问题。</p></li>
</ul>
<p><strong>增加 usbfs_memory_mb 值</strong>:</p>
<ul class="simple">
<li><p>将 <code class="docutils literal notranslate"><span class="pre">usbfs_memory_mb</span></code> 值增加到 128MB(这是一个参考值,可以根据系统需求进行调整)
通过运行以下命令:</p></li>
</ul>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="m">128</span><span class="w"> </span><span class="p">|</span><span class="w"> </span>sudo<span class="w"> </span>tee<span class="w"> </span>/sys/module/usbcore/parameters/usbfs_memory_mb
</pre></div>
</div>
<ul class="simple">
<li><p>要使此更改永久生效,请查看<a class="reference external" href="https://github.com/OpenKinect/libfreenect2/issues/807">此链接</a>。</p></li>
</ul>
</section>
<section id="id3">
<h2>多相机图像话题帧率过低<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>请参考 <a class="reference internal" href="../performance/fastdds_tuning.html"><span class="doc">Fast DDS 配置</span></a> 文件。</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,190 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>多相机同步说明 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">多相机同步说明</a><ul>
<li><a class="reference internal" href="#id2">设置说明</a></li>
<li><a class="reference internal" href="#orbbecsdk-ros2">使用 OrbbecSDK_ROS2 检查相机端口</a></li>
<li><a class="reference internal" href="#id3">OrbbecSDK_ROS2 多相机同步配置</a></li>
<li><a class="reference internal" href="#id4">运行以下命令启动多相机同步</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">多相机同步说明</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>多相机同步说明<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<blockquote>
<div><p>本文档的目的是说明如何在 OrbbecSDK_ROS2 中使用多相机同步</p>
</div></blockquote>
<section id="id2">
<h2>设置说明<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>请阅读多相机同步设置指南:<a class="reference external" href="https://www.orbbec.com/docs/set-up-cameras-for-external-synchronization_v1-2/">多相机同步设置</a></p></li>
<li><p>确保相机正确连接到多相机同步器。</p></li>
</ul>
<p><img alt="深度点云可视化" src="../../../../_images/multi_camera_synced1.png" /></p>
</section>
<section id="orbbecsdk-ros2">
<h2>使用 OrbbecSDK_ROS2 检查相机端口<a class="headerlink" href="#orbbecsdk-ros2" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_devices_node
</pre></div>
</div>
</section>
<section id="id3">
<h2>OrbbecSDK_ROS2 多相机同步配置<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>打开 multi_camera_synced.launch.py,并按照下面所示配置相机设置:</p>
<p><img alt="深度点云可视化" src="../../../../_images/multi_camera_synced2.png" /></p>
<ol class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">gemini_330_series.launch.py</span></code> 是用于启动相机的启动文件。</p></li>
<li><p>将 <code class="docutils literal notranslate"><span class="pre">camera_name</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">G330_0</span></code>。例如,发布的彩色图像话题将是 <code class="docutils literal notranslate"><span class="pre">/G330_0/color/image_raw</span></code>。</p></li>
<li><p>将 <code class="docutils literal notranslate"><span class="pre">usb_port</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">2-2</span></code>,表示正在使用端口 <code class="docutils literal notranslate"><span class="pre">2-2</span></code> 上的相机设备。此值可以在 <code class="docutils literal notranslate"><span class="pre">ros2</span> <span class="pre">run</span> <span class="pre">orbbec_camera</span> <span class="pre">list_devices_node</span></code> 命令的输出中找到。</p></li>
<li><p>将 <code class="docutils literal notranslate"><span class="pre">device_num</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">2</span></code>,表示将使用两个相机。</p></li>
<li><p>将 <code class="docutils literal notranslate"><span class="pre">sync_mode</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">primary</span></code>,表示 <code class="docutils literal notranslate"><span class="pre">2-7</span></code> 相机设备处于主模式。多相机同步模式选项可以在下图中找到。</p></li>
<li><p>来自 <code class="docutils literal notranslate"><span class="pre">config_file_path</span></code> 的参数可以覆盖在 <code class="docutils literal notranslate"><span class="pre">gemini_330_series.launch.py</span></code> 中设置的参数(可选)。</p></li>
<li><p>对于从属相机,将 <code class="docutils literal notranslate"><span class="pre">trigger_out_enabled</span></code> 设置为 false。</p></li>
</ol>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>模式名称</strong></th>
<th><strong>设置效果说明</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>free_run</td>
<td>- 支持不同的帧率设置<br />- 8 针同步接口不支持外部输出同步相关信号</td>
</tr>
<tr>
<td>standalone(默认)</td>
<td>● 默认与 Primary 相同<br />● 内置 RGBD 帧同步<br />● 8 针同步接口默认不向外部输出信号</td>
</tr>
<tr>
<td>primary</td>
<td>● 设置为主相机<br />● 8 针同步接口向外部设备输出信号</td>
</tr>
<tr>
<td>secondary</td>
<td>● 设置为从属(被动同步;当外部有硬件连续触发信号输入且连续触发信号与当前设置的帧率匹配时,根据外部触发信号采集图像;当没有外部触发信号时,停止流)<br />● 8 针同步接口向外部设备输出信号</td>
</tr>
<tr>
<td>secondary_synced</td>
<td>● 设置为从属同步(被动同步;当外部有硬件连续触发信号输入且连续触发信号与当前设置的帧率匹配时,根据外部触发信号采集图像;当没有外部触发信号时,根据设置的帧率的内部触发信号采集图像)<br />● 8 针同步接口向外部设备输出信号</td>
</tr>
<tr>
<td>hardware_triggering</td>
<td>● 设置为硬件触发(被动触发;当外部有硬件触发信号输入且触发信号时间间隔不小于当前上限时,根据外部触发信号采集图像;当没有外部触发信号时,不采集图像)<br />● 8 针同步接口向外部设备输出信号</td>
</tr>
<tr>
<td>software_triggering</td>
<td>● 设置为软件触发(被动触发;当主机有触发命令输入且触发命令时间间隔不小于当前上限时,根据触发命令采集图像;当没有触发命令时,不采集图像)<br />● 8 针同步接口向外部设备输出信号</td>
</tr>
</tbody>
</table><ul class="simple">
<li><p>主相机应该最后启动。</p></li>
<li><p>理想情况下,启动每个相机之间应该有 2 秒的延迟。</p></li>
</ul>
</section>
<section id="id4">
<h2>运行以下命令启动多相机同步<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>multi_camera_synced.launch.py
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,272 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>多相机同步验证节点 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">多相机同步验证节点</a><ul>
<li><a class="reference internal" href="#id2">使用教程</a><ul>
<li><a class="reference internal" href="#multi-camera-synced-launch-py"><strong>在 <code class="docutils literal notranslate"><span class="pre">multi_camera_synced.launch.py</span></code> 的基础上做以下修改</strong></a></li>
<li><a class="reference internal" href="#id3"><strong>参数文件修改</strong></a></li>
<li><a class="reference internal" href="#id4"><strong>启动与验证</strong></a></li>
<li><a class="reference internal" href="#launch"><strong>参考 launch 文件</strong></a></li>
</ul>
</li>
<li><a class="reference internal" href="#id5">必要系统配置</a><ul>
<li><a class="reference internal" href="#usb"><strong>提升 USB 缓冲区容量</strong></a></li>
<li><a class="reference internal" href="#fast-dds"><strong>配置 Fast DDS</strong></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">多相机同步验证节点</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/multi_camera/multi_camera_synced_verification_tool.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>多相机同步验证节点<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>文件路径:<a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/examples/multi_camera_time_sync/image_sync_example_node.cpp">image_sync_example_node.cpp</a></p>
<p>此示例节点用于 <strong>4 台 Orbbec 相机</strong> 的同步采集与时间戳验证。
它可用于验证多相机主从同步(Primary / Secondary Synced)模式下的帧对齐精度。</p>
<hr class="docutils" />
<section id="id2">
<h2>使用教程<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<section id="multi-camera-synced-launch-py">
<h3><strong>在 <code class="docutils literal notranslate"><span class="pre">multi_camera_synced.launch.py</span></code> 的基础上做以下修改</strong><a class="headerlink" href="#multi-camera-synced-launch-py" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>增加 <code class="docutils literal notranslate"><span class="pre">launch_include</span></code> 以适配 4 台相机</p></li>
<li><p>根据设备型号选择对应的 launch 文件,如 330 系列选择 gemini_330_series.launch.py</p></li>
<li><p>命名规范:camera_name 命名方式 camera_01、camera_02、camera_03 ...</p></li>
<li><p>设置 device_num 数量为 4</p></li>
<li><p>USB 端口配置 usb_port,使用以下命令查看并绑定正确的端口
<code class="docutils literal notranslate"><span class="pre">ros2</span> <span class="pre">run</span> <span class="pre">orbbec_camera</span> <span class="pre">list_devices_node</span></code></p></li>
<li><p>同步模式设置为主从模式,一个 primary 相机,其他设置为 secondary_synced</p></li>
<li><p>启动顺序:主相机(Primary)应最后启动,以确保同步信号建立正确。</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="id3">
<h3><strong>参数文件修改</strong><a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<p>修改 <code class="docutils literal notranslate"><span class="pre">config</span></code> 目录下的以下两个配置文件:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">camera_params.yaml</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">camera_secondary_params.yaml</span></code></p></li>
</ul>
<p>确保以下内容统一:</p>
<ul class="simple">
<li><p>启用 <strong>depth</strong> 与 <strong>color</strong> 流;</p></li>
<li><p>统一各相机的 <strong>帧率(fps)</strong>。</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="id4">
<h3><strong>启动与验证</strong><a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>启动多机同步 launch: <code class="docutils literal notranslate"><span class="pre">multi_camera_synced.launch.py</span></code></p></li>
<li><p>打开新终端运行同步验证节点: <code class="docutils literal notranslate"><span class="pre">ros2</span> <span class="pre">run</span> <span class="pre">orbbec_camera</span> <span class="pre">image_sync_example_node</span></code>
该节点会输出多相机图像的时间戳差异信息,用于验证同步效果。</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="launch">
<h3><strong>参考 launch 文件</strong><a class="headerlink" href="#launch" title="Link to this heading"></a></h3>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">ament_index_python.packages</span><span class="w"> </span><span class="kn">import</span> <span class="n">get_package_share_directory</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch</span><span class="w"> </span><span class="kn">import</span> <span class="n">LaunchDescription</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch_ros.actions</span><span class="w"> </span><span class="kn">import</span> <span class="n">Node</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch.actions</span><span class="w"> </span><span class="kn">import</span> <span class="n">IncludeLaunchDescription</span><span class="p">,</span> <span class="n">GroupAction</span><span class="p">,</span> <span class="n">TimerAction</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch.launch_description_sources</span><span class="w"> </span><span class="kn">import</span> <span class="n">PythonLaunchDescriptionSource</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">launch_ros.actions</span><span class="w"> </span><span class="kn">import</span> <span class="n">Node</span><span class="p">,</span> <span class="n">LoadComposableNodes</span>
<span class="k">def</span><span class="w"> </span><span class="nf">generate_launch_description</span><span class="p">():</span>
<span class="c1"># Include launch files</span>
<span class="n">package_dir</span> <span class="o">=</span> <span class="n">get_package_share_directory</span><span class="p">(</span><span class="s2">&quot;orbbec_camera&quot;</span><span class="p">)</span>
<span class="n">launch_file_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">package_dir</span><span class="p">,</span> <span class="s2">&quot;launch&quot;</span><span class="p">)</span>
<span class="n">config_file_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">package_dir</span><span class="p">,</span> <span class="s2">&quot;config&quot;</span><span class="p">)</span>
<span class="n">config_file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">config_file_dir</span><span class="p">,</span> <span class="s2">&quot;camera_params.yaml&quot;</span><span class="p">)</span>
<span class="n">secondary_config_file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">config_file_dir</span><span class="p">,</span> <span class="s2">&quot;camera_secondary_params.yaml&quot;</span><span class="p">)</span>
<span class="n">launch1_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s2">&quot;gemini_330_series.launch.py&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;camera_name&quot;</span><span class="p">:</span> <span class="s2">&quot;camera_01&quot;</span><span class="p">,</span>
<span class="s2">&quot;usb_port&quot;</span><span class="p">:</span> <span class="s2">&quot;2-2.3&quot;</span><span class="p">,</span>
<span class="s2">&quot;device_num&quot;</span><span class="p">:</span> <span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="s2">&quot;sync_mode&quot;</span><span class="p">:</span> <span class="s2">&quot;primary&quot;</span><span class="p">,</span>
<span class="s2">&quot;config_file_path&quot;</span><span class="p">:</span> <span class="n">config_file_path</span><span class="p">,</span>
<span class="s2">&quot;trigger_out_enabled&quot;</span><span class="p">:</span> <span class="s2">&quot;true&quot;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span>
<span class="p">)</span>
<span class="n">launch2_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s2">&quot;gemini_330_series.launch.py&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;camera_name&quot;</span><span class="p">:</span> <span class="s2">&quot;camera_02&quot;</span><span class="p">,</span>
<span class="s2">&quot;usb_port&quot;</span><span class="p">:</span> <span class="s2">&quot;2-1&quot;</span><span class="p">,</span>
<span class="s2">&quot;device_num&quot;</span><span class="p">:</span> <span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="s2">&quot;sync_mode&quot;</span><span class="p">:</span> <span class="s2">&quot;secondary_synced&quot;</span><span class="p">,</span>
<span class="s2">&quot;config_file_path&quot;</span><span class="p">:</span> <span class="n">secondary_config_file_path</span><span class="p">,</span>
<span class="s2">&quot;trigger_out_enabled&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span>
<span class="p">)</span>
<span class="n">launch3_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s2">&quot;gemini_330_series.launch.py&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;camera_name&quot;</span><span class="p">:</span> <span class="s2">&quot;camera_03&quot;</span><span class="p">,</span>
<span class="s2">&quot;usb_port&quot;</span><span class="p">:</span> <span class="s2">&quot;2-3&quot;</span><span class="p">,</span>
<span class="s2">&quot;device_num&quot;</span><span class="p">:</span> <span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="s2">&quot;sync_mode&quot;</span><span class="p">:</span> <span class="s2">&quot;secondary_synced&quot;</span><span class="p">,</span>
<span class="s2">&quot;config_file_path&quot;</span><span class="p">:</span> <span class="n">secondary_config_file_path</span><span class="p">,</span>
<span class="s2">&quot;trigger_out_enabled&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span>
<span class="p">)</span>
<span class="n">launch4_include</span> <span class="o">=</span> <span class="n">IncludeLaunchDescription</span><span class="p">(</span>
<span class="n">PythonLaunchDescriptionSource</span><span class="p">(</span>
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">launch_file_dir</span><span class="p">,</span> <span class="s2">&quot;gemini_330_series.launch.py&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">launch_arguments</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;camera_name&quot;</span><span class="p">:</span> <span class="s2">&quot;camera_04&quot;</span><span class="p">,</span>
<span class="s2">&quot;usb_port&quot;</span><span class="p">:</span> <span class="s2">&quot;2-4&quot;</span><span class="p">,</span>
<span class="s2">&quot;device_num&quot;</span><span class="p">:</span> <span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="s2">&quot;sync_mode&quot;</span><span class="p">:</span> <span class="s2">&quot;secondary_synced&quot;</span><span class="p">,</span>
<span class="s2">&quot;config_file_path&quot;</span><span class="p">:</span> <span class="n">secondary_config_file_path</span><span class="p">,</span>
<span class="s2">&quot;trigger_out_enabled&quot;</span><span class="p">:</span> <span class="s2">&quot;false&quot;</span>
<span class="p">}</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span>
<span class="p">)</span>
<span class="c1"># Launch description</span>
<span class="n">ld</span> <span class="o">=</span> <span class="n">LaunchDescription</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">TimerAction</span><span class="p">(</span><span class="n">period</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">actions</span><span class="o">=</span><span class="p">[</span><span class="n">GroupAction</span><span class="p">([</span><span class="n">launch2_include</span><span class="p">])]),</span>
<span class="n">TimerAction</span><span class="p">(</span><span class="n">period</span><span class="o">=</span><span class="mf">2.0</span><span class="p">,</span> <span class="n">actions</span><span class="o">=</span><span class="p">[</span><span class="n">GroupAction</span><span class="p">([</span><span class="n">launch3_include</span><span class="p">])]),</span>
<span class="n">TimerAction</span><span class="p">(</span><span class="n">period</span><span class="o">=</span><span class="mf">4.0</span><span class="p">,</span> <span class="n">actions</span><span class="o">=</span><span class="p">[</span><span class="n">GroupAction</span><span class="p">([</span><span class="n">launch4_include</span><span class="p">])]),</span>
<span class="n">TimerAction</span><span class="p">(</span><span class="n">period</span><span class="o">=</span><span class="mf">6.0</span><span class="p">,</span> <span class="n">actions</span><span class="o">=</span><span class="p">[</span><span class="n">GroupAction</span><span class="p">([</span><span class="n">launch1_include</span><span class="p">])]),</span>
<span class="c1"># The primary camera should be launched at last</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">ld</span>
</pre></div>
</div>
</section>
</section>
<hr class="docutils" />
<section id="id5">
<h2>必要系统配置<a class="headerlink" href="#id5" title="Link to this heading"></a></h2>
<section id="usb">
<h3><strong>提升 USB 缓冲区容量</strong><a class="headerlink" href="#usb" title="Link to this heading"></a></h3>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">echo</span> <span class="mi">512</span> <span class="o">|</span> <span class="n">sudo</span> <span class="n">tee</span> <span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">module</span><span class="o">/</span><span class="n">usbcore</span><span class="o">/</span><span class="n">parameters</span><span class="o">/</span><span class="n">usbfs_memory_mb</span>
</pre></div>
</div>
</section>
<section id="fast-dds">
<h3><strong>配置 Fast DDS</strong><a class="headerlink" href="#fast-dds" title="Link to this heading"></a></h3>
<p>优化 ROS2 节点间通信延迟,可以有效减少图像传输延迟,<a class="reference internal" href="../performance/fastdds_tuning.html"><span class="doc">配置过程见此章节</span></a>。</p>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,142 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>高效的进程内通信: &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">高效的进程内通信:</a><ul>
<li><a class="reference internal" href="#id2">简介</a></li>
<li><a class="reference internal" href="#id3">示例</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">高效的进程内通信:</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/performance/efficient_intra_process_communication.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>高效的进程内通信:<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<section id="id2">
<h2>简介<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>如果我们的ROS2封装器节点与订阅者节点加载在同一进程中,它支持零拷贝通信。这可以减少图像/点云话题的拷贝时间,特别是在大帧分辨率和高FPS的情况下。</p>
<p>您需要启动一个组件容器,并将我们的节点作为组件与其他组件节点一起启动。有关&quot;在单个进程中组合多个节点&quot;的更多详细信息,请参见 <a class="reference external" href="https://docs.ros.org/en/rolling/Tutorials/Composition.html">此处</a>。</p>
<p>有关高效进程内通信的更多详细信息,请参见 <a class="reference external" href="https://docs.ros.org/en/humble/Tutorials/Intra-Process-Communication.html#efficient-intra-process-communication">此处</a>。</p>
</section>
<section id="id3">
<h2>示例<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p><strong>手动将多个组件加载到同一进程中</strong></p>
<ul>
<li><p>启动组件:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>rclcpp_components<span class="w"> </span>component_container
</pre></div>
</div>
</li>
<li><p>添加封装器:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>component<span class="w"> </span>load<span class="w"> </span>/ComponentManager<span class="w"> </span>orbbec_camera<span class="w"> </span>orbbec_camera::OBCameraNodeDriver<span class="w"> </span>-e<span class="w"> </span>use_intra_process_comms:<span class="o">=</span><span class="nb">true</span>
</pre></div>
</div>
<p>以相同方式加载其他组件节点(封装器话题的消费者)。</p>
</li>
</ul>
<p><strong>使用启动文件</strong></p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>gemini_intra_process_demo_launch.py
</pre></div>
</div>
<p><strong>限制</strong></p>
<ul class="simple">
<li><p>RCLPY目前不支持节点组件</p></li>
<li><p>使用 <code class="docutils literal notranslate"><span class="pre">image_transport</span></code> 的压缩图像将被禁用,因为进程内通信不支持此功能</p></li>
</ul>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,239 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>针对Orbbec相机与ROS2的Fast DDS优化 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">针对Orbbec相机与ROS2的Fast DDS优化</a><ul>
<li><a class="reference internal" href="#id1">调整系统参数</a></li>
<li><a class="reference internal" href="#fast-dds">Fast DDS配置</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">针对Orbbec相机与ROS2的Fast DDS优化</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/performance/fastdds_tuning.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="orbbecros2fast-dds">
<h1>针对Orbbec相机与ROS2的Fast DDS优化<a class="headerlink" href="#orbbecros2fast-dds" title="Link to this heading"></a></h1>
<p>使用默认配置时,Fast DDS表现出次优的传输效率,导致在ROS2中使用Orbbec相机时图像传输延迟显著。本文档提供了优化Fast DDS以提高图像传输效率的指导。</p>
<section id="id1">
<h2>调整系统参数<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p><strong>IP分片时间</strong></p>
<ul>
<li><p><strong>路径</strong>: <code class="docutils literal notranslate"><span class="pre">/proc/sys/net/ipv4/ipfrag_time</span></code>(默认值:30秒)</p></li>
<li><p><strong>目的</strong>: 定义IP分片保留在内存中的持续时间。</p></li>
<li><p><strong>调整</strong>: 减少此值以缩短未接收到分片的时间窗口,这有助于减少延迟。考虑到您环境的具体需求,因为此设置会影响所有传入的分片。</p>
<p><strong>示例</strong>: 设置为3秒。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>sysctl<span class="w"> </span>net.ipv4.ipfrag_time<span class="o">=</span><span class="m">3</span>
</pre></div>
</div>
</li>
</ul>
<p><strong>IP分片内存阈值</strong></p>
<ul>
<li><p><strong>路径</strong>: <code class="docutils literal notranslate"><span class="pre">/proc/sys/net/ipv4/ipfrag_high_thresh</span></code>(默认值:262144字节)</p></li>
<li><p><strong>目的</strong>: 设置用于重组IP分片的最大内存。</p></li>
<li><p><strong>调整</strong>: 增加此值以允许更多内存用于分片重组,这可以改善较大数据包的处理。</p>
<p><strong>示例</strong>: 增加到128 MB。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>sysctl<span class="w"> </span>net.ipv4.ipfrag_high_thresh<span class="o">=</span><span class="m">134217728</span>
</pre></div>
</div>
</li>
</ul>
<p><strong>最大缓冲区大小</strong></p>
<ul>
<li><p><strong>目的</strong>: 配置接收和发送数据的最大缓冲区大小,这对高吞吐量数据传输至关重要。</p></li>
<li><p><strong>调整</strong>: 设置接收和发送操作的最大缓冲区大小。</p>
<p><strong>命令</strong>:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>sysctl<span class="w"> </span>-w<span class="w"> </span>net.core.rmem_max<span class="o">=</span><span class="m">2147483647</span>
sudo<span class="w"> </span>sysctl<span class="w"> </span>-w<span class="w"> </span>net.core.rmem_default<span class="o">=</span><span class="m">2147483647</span>
sudo<span class="w"> </span>sysctl<span class="w"> </span>-w<span class="w"> </span>net.core.wmem_max<span class="o">=</span><span class="m">2147483647</span>
sudo<span class="w"> </span>sysctl<span class="w"> </span>-w<span class="w"> </span>net.core.wmem_default<span class="o">=</span><span class="m">2147483647</span>
</pre></div>
</div>
</li>
</ul>
<p>或者,通过将这些设置添加到 <code class="docutils literal notranslate"><span class="pre">/etc/sysctl.d/10-fastrtps-max.conf</span></code> 文件中使其永久生效。</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>gedit<span class="w"> </span>/etc/sysctl.d/10-fastrtps-max.conf
</pre></div>
</div>
<p>将以下行添加到文件中:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>net.core.rmem_max<span class="o">=</span><span class="m">2147483647</span>
net.core.rmem_default<span class="o">=</span><span class="m">2147483647</span>
net.core.wmem_max<span class="o">=</span><span class="m">2147483647</span>
net.core.wmem_default<span class="o">=</span><span class="m">2147483647</span>
</pre></div>
</div>
<p>然后保存并退出文件。运行 <code class="docutils literal notranslate"><span class="pre">sudo</span> <span class="pre">sysctl</span> <span class="pre">-p</span></code> 以应用更改。</p>
<p>有关详细指导,请参考 <a class="reference external" href="https://docs.ros.org/en/foxy/How-To-Guides/DDS-tuning.html">ROS 2 DDS调优文档</a>。</p>
</section>
<section id="fast-dds">
<h2>Fast DDS配置<a class="headerlink" href="#fast-dds" title="Link to this heading"></a></h2>
<p>以下是针对Orbbec相机与ROS2使用而优化的Fast DDS配置文件示例。此配置通过调整缓冲区大小和传输设置来增强整体数据传输。</p>
<p><strong>配置文件:</strong> <code class="docutils literal notranslate"><span class="pre">shm_fastdds.xml</span></code></p>
<p>将此文件放在 <code class="docutils literal notranslate"><span class="pre">$HOME</span></code> 目录中。</p>
<div class="highlight-xml notranslate"><div class="highlight"><pre><span></span><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
<span class="nt">&lt;profiles</span><span class="w"> </span><span class="na">xmlns=</span><span class="s">&quot;http://www.eprosima.com/XMLSchemas/fastRTPS_Profiles&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;transport_descriptors&gt;</span>
<span class="w"> </span><span class="nt">&lt;transport_descriptor&gt;</span>
<span class="w"> </span><span class="nt">&lt;transport_id&gt;</span>UDP_transport<span class="nt">&lt;/transport_id&gt;</span>
<span class="w"> </span><span class="nt">&lt;type&gt;</span>UDPv4<span class="nt">&lt;/type&gt;</span>
<span class="w"> </span><span class="nt">&lt;maxInitialPeersRange&gt;</span>10<span class="nt">&lt;/maxInitialPeersRange&gt;</span>
<span class="w"> </span><span class="nt">&lt;maxMessageSize&gt;</span>65000<span class="nt">&lt;/maxMessageSize&gt;</span>
<span class="w"> </span><span class="nt">&lt;sendBufferSize&gt;</span>1048576<span class="nt">&lt;/sendBufferSize&gt;</span>
<span class="w"> </span><span class="nt">&lt;receiveBufferSize&gt;</span>1048576<span class="nt">&lt;/receiveBufferSize&gt;</span>
<span class="w"> </span><span class="nt">&lt;/transport_descriptor&gt;</span>
<span class="w"> </span><span class="nt">&lt;/transport_descriptors&gt;</span>
<span class="w"> </span><span class="nt">&lt;participant</span><span class="w"> </span><span class="na">profile_name=</span><span class="s">&quot;participant_profile_ros2&quot;</span><span class="w"> </span><span class="na">is_default_profile=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;rtps&gt;</span>
<span class="w"> </span><span class="nt">&lt;name&gt;</span>profile_for_ros2_context<span class="nt">&lt;/name&gt;</span>
<span class="w"> </span><span class="nt">&lt;userTransports&gt;</span>
<span class="w"> </span><span class="nt">&lt;transport_id&gt;</span>UDP_transport<span class="nt">&lt;/transport_id&gt;</span>
<span class="w"> </span><span class="nt">&lt;/userTransports&gt;</span>
<span class="w"> </span><span class="nt">&lt;useBuiltinTransports&gt;</span>false<span class="nt">&lt;/useBuiltinTransports&gt;</span>
<span class="w"> </span><span class="nt">&lt;sendSocketBufferSize&gt;</span>1048576<span class="nt">&lt;/sendSocketBufferSize&gt;</span>
<span class="w"> </span><span class="nt">&lt;listenSocketBufferSize&gt;</span>1048576<span class="nt">&lt;/listenSocketBufferSize&gt;</span>
<span class="w"> </span><span class="nt">&lt;builtin&gt;</span>
<span class="w"> </span><span class="nt">&lt;initialPeersList&gt;</span>
<span class="w"> </span><span class="nt">&lt;locator&gt;</span>
<span class="w"> </span><span class="nt">&lt;udpv4&gt;</span>
<span class="w"> </span><span class="nt">&lt;address&gt;</span>127.0.0.1<span class="nt">&lt;/address&gt;</span>
<span class="w"> </span><span class="nt">&lt;/udpv4&gt;</span>
<span class="w"> </span><span class="nt">&lt;/locator&gt;</span>
<span class="w"> </span><span class="nt">&lt;/initialPeersList&gt;</span>
<span class="w"> </span><span class="nt">&lt;/builtin&gt;</span>
<span class="w"> </span><span class="nt">&lt;/rtps&gt;</span>
<span class="w"> </span><span class="nt">&lt;/participant&gt;</span>
<span class="w"> </span><span class="nt">&lt;data_writer</span><span class="w"> </span><span class="na">profile_name=</span><span class="s">&quot;default publisher profile&quot;</span><span class="w"> </span><span class="na">is_default_profile=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;qos&gt;</span>
<span class="w"> </span><span class="nt">&lt;publishMode&gt;</span>
<span class="w"> </span><span class="nt">&lt;kind&gt;</span>ASYNCHRONOUS<span class="nt">&lt;/kind&gt;</span>
<span class="w"> </span><span class="nt">&lt;/publishMode&gt;</span>
<span class="w"> </span><span class="nt">&lt;latencyBudget&gt;</span>
<span class="w"> </span><span class="nt">&lt;duration&gt;</span>
<span class="w"> </span><span class="nt">&lt;sec&gt;</span>0<span class="nt">&lt;/sec&gt;</span>
<span class="w"> </span><span class="nt">&lt;nanosec&gt;</span>1000000<span class="nt">&lt;/nanosec&gt;</span>
<span class="w"> </span><span class="nt">&lt;/duration&gt;</span>
<span class="w"> </span><span class="nt">&lt;/latencyBudget&gt;</span>
<span class="w"> </span><span class="nt">&lt;/qos&gt;</span>
<span class="w"> </span><span class="nt">&lt;historyMemoryPolicy&gt;</span>PREALLOCATED_WITH_REALLOC<span class="nt">&lt;/historyMemoryPolicy&gt;</span>
<span class="w"> </span><span class="nt">&lt;/data_writer&gt;</span>
<span class="w"> </span><span class="nt">&lt;data_reader</span><span class="w"> </span><span class="na">profile_name=</span><span class="s">&quot;default subscription profile&quot;</span><span class="w"> </span><span class="na">is_default_profile=</span><span class="s">&quot;true&quot;</span><span class="nt">&gt;</span>
<span class="w"> </span><span class="nt">&lt;qos&gt;</span>
<span class="w"> </span><span class="nt">&lt;data_sharing&gt;</span>
<span class="w"> </span><span class="nt">&lt;kind&gt;</span>AUTOMATIC<span class="nt">&lt;/kind&gt;</span>
<span class="w"> </span><span class="nt">&lt;/data_sharing&gt;</span>
<span class="w"> </span><span class="nt">&lt;latencyBudget&gt;</span>
<span class="w"> </span><span class="nt">&lt;duration&gt;</span>
<span class="w"> </span><span class="nt">&lt;sec&gt;</span>0<span class="nt">&lt;/sec&gt;</span>
<span class="w"> </span><span class="nt">&lt;nanosec&gt;</span>1000000<span class="nt">&lt;/nanosec&gt;</span>
<span class="w"> </span><span class="nt">&lt;/duration&gt;</span>
<span class="w"> </span><span class="nt">&lt;/latencyBudget&gt;</span>
<span class="w"> </span><span class="nt">&lt;/qos&gt;</span>
<span class="w"> </span><span class="nt">&lt;historyMemoryPolicy&gt;</span>PREALLOCATED_WITH_REALLOC<span class="nt">&lt;/historyMemoryPolicy&gt;</span>
<span class="w"> </span><span class="nt">&lt;/data_reader&gt;</span>
<span class="nt">&lt;/profiles&gt;</span>
</pre></div>
</div>
<p><strong>环境变量</strong></p>
<p>设置以下环境变量以使用自定义Fast DDS配置文件:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">export</span><span class="w"> </span><span class="nv">RMW_IMPLEMENTATION</span><span class="o">=</span>rmw_fastrtps_cpp
<span class="nb">export</span><span class="w"> </span><span class="nv">FASTRTPS_DEFAULT_PROFILES_FILE</span><span class="o">=</span><span class="nv">$HOME</span>/shm_fastdds.xml
<span class="nb">export</span><span class="w"> </span><span class="nv">RMW_FASTRTPS_USE_QOS_FROM_XML</span><span class="o">=</span><span class="m">1</span>
</pre></div>
</div>
<p>此配置旨在优化数据流并减少传输延迟,提高Orbbec相机系统在ROS2环境中的响应性和可靠性。</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,304 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>使用Orbbec ROS包降低CPU使用率 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../../genindex.html" />
<link rel="search" title="搜索" href="../../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">使用Orbbec ROS包降低CPU使用率</a><ul>
<li><a class="reference internal" href="#cpu">降低CPU使用率的推荐设置</a></li>
<li><a class="reference internal" href="#id1">用于测试的启动文件</a></li>
<li><a class="reference internal" href="#id2">测试环境</a></li>
<li><a class="reference internal" href="#id3">测试设置</a></li>
<li><a class="reference internal" href="#id4">测试结果</a></li>
<li><a class="reference internal" href="#id5">进一步优化</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">使用Orbbec ROS包降低CPU使用率</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../../_sources/source/camera_devices/5_advanced_guide/performance/lower_cpu_usage.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="orbbec-roscpu">
<h1>使用Orbbec ROS包降低CPU使用率<a class="headerlink" href="#orbbec-roscpu" title="Link to this heading"></a></h1>
<p>您可以在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples">示例</a> 中找到使用示例代码。</p>
<p>本文档概述了在使用 <strong>Gemini 330系列相机</strong> 的 <strong>OrbbecSDK_ROS2 v2</strong> 环境中最小化CPU使用率的策略。固件版本必须 <strong>不低于1.4.10</strong>,且 <code class="docutils literal notranslate"><span class="pre">device</span></code> 应设置为 <strong>Default</strong>。</p>
<section id="cpu">
<h2>降低CPU使用率的推荐设置<a class="headerlink" href="#cpu" title="Link to this heading"></a></h2>
<p>要在OrbbecSDK_ROS2中实现最低的CPU使用率,建议配置以下参数。</p>
<table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">参数</th>
<th style="text-align: center;">推荐值</th>
<th style="text-align: center;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;"><code>uvc_backend</code></td>
<td style="text-align: center;"><code>v4l2</code></td>
<td style="text-align: center;">与 <code>libuvc</code> 相比CPU使用率更低</td>
</tr>
<tr>
<td style="text-align: center;"><code>color_format</code></td>
<td style="text-align: center;"><code>RGB</code></td>
<td style="text-align: center;">CPU使用率低于 <code>MJPG</code></td>
</tr>
<tr>
<td style="text-align: center;"><code>filter</code></td>
<td style="text-align: center;">仅使用 <code>hardware_noise_removal_filter</code></td>
<td style="text-align: center;">其他滤波器会显著增加CPU使用率</td>
</tr>
</tbody>
</table></section>
<section id="id1">
<h2>用于测试的启动文件<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">gemini_330_series_lower_cpu_usage.launch.py</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">multi_camera_lower_cpu_usage.launch.py</span></code></p></li>
</ul>
</section>
<section id="id2">
<h2>测试环境<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p><strong>硬件配置</strong></p>
<ul class="simple">
<li><p><strong>CPU</strong>: Intel i7-8700 &#64; 3.20GHz</p></li>
<li><p><strong>内存</strong>: 24 GB</p></li>
<li><p><strong>存储</strong>: Micron 2200S NVMe 256GB</p></li>
<li><p><strong>GPU</strong>: NVIDIA GeForce GTX 1660Ti</p></li>
<li><p><strong>操作系统</strong>: Ubuntu22.04</p></li>
</ul>
<p><strong>ROS配置</strong></p>
<ul class="simple">
<li><p><strong>ROS版本</strong>: ROS2 Humble</p></li>
<li><p><strong>SDK版本</strong>: OrbbecSDK_ROS2 v2.2.1</p></li>
</ul>
<p><strong>相机设置</strong></p>
<ul class="simple">
<li><p>设备: 2x Gemini 335, 1x Gemini 336, 1x Gemini 336L</p></li>
<li><p>固件版本: 1.4.10</p></li>
</ul>
</section>
<section id="id3">
<h2>测试设置<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p><strong>数据流设置:</strong></p>
<ul class="simple">
<li><p>深度/左IR/右IR: 848×480 &#64; 30fps</p></li>
<li><p>彩色: 848×480 &#64; 30fps</p></li>
</ul>
<p>注意:以下CPU使用率数据重点关注 <code class="docutils literal notranslate"><span class="pre">uvc_backend</span></code>、<code class="docutils literal notranslate"><span class="pre">color_format</span></code> 和各种滤波器组合。</p>
</section>
<section id="id4">
<h2>测试结果<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<p><strong><code class="docutils literal notranslate"><span class="pre">uvc_backend</span></code> 对比(RGB格式)</strong></p>
<table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">libuvc CPU使用率</th>
<th style="text-align: center;">v4l2 CPU使用率</th>
<th style="text-align: center;">绝对变化</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">182.8%</td>
<td style="text-align: center;">118.8%</td>
<td style="text-align: center;">-64.0%</td>
</tr>
</tbody>
</table><p>使用v4l2后端可以显著降低CPU使用率。在我们的实现中,v4l2无需对Linux内核进行任何补丁即可工作,允许用户轻松在v4l2和libuvc之间切换,并保持与标准Linux发行版的完全兼容性。</p>
<p><strong><code class="docutils literal notranslate"><span class="pre">color_format</span></code> 对比(MJPG vs RGB)</strong></p>
<table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">后端</th>
<th style="text-align: center;">MJPG CPU使用率</th>
<th style="text-align: center;">RGB CPU使用率</th>
<th style="text-align: center;">绝对变化</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">libuvc</td>
<td style="text-align: center;">347.7%</td>
<td style="text-align: center;">182.8%</td>
<td style="text-align: center;">-164.9%</td>
</tr>
<tr>
<td style="text-align: center;">v4l2</td>
<td style="text-align: center;">170.0%</td>
<td style="text-align: center;">118.8%</td>
<td style="text-align: center;">-51.2%</td>
</tr>
</tbody>
</table><p>如果选择RGB格式而不是MJPG,可以降低CPU使用率,因为MJPG图像的解码会消耗主机CPU资源。</p>
<p><strong>滤波器配置影响</strong></p>
<table border="1" class="docutils">
<thead>
<tr>
<th>应用的滤波器</th>
<th>libuvc CPU使用率</th>
<th>CPU使用率增加</th>
<th>v4l2 CPU使用率</th>
<th>CPU使用率增加</th>
</tr>
</thead>
<tbody>
<tr>
<td>无滤波器(基准)</td>
<td>182.8%</td>
<td>0.0%(基准)</td>
<td>118.8%</td>
<td>0.0%(基准)</td>
</tr>
<tr>
<td><code>(软件)noise_removal_filter</code></td>
<td>218.0%</td>
<td>+35.2%</td>
<td>128.5%</td>
<td>+9.7%</td>
</tr>
<tr>
<td><code>(软件)noise_removal_filter + spatial_filter</code></td>
<td>469.6%</td>
<td>+286.8%</td>
<td>336.7%</td>
<td>+217.9%</td>
</tr>
<tr>
<td><code>hardware_noise_removal_filter</code></td>
<td>186.3%</td>
<td>+3.5%</td>
<td>115.4%</td>
<td>-3.4%</td>
</tr>
<tr>
<td><code>hardware_noise_removal_filter + spatial_filter</code></td>
<td>251.3%</td>
<td>+68.5%</td>
<td>152.5%</td>
<td>+33.7%</td>
</tr>
</tbody>
</table><p>根据测试结果,仅使用 <code class="docutils literal notranslate"><span class="pre">hardware_noise_removal_filter</span></code> 相比无滤波器基准,对 <code class="docutils literal notranslate"><span class="pre">libuvc</span></code>(+3.5%)和 <code class="docutils literal notranslate"><span class="pre">v4l2</span></code>(-3.4%)的CPU使用率变化可以忽略不计,因为此滤波器在相机硬件内部运行。相比之下,其他滤波器在主机系统上执行。将 <code class="docutils literal notranslate"><span class="pre">spatial_filter</span></code> 添加到硬件滤波器会导致CPU使用率适度增加,而应用基于软件的 <code class="docutils literal notranslate"><span class="pre">noise_removal_filter</span></code>——无论是单独使用还是与 <code class="docutils literal notranslate"><span class="pre">spatial_filter</span></code> 结合——都会显著增加CPU负载。为保持较低的CPU使用率,建议避免使用基于软件的滤波器,仅依赖 <code class="docutils literal notranslate"><span class="pre">hardware_noise_removal_filter</span></code>。</p>
</section>
<section id="id5">
<h2>进一步优化<a class="headerlink" href="#id5" title="Link to this heading"></a></h2>
<table border="1" class="docutils">
<thead>
<tr>
<th style="text-align: center;">参数</th>
<th style="text-align: center;">推荐值</th>
<th style="text-align: center;">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;"><code>depth_registration</code></td>
<td style="text-align: center;"><code>false</code> 或 <code>true</code> 配合 <code>align_mode=HW</code></td>
<td style="text-align: center;">软件对齐消耗更多CPU</td>
</tr>
<tr>
<td style="text-align: center;"><code>enable_point_cloud</code></td>
<td style="text-align: center;"><code>false</code></td>
<td style="text-align: center;">禁用点云可降低CPU使用率</td>
</tr>
<tr>
<td style="text-align: center;"><code>enable_colored_point_cloud</code></td>
<td style="text-align: center;"><code>false</code></td>
<td style="text-align: center;">禁用彩色点云可降低CPU使用率</td>
</tr>
</tbody>
</table></section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,130 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>性能基准测试 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">性能基准测试</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">性能基准测试</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/6_benchmark/benchmark.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>性能基准测试<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章介绍如何使用性能基准测试工具,并提供不同相机的测试结果。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="introduction.html">介绍</a><ul>
<li class="toctree-l2"><a class="reference internal" href="introduction.html#id2">通用基准测试节点</a></li>
<li class="toctree-l2"><a class="reference internal" href="introduction.html#id3">服务基准测试节点</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="benchmark_usage.html">性能基准测试使用</a><ul>
<li class="toctree-l2"><a class="reference internal" href="benchmark_usage.html#id2">使用通用基准测试节点</a></li>
<li class="toctree-l2"><a class="reference internal" href="benchmark_usage.html#id3">使用服务基准测试节点</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="benchmark_data.html">性能基准测试数据</a><ul>
<li class="toctree-l2"><a class="reference internal" href="benchmark_data.html#id2">通用基准测试数据</a></li>
<li class="toctree-l2"><a class="reference internal" href="benchmark_data.html#id3">服务基准测试数据</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="othertools.html">其他工具</a><ul>
<li class="toctree-l2"><a class="reference internal" href="othertools.html#ob-benchmark">Ob_benchmark 工具</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,126 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>性能基准测试数据 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">性能基准测试数据</a><ul>
<li><a class="reference internal" href="#id2">通用基准测试数据</a></li>
<li><a class="reference internal" href="#id3">服务基准测试数据</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">性能基准测试数据</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/6_benchmark/benchmark_data.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>性能基准测试数据<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本节记录了使用性能基准测试工具测试不同相机的数据。点击链接下载 xlsx 数据。</p>
<section id="id2">
<h2>通用基准测试数据<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>使用默认启动文件运行 <code class="docutils literal notranslate"><span class="pre">common_benchmark_node</span></code> 并测试 1 小时的数据。</p>
<ul class="simple">
<li><p><a class="reference external" href="../../_static/ros2_common_benchmark_data.xlsx">通用基准测试数据</a></p></li>
</ul>
</section>
<section id="id3">
<h2>服务基准测试数据<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p>使用默认启动文件分别运行 <code class="docutils literal notranslate"><span class="pre">service_benchmark_node</span></code> 和 <code class="docutils literal notranslate"><span class="pre">service_benchmark_node.py</span></code>。每个服务调用 10 次,并记录数据。</p>
<ul class="simple">
<li><p><a class="reference external" href="../../_static/ros2_service_benchmark_cpp.xlsx">服务基准测试数据 C++</a></p></li>
<li><p><a class="reference external" href="../../_static/ros2_service_benchmark_python.xlsx">服务基准测试数据 Python</a></p></li>
</ul>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,234 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>性能基准测试使用 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">性能基准测试使用</a><ul>
<li><a class="reference internal" href="#id2">使用通用基准测试节点</a></li>
<li><a class="reference internal" href="#id3">使用服务基准测试节点</a><ul>
<li><a class="reference internal" href="#ros2-c">ROS2 C++</a></li>
<li><a class="reference internal" href="#ros2-python">ROS2 Python</a></li>
<li><a class="reference internal" href="#yaml"><strong>示例 YAML 配置</strong></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">性能基准测试使用</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/6_benchmark/benchmark_usage.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>性能基准测试使用<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本节介绍如何在 C++ 和 Python 中使用性能基准测试工具,并提供示例 YAML 配置文件。</p>
<section id="id2">
<h2>使用通用基准测试节点<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ros2</span> <span class="n">run</span> <span class="n">orbbec_camera</span> <span class="n">common_benchmark_node</span><span class="o">.</span><span class="n">py</span> \
<span class="o">--</span><span class="n">run_time</span> <span class="mi">2</span><span class="n">h</span> \
<span class="o">--</span><span class="n">csv_file</span> <span class="o">/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">log</span><span class="o">.</span><span class="n">csv</span>
</pre></div>
</div>
<ul class="simple">
<li><p><strong>参数</strong></p>
<ul>
<li><p><strong>--run_time</strong>:监控持续时间,指定为时间字符串,如 <code class="docutils literal notranslate"><span class="pre">&quot;10s&quot;</span></code>、<code class="docutils literal notranslate"><span class="pre">&quot;5m&quot;</span></code>、<code class="docutils literal notranslate"><span class="pre">&quot;1h&quot;</span></code>、<code class="docutils literal notranslate"><span class="pre">&quot;2d&quot;</span></code>。默认为 10 秒。</p></li>
<li><p><strong>--csv_file</strong>:输出 CSV 文件的路径。默认情况下,它保存在工作空间目录中,名称为 &quot;camera_monitor_log.csv&quot;。</p></li>
</ul>
</li>
</ul>
</section>
<section id="id3">
<h2>使用服务基准测试节点<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<section id="ros2-c">
<h3>ROS2 C++<a class="headerlink" href="#ros2-c" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong>单个服务基准测试</strong></p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ros2</span> <span class="n">run</span> <span class="n">orbbec_camera</span> <span class="n">service_benchmark_node</span> \
<span class="o">--</span><span class="n">ros</span><span class="o">-</span><span class="n">args</span> \
<span class="o">-</span><span class="n">p</span> <span class="n">service_name</span><span class="o">:=/</span><span class="n">camera</span><span class="o">/</span><span class="n">get_depth_gain</span> \
<span class="o">-</span><span class="n">p</span> <span class="n">service_type</span><span class="o">:=</span><span class="n">orbbec_camera_msgs</span><span class="o">/</span><span class="n">srv</span><span class="o">/</span><span class="n">GetInt32</span> \
<span class="o">-</span><span class="n">p</span> <span class="n">count</span><span class="o">:=</span><span class="mi">10</span>
</pre></div>
</div>
<ul class="simple">
<li><p><strong>多个服务基准测试(YAML 配置)</strong></p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ros2</span> <span class="n">run</span> <span class="n">orbbec_camera</span> <span class="n">service_benchmark_node</span> \
<span class="o">--</span><span class="n">ros</span><span class="o">-</span><span class="n">args</span> \
<span class="o">-</span><span class="n">p</span> <span class="n">yaml_file</span><span class="o">:=/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">default_service_cpp</span><span class="o">.</span><span class="n">yaml</span>
</pre></div>
</div>
</section>
<section id="ros2-python">
<h3>ROS2 Python<a class="headerlink" href="#ros2-python" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><strong>单个服务基准测试</strong></p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ros2</span> <span class="n">run</span> <span class="n">orbbec_camera</span> <span class="n">service_benchmark_node</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">service</span> <span class="o">/</span><span class="n">camera</span><span class="o">/</span><span class="n">get_depth_gain</span> <span class="o">--</span><span class="n">count</span> <span class="mi">10</span>
</pre></div>
</div>
<ul class="simple">
<li><p><strong>多个服务基准测试(YAML 配置)</strong></p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ros2</span> <span class="n">run</span> <span class="n">orbbec_camera</span> <span class="n">service_benchmark_node</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">yaml_file</span> <span class="o">/</span><span class="n">path</span><span class="o">/</span><span class="n">to</span><span class="o">/</span><span class="n">default_service</span><span class="o">.</span><span class="n">yaml</span>
</pre></div>
</div>
</section>
<section id="yaml">
<h3><strong>示例 YAML 配置</strong><a class="headerlink" href="#yaml" title="Link to this heading"></a></h3>
<p>我们提供了一个示例 YAML 配置,位于 <code class="docutils literal notranslate"><span class="pre">scripts</span></code> 目录中,名为 <code class="docutils literal notranslate"><span class="pre">service_default.yaml</span></code>。</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">default_count</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">50</span>
<span class="nt">services</span><span class="p">:</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_auto_white_balance</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetInt32</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_color_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetInt32</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_color_gain</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetInt32</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_depth_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetInt32</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_depth_gain</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetInt32</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/get_device_info</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/GetDeviceInfo</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/send_software_trigger</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_auto_white_balance</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_ae_roi</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetArrays</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data_param</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">0</span><span class="p p-Indicator">,</span><span class="nv">1279</span><span class="p p-Indicator">,</span><span class="nv">0</span><span class="p p-Indicator">,</span><span class="nv">719</span><span class="p p-Indicator">]}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_auto_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetInt32</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">30</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_flip</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_gain</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetInt32</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">20</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_mirror</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_color_rotation</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetInt32</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">90</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_depth_ae_roi</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetArrays</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data_param</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">0</span><span class="p p-Indicator">,</span><span class="nv">1279</span><span class="p p-Indicator">,</span><span class="nv">0</span><span class="p p-Indicator">,</span><span class="nv">719</span><span class="p p-Indicator">]}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_depth_auto_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_depth_exposure</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetInt32</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">3000</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_depth_flip</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">std_srvs/srv/SetBool</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">false</span><span class="p p-Indicator">}</span>
<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/camera/set_depth_gain</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">orbbec_camera_msgs/srv/SetInt32</span>
<span class="w"> </span><span class="nt">request</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">{</span><span class="nt">data</span><span class="p">:</span><span class="w"> </span><span class="nv">200</span><span class="p p-Indicator">}</span>
</pre></div>
</div>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,140 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>介绍 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">介绍</a><ul>
<li><a class="reference internal" href="#id2">通用基准测试节点</a></li>
<li><a class="reference internal" href="#id3">服务基准测试节点</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">介绍</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/6_benchmark/introduction.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>介绍<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本节介绍性能基准测试工具,解释其目的、功能以及它可以帮助您测量的内容。</p>
<section id="id2">
<h2>通用基准测试节点<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">common_benchmark_node.py</span></code> 是一个用于监控在 ROS 环境中运行的 Orbbec 相机性能的工具。它实时收集和记录关键相机指标,如帧率、延迟、系统资源使用和丢包率,帮助用户评估相机节点的稳定性和性能(每秒更新一次)。</p>
<p><strong>功能</strong></p>
<ul class="simple">
<li><p>测量发布的图像帧率和延迟(当前、最小、最大、平均)</p></li>
<li><p>监控相机节点的 CPU/ARM 使用率(当前、最小、最大、平均)</p></li>
<li><p>跟踪丢帧率(发布者)和丢包率(订阅者)</p></li>
<li><p>将实时统计信息(1 Hz)打印到终端并将结果保存到 CSV 文件</p></li>
<li><p>支持可配置的运行时长和 CSV 输出路径</p></li>
</ul>
<p><strong>示例</strong></p>
<p>在 ROS1 中,可以测量丢帧率和丢包率,而在 ROS2 中,header 缺少 <code class="docutils literal notranslate"><span class="pre">seq</span></code> 字段,因此仅计算发布者端的丢帧率。</p>
<p><img alt="common_benchmark_ros1" src="../../../_images/common_benchmark_ros1.png" /></p>
<p><img alt="common_benchmark_ros2" src="../../../_images/common_benchmark_ros2.png" /></p>
</section>
<section id="id3">
<h2>服务基准测试节点<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p><code class="docutils literal notranslate"><span class="pre">service_benchmark_node</span></code> 工具用于监控服务调用的性能。它可以测量服务调用的成功率和执行服务所需的时间。</p>
<p><strong>功能</strong></p>
<ul class="simple">
<li><p>对单个服务调用进行基准测试,测量延迟和成功率</p></li>
<li><p>对 YAML 配置文件中定义的多个服务进行基准测试</p></li>
<li><p>可选择将基准测试结果保存到 CSV 文件</p></li>
</ul>
<p><strong>示例</strong></p>
<p><img alt="service benchmark" src="../../../_images/service_benchmark.png" /></p>
<p>当您需要收集多个服务的数据时,建议使用 CSV 文件进行分析。</p>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,168 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>其他工具 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">其他工具</a><ul>
<li><a class="reference internal" href="#ob-benchmark">Ob_benchmark 工具</a><ul>
<li><a class="reference internal" href="#start-benchmark-params-json">工具配置 (start_benchmark_params.json)</a></li>
<li><a class="reference internal" href="#id2">相机配置(启动文件)</a></li>
<li><a class="reference internal" href="#id3">运行 ob_benchmark 工具</a></li>
<li><a class="reference internal" href="#id4">输出数据文件</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">其他工具</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/6_benchmark/othertools.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>其他工具<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<section id="ob-benchmark">
<h2>Ob_benchmark 工具<a class="headerlink" href="#ob-benchmark" title="Link to this heading"></a></h2>
<blockquote>
<div><p>此工具的目标是对各种 OrbbecSDK_ROS2 相机配置的性能进行基准测试。基准测试结果取决于使用的相机和设置。(目前仅适用于 ROS2 Humble)</p>
</div></blockquote>
<p>您可以在 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/v2-main/orbbec_camera/examples">example</a> 中找到示例使用代码。</p>
<section id="start-benchmark-params-json">
<h3>工具配置 (<a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/blob/v2-main/orbbec_camera/config/tools/startbenchmark/start_benchmark_params.json">start_benchmark_params.json</a>)<a class="headerlink" href="#start-benchmark-params-json" title="Link to this heading"></a></h3>
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;start_benchmark_params&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nt">&quot;camera_name&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w"> </span><span class="s2">&quot;camera_01&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;camera_02&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;camera_03&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="s2">&quot;camera_04&quot;</span>
<span class="w"> </span><span class="p">],</span>
<span class="w"> </span><span class="nt">&quot;process_name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;component_conta&quot;</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;switch_cycle&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">300</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;test_cycle&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w"> </span><span class="nt">&quot;skip_number&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</pre></div>
</div>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">camera_name</span></code>:要配置的相机名称。例如:<code class="docutils literal notranslate"><span class="pre">&quot;camera_01&quot;</span></code>、<code class="docutils literal notranslate"><span class="pre">&quot;camera_02&quot;</span></code> 等。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">process_name</span></code>:要监控的进程名称。例如,<code class="docutils literal notranslate"><span class="pre">&quot;component_conta&quot;</span></code> 将监控容器进程的数据。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">switch_cycle</span></code>:切换配置的周期时间,以秒为单位。例如,设置为 <code class="docutils literal notranslate"><span class="pre">300</span></code> 意味着配置将每 300 秒切换一次。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">test_cycle</span></code>:测试周期,以秒为单位。例如,设置为 <code class="docutils literal notranslate"><span class="pre">1</span></code> 意味着工具将每 1 秒收集一次监控进程的数据。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">skip_number</span></code>:要跳过的数据点数量。例如,设置为 <code class="docutils literal notranslate"><span class="pre">30</span></code> 意味着将忽略前 30 个数据点。</p></li>
</ul>
</section>
<section id="id2">
<h3>相机配置(启动文件)<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
<p>在 launch 文件夹中,有多个 .launch.py 文件(<code class="docutils literal notranslate"><span class="pre">ob_benchmark_0.launch.py</span></code>、<code class="docutils literal notranslate"><span class="pre">ob_benchmark_1.launch.py</span></code>、...、<code class="docutils literal notranslate"><span class="pre">ob_benchmark_19.launch.py</span></code>)。每个文件对应不同的相机配置。</p>
</section>
<section id="id3">
<h3>运行 ob_benchmark 工具<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<p>要运行该工具,请使用以下命令:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">source</span><span class="w"> </span>install/setup.bash
ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>ob_benchmark_node
</pre></div>
</div>
</section>
<section id="id4">
<h3>输出数据文件<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<p>输出数据文件将存储在 ob_benchmark 文件夹中,文件名如 <code class="docutils literal notranslate"><span class="pre">0.csv</span></code>、<code class="docutils literal notranslate"><span class="pre">1.csv</span></code>、...、19.csv。例如:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">0.csv</span></code> 包含来自 <code class="docutils literal notranslate"><span class="pre">ob_benchmark_0.launch.py</span></code> 配置的数据。</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">1.csv</span></code> 包含来自 <code class="docutils literal notranslate"><span class="pre">ob_benchmark_1.launch.py</span></code> 配置的数据。</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,146 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>构建 Debian 软件包 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">构建 Debian 软件包</a><ul>
<li><a class="reference internal" href="#id1">准备环境</a></li>
<li><a class="reference internal" href="#ros">配置 ROS 依赖项</a></li>
<li><a class="reference internal" href="#id2">构建软件包</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">构建 Debian 软件包</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/7_developer_guide/building_a_Debian_Package.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="debian">
<h1>构建 Debian 软件包<a class="headerlink" href="#debian" title="Link to this heading"></a></h1>
<section id="id1">
<h2>准备环境<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p>在开始之前,安装所需的工具:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>debhelper<span class="w"> </span>fakeroot<span class="w"> </span>python3-bloom
</pre></div>
</div>
</section>
<section id="ros">
<h2>配置 ROS 依赖项<a class="headerlink" href="#ros" title="Link to this heading"></a></h2>
<p>在系统中的 <code class="docutils literal notranslate"><span class="pre">/etc/ros/rosdep/sources.list.d/00-orbbec.yaml</span></code> 添加以下 YAML 文件。确保将 <code class="docutils literal notranslate"><span class="pre">focal</span></code> 替换为您的 Ubuntu 版本的代号,将 <code class="docutils literal notranslate"><span class="pre">humble</span></code> 替换为您的 ROS2 发行版名称:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">orbbec_camera_msgs</span><span class="p">:</span>
<span class="w"> </span><span class="nt">ubuntu</span><span class="p">:</span>
<span class="w"> </span><span class="nt">focal</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="w"> </span><span class="nv">ros-humble-orbbec-camera-msgs</span><span class="w"> </span><span class="p p-Indicator">]</span>
</pre></div>
</div>
<p>接下来,创建一个新文件 <code class="docutils literal notranslate"><span class="pre">/etc/ros/rosdep/sources.list.d/50-orbbec.list</span></code> 并添加此行以指定 YAML 文件的路径:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>yaml<span class="w"> </span>file:///etc/ros/rosdep/sources.list.d/00-orbbec.yaml
</pre></div>
</div>
<p>更新 rosdep 数据库以反映这些更改:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>rosdep<span class="w"> </span>update
</pre></div>
</div>
</section>
<section id="id2">
<h2>构建软件包<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>导航到您的工作空间并构建项目:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="nb">cd</span><span class="w"> </span>~/ros2_ws/
colcon<span class="w"> </span>build<span class="w"> </span>--event-handlers<span class="w"> </span>console_direct+<span class="w"> </span>--cmake-args<span class="w"> </span>-DCMAKE_BUILD_TYPE<span class="o">=</span>Release
.<span class="w"> </span>install/setup.bash
<span class="nb">cd</span><span class="w"> </span>src/OrbbecSDK_ROS2/
bash<span class="w"> </span>.make_deb.sh
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>开发者指南 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">开发者指南</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">开发者指南</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/7_developer_guide/developer_guide.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>开发者指南<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<p>本章为 SDK 的开发人员和维护人员提供文档。</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="migration_guide.html">从 main 分支迁移到开源 v2-main 分支</a><ul>
<li class="toctree-l2"><a class="reference internal" href="migration_guide.html#id1">引言</a></li>
<li class="toctree-l2"><a class="reference internal" href="migration_guide.html#id2">从 main 迁移到 v2-main 的优势</a></li>
<li class="toctree-l2"><a class="reference internal" href="migration_guide.html#id7">main 和 v2-main 分支的比较</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="building_a_Debian_Package.html">构建 Debian 软件包</a><ul>
<li class="toctree-l2"><a class="reference internal" href="building_a_Debian_Package.html#id1">准备环境</a></li>
<li class="toctree-l2"><a class="reference internal" href="building_a_Debian_Package.html#ros">配置 ROS 依赖项</a></li>
<li class="toctree-l2"><a class="reference internal" href="building_a_Debian_Package.html#id2">构建软件包</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
@@ -0,0 +1,955 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>从 main 分支迁移到开源 v2-main 分支 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">从 main 分支迁移到开源 v2-main 分支</a><ul>
<li><a class="reference internal" href="#id1">引言</a></li>
<li><a class="reference internal" href="#id2">从 main 迁移到 v2-main 的优势</a><ul>
<li><a class="reference internal" href="#id3"><strong>全面的设备支持</strong></a></li>
<li><a class="reference internal" href="#id4"><strong>透明性和可扩展性</strong></a></li>
<li><a class="reference internal" href="#id5">维护和更新优势</a></li>
<li><a class="reference internal" href="#id6"><strong>社区和生态系统支持</strong></a></li>
</ul>
</li>
<li><a class="reference internal" href="#id7">main 和 v2-main 分支的比较</a><ul>
<li><a class="reference internal" href="#id8"><strong>启动文件差异</strong></a></li>
<li><a class="reference internal" href="#id9"><strong>参数差异</strong></a></li>
<li><a class="reference internal" href="#id10"><strong>话题差异</strong></a></li>
<li><a class="reference internal" href="#id11"><strong>服务差异</strong></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">从 main 分支迁移到开源 v2-main 分支</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/7_developer_guide/migration_guide.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="main-v2-main">
<h1>从 main 分支迁移到开源 v2-main 分支<a class="headerlink" href="#main-v2-main" title="Link to this heading"></a></h1>
<section id="id1">
<h2>引言<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
<p>最初,奥比中光提供了一个<strong>闭源 SDK — Orbbec SDK v1</strong>,它构成了 <a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2/tree/main">OrbbecSDK ROS2 Wrapper main 分支</a>的基础。虽然 ROS 封装层本身是开源的,但它依赖于闭源的底层 SDK。这种架构限制了灵活性,阻碍了社区驱动的改进。</p>
<p>随着开发者越来越需要透明性、可维护性和更广泛的设备支持,奥比中光发布了全新的开源 v2-main <strong>— Orbbec SDK_v2</strong> (<a class="reference external" href="https://github.com/orbbec/OrbbecSDK/tree/v2-main">GitHub 链接</a>)。基于此 SDK,<a class="reference external" href="https://github.com/orbbec/OrbbecSDK_ROS2">OrbbecSDK ROS2 的开源 v2-main 分支</a>现在完全开源,提供了更好的可扩展性,并与奥比中光未来的产品路线图保持一致。</p>
<p>本文档介绍了将 ROS 包从 main 分支(基于 SDK v1)迁移到 v2-main 分支(基于 Orbbec SDK_v2)的动机和好处。它重点介绍了<strong>启动文件、参数、话题和服务</strong>的主要差异,并提供迁移指南帮助开发者顺利过渡。</p>
<p><strong>注意:</strong> 在以下内容中,<strong>main</strong> 指闭源分支,而 <strong>v2-main</strong> 指开源 v2-main 分支。</p>
</section>
<section id="id2">
<h2>从 main 迁移到 v2-main 的优势<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>2024年10月,奥比中光发布了重大更新:<strong>OrbbecSDK ROS2 Wrapper v2</strong>,它完全基于开源的 Orbbec SDK_v2。与传统的 main 分支(SDK v1.x)相比,v2-main 分支(Orbbec SDK_v2.x)提供了更大的灵活性和可扩展性,同时为所有符合 UVC 标准的奥比中光 USB 产品提供全面支持。从 main --&gt; v2-main 的迁移带来以下关键优势:</p>
<section id="id3">
<h3><strong>全面的设备支持</strong><a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
<p>v2-main 分支支持所有符合 UVC 标准的奥比中光 USB 相机,并将成为支持所有新发布设备的主要平台。</p>
</section>
<section id="id4">
<h3><strong>透明性和可扩展性</strong><a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
<p>Orbbec SDK_v2 完全开源,允许开发者直接访问底层实现,便于调试、优化和二次开发。相比之下,SDK v1 是闭源的,引入了&quot;黑盒&quot;约束。</p>
</section>
<section id="id5">
<h3>维护和更新优势<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
<p>v2-main 分支提供全功能支持,包括新功能开发、性能优化和错误修复。main 分支已进入仅维护模式,只有关键错误可能获得有限更新,不再开发新功能。</p>
</section>
<section id="id6">
<h3><strong>社区和生态系统支持</strong><a class="headerlink" href="#id6" title="Link to this heading"></a></h3>
<p>有了开源 SDK,开发者可以直接在 GitHub 或 Gitee 上提交问题和拉取请求,为功能演进做出贡献。这不仅加速了问题解决,还促进了更开放和活跃的奥比中光生态系统。</p>
</section>
</section>
<section id="id7">
<h2>main 和 v2-main 分支的比较<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
<section id="id8">
<h3><strong>启动文件差异</strong><a class="headerlink" href="#id8" title="Link to this heading"></a></h3>
<ol class="simple">
<li><p>在 v2-main 中,为 Gemini 330 系列添加了新的低功耗启动文件:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">gemini_330_series_low_cpu.launch.py</span></code></p></li>
</ul>
</li>
<li><p>v2-main 引入了对 <strong>Gemini 435Le</strong>、<strong>Gemini 345</strong> 和 <strong>Gemini 345Lg</strong> 相机的支持。</p></li>
<li><p>由于 <strong>OrbbecSDK_v2 仅支持 UVC 设备</strong>,v2-main 中支持的相机型号范围比 main 略窄。详细信息见下表。</p></li>
</ol>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>相机</strong></th>
<th><strong>main</strong></th>
<th><strong>v2-main</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Gemini 435Le</td>
<td>不支持</td>
<td>gemini435_le.launch.py</td>
</tr>
<tr>
<td>Gemini 345</td>
<td>不支持</td>
<td>gemini345.launch.py</td>
</tr>
<tr>
<td>Gemini 345Lg</td>
<td>不支持</td>
<td>gemini345_lg.launch.py</td>
</tr>
<tr>
<td>Gemini 330 系列</td>
<td>gemini_330_series.launch.py</td>
<td>gemini_330_series.launch.py</td>
</tr>
<tr>
<td>Gemini 330 低CPU</td>
<td>-</td>
<td>gemini_330_series_low_cpu.launch.py</td>
</tr>
<tr>
<td>Gemini 210</td>
<td>gemini210.launch.py</td>
<td>gemini210.launch.py</td>
</tr>
<tr>
<td>Gemini 2</td>
<td>gemini2.launch.py</td>
<td>gemini2.launch.py</td>
</tr>
<tr>
<td>Gemini 2L</td>
<td>gemini2L.launch.py</td>
<td>gemini2.launch.py</td>
</tr>
<tr>
<td>Gemini 2XL</td>
<td>gemini2XL.launch.py</td>
<td>-</td>
</tr>
<tr>
<td>Femto Bolt</td>
<td>femto_bolt.launch.py</td>
<td>femto_bolt.launch.py</td>
</tr>
<tr>
<td>Femto Mega</td>
<td>femto_mega.launch.py</td>
<td>femto_mega.launch.py</td>
</tr>
<tr>
<td>Femto</td>
<td>femto.launch.py</td>
<td>femto.launch.py</td>
</tr>
<tr>
<td>Astra 2</td>
<td>astra2.launch.py</td>
<td>astra2.launch.py</td>
</tr>
<tr>
<td>Astra</td>
<td>astra.launch.py</td>
<td>astra.launch.py</td>
</tr>
<tr>
<td>Astra Mini Pro / S Pro</td>
<td>astra_mini_pro.launch.py ...</td>
<td>astra.launch.py</td>
</tr>
<tr>
<td>多相机(同步)</td>
<td>multi_camera_synced.launch.py</td>
<td>multi_camera_synced.launch.py</td>
</tr>
<tr>
<td>多相机(通用/通用)</td>
<td>multi_camera.launch.py</td>
<td>multi_camera.launch.py 或 orbbec_multicamera.launch.py</td>
</tr>
<tr>
<td>单相机通用启动</td>
<td>ob_camera.launch.py</td>
<td>orbbec_camera.launch.py</td>
</tr>
<tr>
<td>OpenNI 设备(大白、得雅)</td>
<td>对应型号独立文件</td>
<td>不支持</td>
</tr>
</tbody>
</table></section>
<section id="id9">
<h3><strong>参数差异</strong><a class="headerlink" href="#id9" title="Link to this heading"></a></h3>
<p><strong>v2-main 中的新参数(main 中不可用)</strong></p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>参数名称</strong></th>
<th><strong>main</strong></th>
<th><strong>v2-main</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>upgrade_firmware</td>
<td>-</td>
<td>已添加</td>
<td>固件升级路径</td>
</tr>
<tr>
<td>preset_firmware_path</td>
<td>-</td>
<td>已添加</td>
<td>预设固件文件路径</td>
</tr>
<tr>
<td>load_config_json_file_path</td>
<td>-</td>
<td>已添加</td>
<td>加载 JSON 配置</td>
</tr>
<tr>
<td>export_config_json_file_path</td>
<td>-</td>
<td>已添加</td>
<td>导出 JSON 配置</td>
</tr>
<tr>
<td>uvc_backend</td>
<td>-</td>
<td>已添加</td>
<td>libuvc / v4l2 后端选择</td>
</tr>
<tr>
<td>enable_color_auto_exposure_priority</td>
<td>-</td>
<td>已添加</td>
<td>AE 优先级控制</td>
</tr>
<tr>
<td>color_flip</td>
<td>-</td>
<td>已添加</td>
<td>彩色图像垂直翻转</td>
</tr>
<tr>
<td>color_mirror</td>
<td>-</td>
<td>已添加</td>
<td>彩色图像水平镜像</td>
</tr>
<tr>
<td>depth_flip</td>
<td>-</td>
<td>已添加</td>
<td>深度图像垂直翻转</td>
</tr>
<tr>
<td>depth_mirror</td>
<td>-</td>
<td>已添加</td>
<td>深度图像水平镜像</td>
</tr>
<tr>
<td>left_ir_flip</td>
<td>-</td>
<td>已添加</td>
<td>左红外垂直翻转</td>
</tr>
<tr>
<td>left_ir_mirror</td>
<td>-</td>
<td>已添加</td>
<td>左红外水平镜像</td>
</tr>
<tr>
<td>right_ir_flip</td>
<td>-</td>
<td>已添加</td>
<td>右红外垂直翻转</td>
</tr>
<tr>
<td>right_ir_mirror</td>
<td>-</td>
<td>已添加</td>
<td>右红外水平镜像</td>
</tr>
<tr>
<td>enable_left_ir_sequence_id_filter</td>
<td>-</td>
<td>已添加</td>
<td>左红外序列 ID 滤波器</td>
</tr>
<tr>
<td>enable_right_ir_sequence_id_filter</td>
<td>-</td>
<td>已添加</td>
<td>右红外序列 ID 滤波器</td>
</tr>
<tr>
<td>enable_accel_data_correction</td>
<td>-</td>
<td>已添加</td>
<td>加速度计数据校正</td>
</tr>
<tr>
<td>enable_gyro_data_correction</td>
<td>-</td>
<td>已添加</td>
<td>陀螺仪数据校正</td>
</tr>
<tr>
<td>enumerate_net_device</td>
<td>-</td>
<td>已添加</td>
<td>自动枚举网络设备</td>
</tr>
<tr>
<td>net_device_ip</td>
<td>-</td>
<td>已添加</td>
<td>网络设备 IP 地址</td>
</tr>
<tr>
<td>net_device_port</td>
<td>-</td>
<td>已添加</td>
<td>网络设备端口</td>
</tr>
<tr>
<td>exposure_range_mode</td>
<td>-</td>
<td>已添加</td>
<td>曝光范围模式:default / ultimate / regular</td>
</tr>
<tr>
<td>disparity_to_depth_mode</td>
<td>-</td>
<td>已添加</td>
<td>硬件视差到深度转换</td>
</tr>
<tr>
<td>ldp_power_level</td>
<td>-</td>
<td>已添加</td>
<td>LDP 功率级别</td>
</tr>
<tr>
<td>time_sync_period</td>
<td>-</td>
<td>已添加</td>
<td>时间同步周期</td>
</tr>
<tr>
<td>gmsl_trigger_fps</td>
<td>-</td>
<td>已添加</td>
<td>GMSL 触发帧率</td>
</tr>
<tr>
<td>enable_gmsl_trigger</td>
<td>-</td>
<td>已添加</td>
<td>GMSL 触发启用</td>
</tr>
<tr>
<td>disparity_range_mode</td>
<td>-</td>
<td>已添加</td>
<td>视差范围模式</td>
</tr>
<tr>
<td>disparity_search_offset</td>
<td>-</td>
<td>已添加</td>
<td>视差搜索偏移</td>
</tr>
<tr>
<td>disparity_offset_config</td>
<td>-</td>
<td>已添加</td>
<td>视差偏移配置</td>
</tr>
<tr>
<td>offset_index0</td>
<td>-</td>
<td>已添加</td>
<td>视差偏移索引 0</td>
</tr>
<tr>
<td>offset_index1</td>
<td>-</td>
<td>已添加</td>
<td>视差偏移索引 1</td>
</tr>
<tr>
<td>interleave_ae_mode</td>
<td>-</td>
<td>已添加</td>
<td>AE 交错模式</td>
</tr>
<tr>
<td>interleave_frame_enable</td>
<td>-</td>
<td>已添加</td>
<td>交错帧启用</td>
</tr>
<tr>
<td>interleave_skip_enable</td>
<td>-</td>
<td>已添加</td>
<td>跳过红外帧启用</td>
</tr>
<tr>
<td>interleave_skip_index</td>
<td>-</td>
<td>已添加</td>
<td>跳过红外帧索引</td>
</tr>
<tr>
<td>hdr_index1_laser_control</td>
<td>-</td>
<td>已添加</td>
<td>HDR 激光控制参数</td>
</tr>
<tr>
<td>hdr_index1_depth_exposure</td>
<td>-</td>
<td>已添加</td>
<td>HDR 深度曝光</td>
</tr>
<tr>
<td>hdr_index1_depth_gain</td>
<td>-</td>
<td>已添加</td>
<td>HDR 深度增益</td>
</tr>
<tr>
<td>hdr_index1_ir_brightness</td>
<td>-</td>
<td>已添加</td>
<td>HDR 红外亮度</td>
</tr>
<tr>
<td>hdr_index1_ir_ae_max_exposure</td>
<td>-</td>
<td>已添加</td>
<td>HDR 红外最大 AE</td>
</tr>
<tr>
<td>hdr_index0_laser_control</td>
<td>-</td>
<td>已添加</td>
<td>HDR 激光控制参数</td>
</tr>
<tr>
<td>hdr_index0_depth_exposure</td>
<td>-</td>
<td>已添加</td>
<td>HDR 深度曝光</td>
</tr>
<tr>
<td>hdr_index0_depth_gain</td>
<td>-</td>
<td>已添加</td>
<td>HDR 深度增益</td>
</tr>
<tr>
<td>hdr_index0_ir_brightness</td>
<td>-</td>
<td>已添加</td>
<td>HDR 红外亮度</td>
</tr>
<tr>
<td>hdr_index0_ir_ae_max_exposure</td>
<td>-</td>
<td>已添加</td>
<td>HDR 红外最大 AE</td>
</tr>
<tr>
<td>laser_index1_laser_control</td>
<td>-</td>
<td>已添加</td>
<td>激光交错控制</td>
</tr>
<tr>
<td>laser_index1_depth_exposure</td>
<td>-</td>
<td>已添加</td>
<td>激光深度曝光</td>
</tr>
<tr>
<td>laser_index1_depth_gain</td>
<td>-</td>
<td>已添加</td>
<td>激光深度增益</td>
</tr>
<tr>
<td>laser_index1_ir_brightness</td>
<td>-</td>
<td>已添加</td>
<td>激光红外亮度</td>
</tr>
<tr>
<td>laser_index1_ir_ae_max_exposure</td>
<td>-</td>
<td>已添加</td>
<td>激光红外最大 AE</td>
</tr>
<tr>
<td>laser_index0_laser_control</td>
<td>-</td>
<td>已添加</td>
<td>激光交错控制</td>
</tr>
<tr>
<td>laser_index0_depth_exposure</td>
<td>-</td>
<td>已添加</td>
<td>激光深度曝光</td>
</tr>
<tr>
<td>laser_index0_depth_gain</td>
<td>-</td>
<td>已添加</td>
<td>激光深度增益</td>
</tr>
<tr>
<td>laser_index0_ir_brightness</td>
<td>-</td>
<td>已添加</td>
<td>激光红外亮度</td>
</tr>
<tr>
<td>laser_index0_ir_ae_max_exposure</td>
<td>-</td>
<td>已添加</td>
<td>激光红外最大 AE</td>
</tr>
<tr>
<td>software_trigger_enabled</td>
<td>-</td>
<td>已添加</td>
<td>软件触发启用</td>
</tr>
<tr>
<td>enable_ptp_config</td>
<td>-</td>
<td>已添加</td>
<td>PTP 配置(Gemini 335Le)</td>
</tr>
<tr>
<td>align_target_stream</td>
<td>-</td>
<td>已添加</td>
<td>对齐目标流</td>
</tr>
<tr>
<td>spatial_fast_filter_radius</td>
<td>-</td>
<td>已添加</td>
<td>快速空间滤波器半径</td>
</tr>
<tr>
<td>spatial_moderate_filter_diff_threshold</td>
<td>-</td>
<td>已添加</td>
<td>中等空间滤波器差异阈值</td>
</tr>
<tr>
<td>spatial_moderate_filter_magnitude</td>
<td>-</td>
<td>已添加</td>
<td>中等空间滤波器幅度</td>
</tr>
<tr>
<td>spatial_moderate_filter_radius</td>
<td>-</td>
<td>已添加</td>
<td>中等空间滤波器半径</td>
</tr>
<tr>
<td>color.image_raw.enable_pub_plugins</td>
<td>-</td>
<td>已添加</td>
<td>彩色图像传输插件</td>
</tr>
<tr>
<td>depth.image_raw.enable_pub_plugins</td>
<td>-</td>
<td>已添加</td>
<td>深度图像传输插件</td>
</tr>
<tr>
<td>left_ir.image_raw.enable_pub_plugins</td>
<td>-</td>
<td>已添加</td>
<td>左红外传输插件</td>
</tr>
<tr>
<td>right_ir.image_raw.enable_pub_plugins</td>
<td>-</td>
<td>已添加</td>
<td>右红外传输插件</td>
</tr>
<tr>
<td>force_ip_enable</td>
<td>-</td>
<td>已添加</td>
<td>强制 IP 功能</td>
</tr>
<tr>
<td>force_ip_mac</td>
<td>-</td>
<td>已添加</td>
<td>强制 IP MAC 地址</td>
</tr>
<tr>
<td>force_ip_dhcp</td>
<td>-</td>
<td>已添加</td>
<td>DHCP 自动分配</td>
</tr>
<tr>
<td>force_ip_address</td>
<td>-</td>
<td>已添加</td>
<td>强制 IP 静态地址</td>
</tr>
<tr>
<td>force_ip_subnet_mask</td>
<td>-</td>
<td>已添加</td>
<td>强制 IP 子网掩码</td>
</tr>
<tr>
<td>force_ip_gateway</td>
<td>-</td>
<td>已添加</td>
<td>强制 IP 网关</td>
</tr>
</tbody>
</table><p><strong>已移除参数(仅 main 有,v2-main 中已移除)</strong></p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>参数</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>enable_3d_reconstruction_mode</td>
<td>3D 重建模式已弃用</td>
</tr>
<tr>
<td>enable_hardware_reset</td>
<td>硬件重置接口已弃用</td>
</tr>
<tr>
<td>enable_hardware_noise_removal_filter</td>
<td>硬件噪声去除滤波器已弃用</td>
</tr>
<tr>
<td>laser_on_off_mode</td>
<td>旧激光开关接口,由 interleave / laser_index 替换</td>
</tr>
<tr>
<td>enable_3d_reconstruction_mode</td>
<td>3D 重建模式重复;v2-main 中不再使用</td>
</tr>
<tr>
<td>device_preset</td>
<td>部分逻辑迁移到新固件 / 交错参数</td>
</tr>
<tr>
<td>enable_trigger_out</td>
<td>旧软件触发接口由 software_trigger_enabled 替换</td>
</tr>
<tr>
<td>retry_on_usb3_detection_failure</td>
<td>可选;v2-main 中逻辑已调整或移除</td>
</tr>
<tr>
<td>enable_color_undistortion</td>
<td>旧接口逻辑集成到其他地方;v2-main 中仍存在但使用可能已调整</td>
</tr>
</tbody>
</table></section>
<section id="id10">
<h3><strong>话题差异</strong><a class="headerlink" href="#id10" title="Link to this heading"></a></h3>
<p><strong>v2-main</strong> 在 main 基础上添加了以下话题:</p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>话题</strong></th>
<th><strong>main</strong></th>
<th><strong>v2-main</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>/camera/device_status</td>
<td>-</td>
<td>已添加</td>
<td>发布设备状态(帧率延迟、设备连接状态等)</td>
</tr>
</tbody>
</table></section>
<section id="id11">
<h3><strong>服务差异</strong><a class="headerlink" href="#id11" title="Link to this heading"></a></h3>
<p><strong>v2-main</strong> 在 main 基础上添加了以下服务:</p>
<table border="1" class="docutils">
<thead>
<tr>
<th><strong>服务</strong></th>
<th><strong>main</strong></th>
<th><strong>v2-main</strong></th>
<th><strong>描述</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>get_ptp_config</td>
<td>-</td>
<td>已添加</td>
<td>获取 PTP 配置</td>
</tr>
<tr>
<td>set_ptp_config</td>
<td>-</td>
<td>已添加</td>
<td>设置 PTP 配置</td>
</tr>
<tr>
<td>get_streams_enable</td>
<td>-</td>
<td>已添加</td>
<td>获取每个流的启用状态</td>
</tr>
<tr>
<td>set_streams_enable</td>
<td>-</td>
<td>已添加</td>
<td>设置每个流的启用状态</td>
</tr>
<tr>
<td>get_user_calib_params</td>
<td>-</td>
<td>已添加</td>
<td>获取用户校准参数</td>
</tr>
<tr>
<td>set_user_calib_params</td>
<td>-</td>
<td>已添加</td>
<td>设置用户校准参数</td>
</tr>
<tr>
<td>read_customer_data</td>
<td>-</td>
<td>已添加</td>
<td>读取用户存储的自定义数据</td>
</tr>
<tr>
<td>write_customer_data</td>
<td>-</td>
<td>已添加</td>
<td>写入用户存储的自定义数据</td>
</tr>
<tr>
<td>send_software_trigger</td>
<td>-</td>
<td>已添加</td>
<td>发送软件触发</td>
</tr>
<tr>
<td>set_color_ae_roi</td>
<td>-</td>
<td>已添加</td>
<td>设置彩色图像的 AE ROI</td>
</tr>
<tr>
<td>set_depth_ae_roi</td>
<td>-</td>
<td>已添加</td>
<td>设置深度图像的 AE ROI</td>
</tr>
<tr>
<td>set_color_flip</td>
<td>-</td>
<td>已添加</td>
<td>设置彩色图像垂直翻转</td>
</tr>
<tr>
<td>set_depth_flip</td>
<td>-</td>
<td>已添加</td>
<td>设置深度图像垂直翻转</td>
</tr>
<tr>
<td>set_color_rotation</td>
<td>-</td>
<td>已添加</td>
<td>设置彩色图像旋转</td>
</tr>
<tr>
<td>set_depth_rotation</td>
<td>-</td>
<td>已添加</td>
<td>设置深度图像旋转</td>
</tr>
<tr>
<td>set_left_ir_ae_roi</td>
<td>-</td>
<td>已添加</td>
<td>设置左红外的 AE ROI</td>
</tr>
<tr>
<td>set_right_ir_ae_roi</td>
<td>-</td>
<td>已添加</td>
<td>设置右红外的 AE ROI</td>
</tr>
<tr>
<td>set_left_ir_flip</td>
<td>-</td>
<td>已添加</td>
<td>左红外垂直翻转</td>
</tr>
<tr>
<td>set_right_ir_flip</td>
<td>-</td>
<td>已添加</td>
<td>右红外垂直翻转</td>
</tr>
<tr>
<td>set_left_ir_rotation</td>
<td>-</td>
<td>已添加</td>
<td>左红外旋转</td>
</tr>
<tr>
<td>set_right_ir_rotation</td>
<td>-</td>
<td>已添加</td>
<td>右红外旋转</td>
</tr>
<tr>
<td>set_reset_timestamp</td>
<td>-</td>
<td>已添加</td>
<td>重置时间戳</td>
</tr>
<tr>
<td>set_sync_hosttime</td>
<td>-</td>
<td>已添加</td>
<td>同步主机时间</td>
</tr>
<tr>
<td>set_sync_interleaverlaser</td>
<td>-</td>
<td>已添加</td>
<td>交错激光同步</td>
</tr>
<tr>
<td>set_filter</td>
<td>-</td>
<td>已添加</td>
<td>设置深度/点云滤波器</td>
</tr>
</tbody>
</table></section>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
+191
View File
@@ -0,0 +1,191 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>常见问题 &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../../_static/translations.js?v=beaddf03"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../../genindex.html" />
<link rel="search" title="搜索" href="../../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">常见问题</a><ul>
<li><a class="reference internal" href="#id2">意外崩溃</a></li>
<li><a class="reference internal" href="#id3">多相机无数据流</a></li>
<li><a class="reference internal" href="#id4">其他故障排除</a></li>
<li><a class="reference internal" href="#id5">为什么有这么多启动文件?</a></li>
<li><a class="reference internal" href="#id6">多相机连接时如何指定启动某一个相机</a></li>
<li><a class="reference internal" href="#id7">多相机启动或切换流时为什么需要设置延迟?</a></li>
<li><a class="reference internal" href="#femto-bolt">femto bolt 深度流无数据</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">常见问题</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/source/camera_devices/8_FAQ/FAQ.md.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="id1">
<h1>常见问题<a class="headerlink" href="#id1" title="Link to this heading"></a></h1>
<section id="id2">
<h2>意外崩溃<a class="headerlink" href="#id2" title="Link to this heading"></a></h2>
<p>如果相机节点意外崩溃,它将在当前运行目录中生成崩溃日志:<code class="docutils literal notranslate"><span class="pre">Log/camera_crash_stack_trace_xx.log</span></code>。请将此日志发送给支持团队或提交到GitHub issue以获得进一步帮助。</p>
</section>
<section id="id3">
<h2>多相机无数据流<a class="headerlink" href="#id3" title="Link to this heading"></a></h2>
<p><strong>电源供应不足</strong>:</p>
<ul class="simple">
<li><p>确保每个相机连接到单独的集线器。</p></li>
<li><p>使用有源集线器为每个相机提供足够的电力。</p></li>
</ul>
<p><strong>高分辨率</strong>:</p>
<ul class="simple">
<li><p>尝试降低分辨率以解决数据流问题。</p></li>
</ul>
<p><strong>增加usbfs_memory_mb值</strong>:</p>
<ul class="simple">
<li><p>通过运行以下命令将 <code class="docutils literal notranslate"><span class="pre">usbfs_memory_mb</span></code> 值增加到128MB(这是参考值,可根据系统需求调整):</p></li>
</ul>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">echo</span> <span class="mi">128</span> <span class="o">|</span> <span class="n">sudo</span> <span class="n">tee</span> <span class="o">/</span><span class="n">sys</span><span class="o">/</span><span class="n">module</span><span class="o">/</span><span class="n">usbcore</span><span class="o">/</span><span class="n">parameters</span><span class="o">/</span><span class="n">usbfs_memory_mb</span>
</pre></div>
</div>
<ul class="simple">
<li><p>要使此更改永久生效,请查看<a class="reference external" href="https://github.com/OpenKinect/libfreenect2/issues/807">此链接</a>。</p></li>
</ul>
</section>
<section id="id4">
<h2>其他故障排除<a class="headerlink" href="#id4" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>如果遇到其他问题,将 <code class="docutils literal notranslate"><span class="pre">log_level</span></code> 参数设置为 <code class="docutils literal notranslate"><span class="pre">debug</span></code>。这将在运行目录中生成SDK日志文件:<code class="docutils literal notranslate"><span class="pre">Log/OrbbecSDK.log.txt</span></code>。请将此文件提供给支持团队以获得进一步帮助。</p></li>
<li><p>如果需要固件日志,将 <code class="docutils literal notranslate"><span class="pre">enable_heartbeat</span></code> 设置为 <code class="docutils literal notranslate"><span class="pre">true</span></code> 以激活此功能。</p></li>
</ul>
</section>
<section id="id5">
<h2>为什么有这么多启动文件?<a class="headerlink" href="#id5" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>不同的相机具有不同的默认分辨率和图像格式。</p></li>
<li><p>为简化使用,每个相机都有自己的启动文件。</p></li>
</ul>
</section>
<section id="id6">
<h2>多相机连接时如何指定启动某一个相机<a class="headerlink" href="#id6" title="Link to this heading"></a></h2>
<p>如果启动文件未显式指定要使用的设备,在同时连接多台相机时,驱动会默认连接到其中一个(默认设备)。</p>
<p>可以先通过以下命令查看设备序列号:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>run<span class="w"> </span>orbbec_camera<span class="w"> </span>list_devices_node
</pre></div>
</div>
<p>然后在启动时显式指定序列号,例如:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>ros2<span class="w"> </span>launch<span class="w"> </span>orbbec_camera<span class="w"> </span>femto_bolt.launch.py<span class="w"> </span>serial_number:<span class="o">=</span>CL8H741005J
</pre></div>
</div>
</section>
<section id="id7">
<h2>多相机启动或切换流时为什么需要设置延迟?<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
<p>多相机系统对带宽和设备初始化时序要求较高。如果在同一时间启动或切换多个相机流,可能会引发带宽瞬时拥塞,进而导致设备初始化失败、流启动异常或丢帧等问题。为确保系统稳定性,建议注意以下几点:</p>
<ul>
<li><p><strong>多相机启动阶段</strong></p>
<p>在启动多个相机时,建议在每个相机启动之间增加适当的延迟(例如 <strong>2s</strong>),以避免瞬时带宽过载或底层设备初始化冲突。</p>
</li>
<li><p><strong>流开关与模式切换阶段</strong></p>
<p>在调用开关流相关服务(如 <code class="docutils literal notranslate"><span class="pre">set_streams_enable</span></code>、<code class="docutils literal notranslate"><span class="pre">toggle_depth</span></code>、<code class="docutils literal notranslate"><span class="pre">toggle_color</span></code>)时,不建议同时触发多个接口调用,应在各操作之间设置合理的时间间隔(例如 <strong>20 ms</strong>),以保证流状态切换的可靠性。</p>
</li>
</ul>
<p>遵循上述时序控制原则,有助于提升多相机系统在启动和运行过程中的稳定性,减少异常和不可预期行为的发生。</p>
</section>
<section id="femto-bolt">
<h2>femto bolt 深度流无数据<a class="headerlink" href="#femto-bolt" title="Link to this heading"></a></h2>
<p>该模组运行时依赖 OpenGL 库,若系统未安装或驱动不完整,将导致深度流无数据。请先安装 OpenGL 相关库(以 Ubuntu 为例):</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>update<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>sudo<span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>-y<span class="w"> </span>mesa-utils<span class="w"> </span>libgl1-mesa-glx<span class="w"> </span>libglu1-mesa
</pre></div>
</div>
<p>安装后可通过以下命令检查 OpenGL 是否可用:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="w"> </span>glxinfo<span class="w"> </span>-B
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>
+108
View File
@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Camera Devices &mdash; OrbbecSDK V2 ROS2 封装 文档</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="../../_static/custom.css?v=63de077d" />
<link rel="shortcut icon" href="../../_static/orbbec_footerlogo_3d_world.svg"/>
<script src="../../_static/jquery.js?v=5d32c60e"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="../../_static/documentation_options.js?v=7d86a446"></script>
<script src="../../_static/doctools.js?v=9bcbadda"></script>
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="../../_static/translations.js?v=beaddf03"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
OrbbecSDK V2 ROS2 封装
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
<!-- Local TOC -->
<div class="local-toc"><ul>
<li><a class="reference internal" href="#">Camera Devices</a></li>
</ul>
</div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">OrbbecSDK V2 ROS2 封装</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="页面导航">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Camera Devices</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/source/camera_devices/index.rst.txt" rel="nofollow"> 查看页面源码</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="lang-switch" style="margin:0 0 1em 0; font-size:0.9em;"><a class="lang-other" href="#">English</a> | <a class="lang-current" href="#">中文</a></div><script>(function(){var p=window.location.pathname;var isEn=p.indexOf('/en/')!==-1 && p.indexOf('/zh/')===-1;if(p.indexOf('/zh/')!==-1) isEn=false;var other = isEn ? p.replace(/\/en\//, '/zh/') : p.replace(/\/zh\//, '/en/');var current=p;var sw=document.querySelector('.lang-switch'); if(!sw) return;var o=sw.querySelector('.lang-other'); var c=sw.querySelector('.lang-current');if(isEn){ o.textContent='中文'; c.textContent='English'; } else { o.textContent='English'; c.textContent='中文'; }o.setAttribute('href', other); c.setAttribute('href', current);})();</script><section id="camera-devices">
<h1>Camera Devices<a class="headerlink" href="#camera-devices" title="Link to this heading"></a></h1>
<div class="toctree-wrapper compound">
</div>
</section>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; 版权所有 2025, 奥比中光科技集团股份有限公司 www.orbbec.com.。
<span class="lastupdated">最后更新于 2026年01月04日 01:12:35.
</span></p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>