mirror of
https://github.com/PX4/PX4-Autopilot.git
synced 2026-03-24 02:24:09 +08:00
docs: Zenoh middleware guide (#25737)
Some checks failed
Build all targets / Scan for Board Targets (push) Has been cancelled
Build all targets / Build [${{ matrix.runner }}][${{ matrix.group }}] (push) Has been cancelled
Build all targets / Upload Artifacts (push) Has been cancelled
Checks / build (NO_NINJA_BUILD=1 px4_fmu-v5_default) (push) Has been cancelled
Checks / build (NO_NINJA_BUILD=1 px4_sitl_default) (push) Has been cancelled
Checks / build (check_format) (push) Has been cancelled
Checks / build (check_newlines) (push) Has been cancelled
Checks / build (module_documentation) (push) Has been cancelled
Checks / build (px4_fmu-v2_default stack_check) (push) Has been cancelled
Checks / build (px4_sitl_allyes) (push) Has been cancelled
Checks / build (shellcheck_all) (push) Has been cancelled
Checks / build (tests) (push) Has been cancelled
Checks / build (tests_coverage) (push) Has been cancelled
Checks / build (validate_module_configs) (push) Has been cancelled
Clang Tidy / build (push) Has been cancelled
MacOS build / build (px4_fmu-v5_default) (push) Has been cancelled
MacOS build / build (px4_sitl) (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:22.04) (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:24.04) (push) Has been cancelled
Container build / Set Tags and Variables (push) Has been cancelled
Container build / Build Container (amd64) (push) Has been cancelled
Container build / Build Container (arm64) (push) Has been cancelled
Container build / Deploy To Registry (push) Has been cancelled
EKF Update Change Indicator / unit_tests (push) Has been cancelled
Failsafe Simulator Build / build (failsafe_web) (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v5x (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v6x (push) Has been cancelled
FLASH usage analysis / Publish Results (push) Has been cancelled
ITCM check / Checking nxp_tropic-community (push) Has been cancelled
ITCM check / Checking px4_fmu-v5x (push) Has been cancelled
ITCM check / Checking px4_fmu-v6xrt (push) Has been cancelled
MAVROS Mission Tests / build (map[mission:MC_mission_box vehicle:iris]) (push) Has been cancelled
MAVROS Offboard Tests / build (map[test_file:mavros_posix_tests_offboard_posctl.test vehicle:iris]) (push) Has been cancelled
Nuttx Target with extra env config / build (px4_fmu-v5_default) (push) Has been cancelled
Python CI Checks / build (push) Has been cancelled
ROS Integration Tests / build (push) Has been cancelled
ROS Translation Node Tests / Build and test (map[ros_version:humble ubuntu:jammy]) (push) Has been cancelled
ROS Translation Node Tests / Build and test (map[ros_version:jazzy ubuntu:noble]) (push) Has been cancelled
SITL Tests / Testing PX4 tailsitter (push) Has been cancelled
SITL Tests / Testing PX4 iris (push) Has been cancelled
SITL Tests / Testing PX4 standard_vtol (push) Has been cancelled
Docs - Crowdin - Upload Guide sources (en) / upload-to-crowdin (push) Has been cancelled
Docs - Deploy PX4 User Guide to AWS / build (push) Has been cancelled
Docs - Deploy PX4 User Guide to AWS / deploy (push) Has been cancelled
Handle stale issues and PRs / stale (push) Has been cancelled
Fuzzing / Fuzzing (push) Has been cancelled
Some checks failed
Build all targets / Scan for Board Targets (push) Has been cancelled
Build all targets / Build [${{ matrix.runner }}][${{ matrix.group }}] (push) Has been cancelled
Build all targets / Upload Artifacts (push) Has been cancelled
Checks / build (NO_NINJA_BUILD=1 px4_fmu-v5_default) (push) Has been cancelled
Checks / build (NO_NINJA_BUILD=1 px4_sitl_default) (push) Has been cancelled
Checks / build (check_format) (push) Has been cancelled
Checks / build (check_newlines) (push) Has been cancelled
Checks / build (module_documentation) (push) Has been cancelled
Checks / build (px4_fmu-v2_default stack_check) (push) Has been cancelled
Checks / build (px4_sitl_allyes) (push) Has been cancelled
Checks / build (shellcheck_all) (push) Has been cancelled
Checks / build (tests) (push) Has been cancelled
Checks / build (tests_coverage) (push) Has been cancelled
Checks / build (validate_module_configs) (push) Has been cancelled
Clang Tidy / build (push) Has been cancelled
MacOS build / build (px4_fmu-v5_default) (push) Has been cancelled
MacOS build / build (px4_sitl) (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:22.04) (push) Has been cancelled
Ubuntu environment build / Build and Test (ubuntu:24.04) (push) Has been cancelled
Container build / Set Tags and Variables (push) Has been cancelled
Container build / Build Container (amd64) (push) Has been cancelled
Container build / Build Container (arm64) (push) Has been cancelled
Container build / Deploy To Registry (push) Has been cancelled
EKF Update Change Indicator / unit_tests (push) Has been cancelled
Failsafe Simulator Build / build (failsafe_web) (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v5x (push) Has been cancelled
FLASH usage analysis / Analyzing px4_fmu-v6x (push) Has been cancelled
FLASH usage analysis / Publish Results (push) Has been cancelled
ITCM check / Checking nxp_tropic-community (push) Has been cancelled
ITCM check / Checking px4_fmu-v5x (push) Has been cancelled
ITCM check / Checking px4_fmu-v6xrt (push) Has been cancelled
MAVROS Mission Tests / build (map[mission:MC_mission_box vehicle:iris]) (push) Has been cancelled
MAVROS Offboard Tests / build (map[test_file:mavros_posix_tests_offboard_posctl.test vehicle:iris]) (push) Has been cancelled
Nuttx Target with extra env config / build (px4_fmu-v5_default) (push) Has been cancelled
Python CI Checks / build (push) Has been cancelled
ROS Integration Tests / build (push) Has been cancelled
ROS Translation Node Tests / Build and test (map[ros_version:humble ubuntu:jammy]) (push) Has been cancelled
ROS Translation Node Tests / Build and test (map[ros_version:jazzy ubuntu:noble]) (push) Has been cancelled
SITL Tests / Testing PX4 tailsitter (push) Has been cancelled
SITL Tests / Testing PX4 iris (push) Has been cancelled
SITL Tests / Testing PX4 standard_vtol (push) Has been cancelled
Docs - Crowdin - Upload Guide sources (en) / upload-to-crowdin (push) Has been cancelled
Docs - Deploy PX4 User Guide to AWS / build (push) Has been cancelled
Docs - Deploy PX4 User Guide to AWS / deploy (push) Has been cancelled
Handle stale issues and PRs / stale (push) Has been cancelled
Fuzzing / Fuzzing (push) Has been cancelled
This commit is contained in:
committed by
GitHub
parent
104759b90c
commit
faee1da630
221
docs/assets/middleware/zenoh/architecture-px4-zenoh.svg
Normal file
221
docs/assets/middleware/zenoh/architecture-px4-zenoh.svg
Normal file
@@ -0,0 +1,221 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by Microsoft Visio, SVG Export PX4 Zenoh arch.svg Page-1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.02362in" height="2.43307in"
|
||||
viewBox="0 0 577.701 175.181" xml:space="preserve" color-interpolation-filters="sRGB" class="st9">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:#ffffff;stroke:#41719c;stroke-width:0.75}
|
||||
.st2 {fill:#41719c;font-family:Calibri;font-size:0.833336em}
|
||||
.st3 {font-family:Courier New;font-size:1em}
|
||||
.st4 {font-size:1em}
|
||||
.st5 {marker-end:url(#mrkr4-62);marker-start:url(#mrkr4-60);stroke:#41719c;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st6 {fill:#41719c;fill-opacity:1;stroke:#41719c;stroke-opacity:1;stroke-width:0.28409090909091}
|
||||
.st7 {fill:none;stroke:none;stroke-width:0.25}
|
||||
.st8 {fill:#41719c;font-family:Calibri;font-size:1.00001em}
|
||||
.st9 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<defs id="Markers">
|
||||
<g id="lend4">
|
||||
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
|
||||
</g>
|
||||
<marker id="mrkr4-60" class="st6" v:arrowType="4" v:arrowSize="2" v:setback="6.68" refX="6.68" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(3.52) "/>
|
||||
</marker>
|
||||
<marker id="mrkr4-62" class="st6" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
|
||||
</marker>
|
||||
</defs>
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
|
||||
</v:userDefs>
|
||||
<title>Page-1</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Connector" v:index="0"/>
|
||||
<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(429.165,-50.4584)">
|
||||
<title>Rectangle</title>
|
||||
<desc>Zenoh RMW implementation rmw_zenoh</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="68.5984" cy="158.173" width="137.2" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="137.197" height="34.0157" class="st1"/>
|
||||
<text x="9.51" y="155.08" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Zenoh RMW implementation<v:newlineChar/><tspan
|
||||
x="41.59" dy="1.213em" class="st3">rmw_zenoh</tspan></text> </g>
|
||||
<g id="shape2-5" v:mID="2" v:groupContext="shape" transform="translate(429.165,-90.1434)">
|
||||
<title>Rectangle.2</title>
|
||||
<desc>ROS Middleware (RMW) API</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="68.5984" cy="158.173" width="137.2" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="137.197" height="34.0157" class="st1"/>
|
||||
<text x="11.17" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS Middleware (RMW) API</text> </g>
|
||||
<g id="shape4-8" v:mID="4" v:groupContext="shape" transform="translate(509.953,-129.828)">
|
||||
<title>Rectangle.4</title>
|
||||
<desc>ROS 2 Node</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.2047" cy="157.891" width="56.41" height="34.581"/>
|
||||
<rect x="0" y="140.6" width="56.4094" height="34.581" class="st1"/>
|
||||
<text x="16.22" y="154.89" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS 2<v:newlineChar/><tspan
|
||||
x="17.23" dy="1.2em" class="st4">Node</tspan></text> </g>
|
||||
<g id="shape5-12" v:mID="5" v:groupContext="shape" transform="translate(429.165,-129.828)">
|
||||
<title>Rectangle.5</title>
|
||||
<desc>ROS 2 Node</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="28.2047" cy="157.891" width="56.41" height="34.581"/>
|
||||
<rect x="0" y="140.6" width="56.4094" height="34.581" class="st1"/>
|
||||
<text x="16.22" y="154.89" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS 2<v:newlineChar/><tspan
|
||||
x="17.23" dy="1.2em" class="st4">Node</tspan></text> </g>
|
||||
<g id="shape6-16" v:mID="6" v:groupContext="shape" transform="translate(93.027,-51.0236)">
|
||||
<title>Rectangle.6</title>
|
||||
<desc>PX4 Zenoh-Pico Node</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="41.644" cy="118.488" width="83.29" height="113.386"/>
|
||||
<rect x="0" y="61.7953" width="83.288" height="113.386" class="st1"/>
|
||||
<text x="10.07" y="115.49" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>PX4 Zenoh-Pico <tspan
|
||||
x="30.67" dy="1.2em" class="st4">Node</tspan></text> </g>
|
||||
<g id="shape7-20" v:mID="7" v:groupContext="shape" transform="translate(13.6063,-130.394)">
|
||||
<title>Rectangle.7</title>
|
||||
<desc>uORB Topic α</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="10.13" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>uORB Topic <tspan
|
||||
class="st4" v:langID="1032">α</tspan></text> </g>
|
||||
<g id="shape8-24" v:mID="8" v:groupContext="shape" transform="translate(13.6063,-90.7087)">
|
||||
<title>Rectangle.8</title>
|
||||
<desc>uORB Topic β</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="10.31" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>uORB Topic <tspan
|
||||
class="st4" v:langID="1032">β</tspan></text> </g>
|
||||
<g id="shape9-28" v:mID="9" v:groupContext="shape" transform="translate(13.6063,-51.0236)">
|
||||
<title>Rectangle.9</title>
|
||||
<desc>uORB Topic γ</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="10.73" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>uORB Topic <tspan
|
||||
class="st4" v:langID="1032">γ</tspan></text> </g>
|
||||
<g id="shape10-32" v:mID="10" v:groupContext="shape" transform="translate(183.128,-130.394)">
|
||||
<title>Rectangle.10</title>
|
||||
<desc>ROS2 Topic α</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="10.64" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS2 Topic <tspan
|
||||
class="st4" v:langID="1032">α</tspan></text> </g>
|
||||
<g id="shape11-36" v:mID="11" v:groupContext="shape" transform="translate(183.128,-90.7087)">
|
||||
<title>Rectangle.11</title>
|
||||
<desc>ROS2 Topic β</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="10.82" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS2 Topic <tspan
|
||||
class="st4" v:langID="1032">β</tspan></text> </g>
|
||||
<g id="shape12-40" v:mID="12" v:groupContext="shape" transform="translate(183.128,-51.0236)">
|
||||
<title>Rectangle.12</title>
|
||||
<desc>ROS2 Topic γ</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="158.173" width="75.12" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="75.1181" height="34.0157" class="st1"/>
|
||||
<text x="11.25" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>ROS2 Topic <tspan
|
||||
class="st4" v:langID="1032">γ</tspan></text> </g>
|
||||
<g id="shape18-44" v:mID="18" v:groupContext="shape" transform="translate(13.6063,-11.3386)">
|
||||
<title>Rectangle.18</title>
|
||||
<desc>PX4</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="122.598" cy="158.173" width="245.2" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="245.197" height="34.0157" class="st1"/>
|
||||
<text x="114.89" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>PX4</text> </g>
|
||||
<g id="shape19-47" v:mID="19" v:groupContext="shape" transform="translate(322.583,-49.8088)">
|
||||
<title>Rectangle.19</title>
|
||||
<desc>Zenoh Router zenohd</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="48.3661" cy="138.907" width="96.74" height="72.5492"/>
|
||||
<rect x="0" y="102.632" width="96.7323" height="72.5492" class="st1"/>
|
||||
<text x="20.63" y="135.82" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Zenoh Router<v:newlineChar/><tspan
|
||||
x="30.36" dy="1.213em" class="st3">zenohd</tspan></text> </g>
|
||||
<g id="shape20-51" v:mID="20" v:groupContext="shape" transform="translate(322.583,-10.1237)">
|
||||
<title>Rectangle.20</title>
|
||||
<desc>Linux</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="122.598" cy="158.173" width="245.2" height="34.0157"/>
|
||||
<rect x="0" y="141.165" width="245.197" height="34.0157" class="st1"/>
|
||||
<text x="111.93" y="161.17" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Linux</text> </g>
|
||||
<g id="shape21-54" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(258.246,-147.402)">
|
||||
<title>Dynamic connector</title>
|
||||
<path d="M6.68 175.18 L7.04 175.18 L30.89 175.18 L30.89 236.5 L57.3 236.5" class="st5"/>
|
||||
</g>
|
||||
<g id="shape22-63" v:mID="22" v:groupContext="shape" v:layerMember="0" transform="translate(258.246,-107.717)">
|
||||
<title>Dynamic connector.22</title>
|
||||
<path d="M6.68 175.18 L7.04 175.18 L30.89 175.18 L30.89 196.81 L57.3 196.81" class="st5"/>
|
||||
</g>
|
||||
<g id="shape23-70" v:mID="23" v:groupContext="shape" v:layerMember="0" transform="translate(258.246,-68.0315)">
|
||||
<title>Dynamic connector.23</title>
|
||||
<path d="M6.68 175.18 L7.04 175.18 L30.89 175.18 L30.89 157.13 L57.3 157.13" class="st5"/>
|
||||
</g>
|
||||
<g id="shape24-77" v:mID="24" v:groupContext="shape" transform="translate(251.717,-17.1438)">
|
||||
<title>Sheet.24</title>
|
||||
<desc>UART TCP UDP</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="37.5591" cy="151.863" width="75.12" height="46.6357"/>
|
||||
<rect x="0" y="128.545" width="75.1181" height="46.6357" class="st7"/>
|
||||
<text x="24.06" y="141.06" class="st8" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>UART<v:newlineChar/><tspan
|
||||
x="28.34" dy="1.2em" class="st4">TCP<v:newlineChar/></tspan><tspan x="26.92" dy="1.2em" class="st4">UDP</tspan></text> </g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -744,6 +744,7 @@
|
||||
- [Standard Modes Protocol](mavlink/standard_modes.md)
|
||||
- [uXRCE-DDS (PX4-ROS 2/DDS Bridge)](middleware/uxrce_dds.md)
|
||||
- [UORB Bridged to ROS 2](middleware/dds_topics.md)
|
||||
- [Zenoh (PX4 ROS 2)](middleware/zenoh.md)
|
||||
- [Modules & Commands](modules/modules_main.md)
|
||||
- [Autotune](modules/modules_autotune.md)
|
||||
- [Commands](modules/modules_command.md)
|
||||
|
||||
@@ -5,7 +5,7 @@ This document is [auto-generated](https://github.com/PX4/PX4-Autopilot/blob/main
|
||||
:::
|
||||
|
||||
|
||||
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
|
||||
The [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml) file specifies which uORB message definitions are compiled into the [uxrce_dds_client](../modules/modules_system.md#uxrce-dds-client) and/or [zenoh](../modules/modules_driver.md#zenoh) module when [PX4 is built](../middleware/uxrce_dds.md#code-generation), and hence which topics are available for ROS 2 applications to subscribe or publish (by default).
|
||||
|
||||
This document shows a markdown-rendered version of [dds_topics.yaml](https://github.com/PX4/PX4-Autopilot/blob/main/src/modules/uxrce_dds_client/dds_topics.yaml), listing the publications, subscriptions, and so on.
|
||||
|
||||
@@ -13,7 +13,7 @@ This document shows a markdown-rendered version of [dds_topics.yaml](https://git
|
||||
|
||||
Topic | Type| Rate Limit
|
||||
--- | --- | ---
|
||||
`/fmu/out/register_ext_component_reply` | [px4_msgs::msg::RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md) |
|
||||
`/fmu/out/register_ext_component_reply` | [px4_msgs::msg::RegisterExtComponentReply](../msg_docs/RegisterExtComponentReply.md) |
|
||||
`/fmu/out/arming_check_request` | [px4_msgs::msg::ArmingCheckRequest](../msg_docs/ArmingCheckRequest.md) | 5.0
|
||||
`/fmu/out/mode_completed` | [px4_msgs::msg::ModeCompleted](../msg_docs/ModeCompleted.md) | 50.0
|
||||
`/fmu/out/battery_status` | [px4_msgs::msg::BatteryStatus](../msg_docs/BatteryStatus.md) | 1.0
|
||||
@@ -21,21 +21,21 @@ Topic | Type| Rate Limit
|
||||
`/fmu/out/estimator_status_flags` | [px4_msgs::msg::EstimatorStatusFlags](../msg_docs/EstimatorStatusFlags.md) | 5.0
|
||||
`/fmu/out/failsafe_flags` | [px4_msgs::msg::FailsafeFlags](../msg_docs/FailsafeFlags.md) | 5.0
|
||||
`/fmu/out/manual_control_setpoint` | [px4_msgs::msg::ManualControlSetpoint](../msg_docs/ManualControlSetpoint.md) | 25.0
|
||||
`/fmu/out/message_format_response` | [px4_msgs::msg::MessageFormatResponse](../msg_docs/MessageFormatResponse.md) |
|
||||
`/fmu/out/message_format_response` | [px4_msgs::msg::MessageFormatResponse](../msg_docs/MessageFormatResponse.md) |
|
||||
`/fmu/out/position_setpoint_triplet` | [px4_msgs::msg::PositionSetpointTriplet](../msg_docs/PositionSetpointTriplet.md) | 5.0
|
||||
`/fmu/out/sensor_combined` | [px4_msgs::msg::SensorCombined](../msg_docs/SensorCombined.md) |
|
||||
`/fmu/out/sensor_combined` | [px4_msgs::msg::SensorCombined](../msg_docs/SensorCombined.md) |
|
||||
`/fmu/out/timesync_status` | [px4_msgs::msg::TimesyncStatus](../msg_docs/TimesyncStatus.md) | 10.0
|
||||
`/fmu/out/vehicle_land_detected` | [px4_msgs::msg::VehicleLandDetected](../msg_docs/VehicleLandDetected.md) | 5.0
|
||||
`/fmu/out/vehicle_attitude` | [px4_msgs::msg::VehicleAttitude](../msg_docs/VehicleAttitude.md) |
|
||||
`/fmu/out/vehicle_attitude` | [px4_msgs::msg::VehicleAttitude](../msg_docs/VehicleAttitude.md) |
|
||||
`/fmu/out/vehicle_control_mode` | [px4_msgs::msg::VehicleControlMode](../msg_docs/VehicleControlMode.md) | 50.0
|
||||
`/fmu/out/vehicle_command_ack` | [px4_msgs::msg::VehicleCommandAck](../msg_docs/VehicleCommandAck.md) |
|
||||
`/fmu/out/vehicle_command_ack` | [px4_msgs::msg::VehicleCommandAck](../msg_docs/VehicleCommandAck.md) |
|
||||
`/fmu/out/vehicle_global_position` | [px4_msgs::msg::VehicleGlobalPosition](../msg_docs/VehicleGlobalPosition.md) | 50.0
|
||||
`/fmu/out/vehicle_gps_position` | [px4_msgs::msg::SensorGps](../msg_docs/SensorGps.md) | 50.0
|
||||
`/fmu/out/vehicle_local_position` | [px4_msgs::msg::VehicleLocalPosition](../msg_docs/VehicleLocalPosition.md) | 50.0
|
||||
`/fmu/out/vehicle_odometry` | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
|
||||
`/fmu/out/vehicle_odometry` | [px4_msgs::msg::VehicleOdometry](../msg_docs/VehicleOdometry.md) |
|
||||
`/fmu/out/vehicle_status` | [px4_msgs::msg::VehicleStatus](../msg_docs/VehicleStatus.md) | 5.0
|
||||
`/fmu/out/airspeed_validated` | [px4_msgs::msg::AirspeedValidated](../msg_docs/AirspeedValidated.md) | 50.0
|
||||
`/fmu/out/vtol_vehicle_status` | [px4_msgs::msg::VtolVehicleStatus](../msg_docs/VtolVehicleStatus.md) |
|
||||
`/fmu/out/vtol_vehicle_status` | [px4_msgs::msg::VtolVehicleStatus](../msg_docs/VtolVehicleStatus.md) |
|
||||
`/fmu/out/home_position` | [px4_msgs::msg::HomePosition](../msg_docs/HomePosition.md) | 5.0
|
||||
|
||||
## Subscriptions
|
||||
|
||||
200
docs/en/middleware/zenoh.md
Normal file
200
docs/en/middleware/zenoh.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# Zenoh (PX4 ROS 2 rmw_zenoh)
|
||||
|
||||
<Badge type="tip" text="main (planned for: PX4 v1.17)" /> <Badge type="warning" text="Experimental" />
|
||||
|
||||
:::warning Experimental
|
||||
At the time of writing, PX4 Zenoh-pico is experimental, and hence subject to change.
|
||||
:::
|
||||
|
||||
PX4 supports Zenoh as an alternative mechanism (to DDS) for bridging uORB topics to [ROS 2](../ros2/user_guide.md) (via the ROS 2 [`rmw_zenoh`](https://github.com/ros2/rmw_zenoh) middleware).
|
||||
This allows uORB messages to be published and subscribed on a companion computer as though they were ROS 2 topics.
|
||||
It provides a fast and lightweight way to connect PX4 to ROS 2, making it easier for applications to access vehicle telemetry and send control commands.
|
||||
|
||||
The following guide describes the architecture and various options for setting up the Zenoh client and router.
|
||||
In particular, it covers the options that are most important to PX4 users exploring Zenoh as an alternative communication layer for ROS 2.
|
||||
|
||||
## Architecture
|
||||
|
||||
The Zenoh-based middleware consists of a client running on PX4 and a Zenoh router running on the companion computer, with bi-directional data exchange between them over a UART, TCP, UDP, or multicast-UDP link.
|
||||
The router acts as a broker and discovery service, enabling PX4 to publish and subscribe to topics in the global Zenoh data space.
|
||||
This allows seamless integration with ROS 2 nodes using [`rmw_zenoh`](https://github.com/ros2/rmw_zenoh), and supports flexible deployment across distributed systems.
|
||||
|
||||

|
||||
|
||||
The client is the _PX4 Zenoh-Pico Node_ referred to above, which is implemented in the [PX4 `zenoh` module](../modules/modules_driver.md#zenoh).
|
||||
This is based on Zenoh-Pico, a minimalistic version of [Eclipse Zenoh](https://zenoh.io/) (a data-centric protocol designed for real-time, distributed, and resource-constrained environments).
|
||||
|
||||
The router suggested above is [zenohd](https://github.com/eclipse-zenoh/zenoh/tree/main/zenohd).
|
||||
|
||||
:::info
|
||||
UART is supported by Zenoh but has not yet implemented in the PX4 Zenoh-Pico node.
|
||||
:::
|
||||
|
||||
## ROS 2 Zenoh Bring-up on Linux Companion
|
||||
|
||||
In order for PX4 uORB topics to be shared with ROS 2 applications, you will need the PX4 Zenoh-Pico Node client running on your FMU, connected to a Zenoh router running on the companion computer (or elsewhere in the network).
|
||||
|
||||
First select Zenoh as the ROS 2 transport by setting the `RMW_IMPLEMENTATION` environment variable as shown:
|
||||
|
||||
```sh
|
||||
export RMW_IMPLEMENTATION=rmw_zenoh_cpp
|
||||
```
|
||||
|
||||
Then start the Zenoh router using the command:
|
||||
|
||||
```sh
|
||||
ros2 run rmw_zenoh_cpp rmw_zenohd
|
||||
```
|
||||
|
||||
For more information about the Zenoh Router see the [rmw_zenoh](https://github.com/ros2/rmw_zenoh?tab=readme-ov-file#start-the-zenoh-router) documentation.
|
||||
|
||||
## PX4 Zenoh-Pico Node Setup
|
||||
|
||||
### PX4 Firmware
|
||||
|
||||
Before setting up the Zenoh communication, first make sure that your firmware contains the driver that implements the [`zenoh` driver](../modules/modules_driver.md#zenoh), which provides the implementation of the _PX4 Zenoh-Pico Node_.
|
||||
|
||||
You can check if the module is present on your board by searching for the key `CONFIG_MODULES_ZENOH=y` in your board's `default.px4board` KConfig file.
|
||||
For example, you can see that the module is present in `px4_fmu-v6xrt` build targets from [/boards/px4/fmu-v6xrt/default.px4board](https://github.com/PX4/PX4-Autopilot/blob/main/boards/px4/fmu-v6xrt/default.px4board#L91).
|
||||
|
||||
If `CONFIG_MODULES_ZENOH=y` is not preset you can add this key to your board configuration and rebuild.
|
||||
Note that due to flash constraints you may need to remove other components in order to include the module (such as the [`uxrce_dds_client` module](../modules/modules_system.md#uxrce-dds-client), which you will not need if you are using Zenoh).
|
||||
|
||||
The table below shows some of the PX4 targets that include Zenoh by default.
|
||||
|
||||
| PX4 Target | Notes |
|
||||
| ---------------------- | ------------------------------------------------------------------------------------------- |
|
||||
| `px4_fmu-v6xrt` | For [FMUv6X-RT](../flight_controller/nxp_mr_vmu_rt1176.md) (reference platform for testing) |
|
||||
| `nxp_tropic-community` | |
|
||||
| `nxp_mr-tropic` | |
|
||||
| `nxp_mr-canhubk344` | |
|
||||
| `px4_sitl_zenoh` | Zenoh-enabled simulation build |
|
||||
| `px4_fmu-v6x_zenoh` | Zenoh-enabled firmware for FMUv6X |
|
||||
|
||||
Zenoh is not included in the default `px4_fmu-` targets for any firmware other than `px4_fmu-v6xrt` (`px4_sitl_zenoh` and `px4_fmu-v6x_zenoh` [are build variants](../dev_setup/building_px4.md#px4-make-build-targets)).
|
||||
|
||||
::: tip
|
||||
You can check if Zenoh is present at runtime by using QGroundControl to [find the parameter](../advanced_config/parameters.md#finding-a-parameter) [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE).
|
||||
If present, the module is installed.
|
||||
:::
|
||||
|
||||
### Enable Zenoh on PX4 Startup
|
||||
|
||||
Set the [ZENOH_ENABLE](../advanced_config/parameter_reference.md#ZENOH_ENABLE) parameter to `1` to enable Zenoh on PX4 startup.
|
||||
|
||||
### Configure Zenoh Network
|
||||
|
||||
Set up PX4 to connect to the companion computer running `zenohd`.
|
||||
|
||||
PX4's default IP address of the Zenoh daemon host is `10.41.10.1`.
|
||||
If you're using a different IP for the Zenoh daemon, run the following command (replacing the address) in a PX4 shell and then reboot:
|
||||
|
||||
```sh
|
||||
zenoh config net client tcp/10.41.10.1:7447#iface=eth0
|
||||
```
|
||||
|
||||
Note that for the simulation target with Zeroh (`px4_sitl_zenoh`) you won't need to make any changes because the default IP address of the Zenoh daemon is set to `localhost`.
|
||||
|
||||
:::warning
|
||||
Any changes to the network configuration require a PX4 system reboot to take effect.
|
||||
:::
|
||||
|
||||
:::tip
|
||||
See [PX4 Ethernet Setup](../advanced_config/ethernet_setup.md) for more information about Ethernet configuration.
|
||||
:::
|
||||
|
||||
### PX4 Zenoh-pico Node configuration
|
||||
|
||||
The **default configuration** is auto-generated from the [dds_topics.yaml](../middleware/dds_topics.md) file in the PX4 repository.
|
||||
This file specifies which uORB message definitions are to be published/subscribed by ROS 2 applications, and hence (indirectly) which topics are compiled into the zenoh module.
|
||||
|
||||
To inspect the current Zenoh configuration:
|
||||
|
||||
```sh
|
||||
zenoh config
|
||||
```
|
||||
|
||||
The PX4 Zenoh-pico node stores its configuration on the **SD card** under the `zenoh` folder.
|
||||
This folder contains three key files:
|
||||
|
||||
- **`net.txt`** – Defines the **Zenoh network configuration**.
|
||||
- **`pub.csv`** – Maps **uORB topics to ROS2 topics** (used for publishing).
|
||||
- **`sub.csv`** – Maps **ROS2 topics to uORB topics** (used for subscribing).
|
||||
|
||||
### 4. Modifying Topic Mappings
|
||||
|
||||
Zenoh topic mappings define how data flows between PX4's internal uORB topics and external ROS2 topics via Zenoh.
|
||||
These mappings are stored in `pub.csv` and `sub.csv` on the SD card, and can be modified at runtime using the `zenoh config` CLI tool.
|
||||
|
||||
:::warning
|
||||
Any changes to the topic mappings require a PX4 system reboot to take effect.
|
||||
:::
|
||||
|
||||
There are two types of mappings you can modify:
|
||||
|
||||
- **Publisher mappings**: Forward data from a uORB topic to a Zenoh topic.
|
||||
- **Subscriber mappings**: Receive data from a Zenoh topic and publish it to a uORB topic.
|
||||
|
||||
The main operations and their commands are:
|
||||
|
||||
- Publish a uORB topic to a Zenoh topic:
|
||||
|
||||
```sh
|
||||
zenoh config add publisher <zenoh_topic> <uorb_topic> [uorb_instance]
|
||||
```
|
||||
|
||||
- Subscribe to a Zenoh topic and forward it to a uORB topic:
|
||||
|
||||
```sh
|
||||
zenoh config add subscriber <zenoh_topic> <uorb_topic> [uorb_instance]
|
||||
```
|
||||
|
||||
- Remove existing mappings:
|
||||
|
||||
```sh
|
||||
zenoh config delete publisher <zenoh_topic>
|
||||
zenoh config delete subscriber <zenoh_topic>
|
||||
```
|
||||
|
||||
After modifying the mappings, reboot PX4 to apply the changes.
|
||||
The updated configuration will be loaded from the SD card during startup.
|
||||
|
||||
## Communicating with PX4 from ROS 2 via Zenoh
|
||||
|
||||
Once your PX4 FMU is publishing data into ROS 2, you can inspect the available topics and their contents using standard ROS 2 CLI tools:
|
||||
|
||||
```sh
|
||||
ros2 topic list
|
||||
```
|
||||
|
||||
Check topic type and publishers/subscribers:
|
||||
|
||||
```sh
|
||||
ros2 topic info -v /fmu/out/vehicle_status
|
||||
Type: px4_msgs/msg/VehicleStatus
|
||||
|
||||
Publisher count: 1
|
||||
|
||||
Node name: px4_aabbcc00000000000000000000000000
|
||||
Node namespace: /
|
||||
Topic type: px4_msgs/msg/VehicleStatus
|
||||
Topic type hash: RIHS01_828bddbb7d4c2aa6ad93757955f6893be1ec5d8f11885ec7715bcdd76b5226c9
|
||||
Endpoint type: PUBLISHER
|
||||
GID: 82.99.74.2c.b6.7d.93.44.91.4d.fe.14.93.58.40.16
|
||||
QoS profile:
|
||||
Reliability: RELIABLE
|
||||
History (Depth): KEEP_LAST (7)
|
||||
Durability: VOLATILE
|
||||
Lifespan: Infinite
|
||||
Deadline: Infinite
|
||||
Liveliness: AUTOMATIC
|
||||
Liveliness lease duration: Infinite
|
||||
|
||||
Subscription count: 0
|
||||
```
|
||||
|
||||
### PX4 ROS 2 Interface with Zenoh
|
||||
|
||||
The [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md) works out of the box with Zenoh as a transport backend.
|
||||
This means you can publish and subscribe to PX4 topics over Zenoh without changing your ROS 2 nodes or dealing with DDS configuration.
|
||||
For setup details and supported message types, refer to the [PX4 ROS 2 Interface Library](../ros2/px4_ros2_interface_lib.md).
|
||||
@@ -19,7 +19,7 @@ if MODULES_ZENOH
|
||||
config ZENOH_DEFAULT_LOCATOR
|
||||
string "Zenoh default mode"
|
||||
default "tcp/127.0.0.1:7447" if PLATFORM_POSIX
|
||||
default "" if !PLATFORM_POSIX
|
||||
default "tcp/10.41.10.1:7447#iface=eth0" if !PLATFORM_POSIX
|
||||
|
||||
config ZENOH_RMW_LIVELINESS
|
||||
bool "[EXPERIMENTAL] rmw_zenoh liveliness implemenation"
|
||||
|
||||
@@ -6,9 +6,12 @@ parameters:
|
||||
|
||||
ZENOH_ENABLE:
|
||||
description:
|
||||
short: Zenoh Enable
|
||||
long: Zenoh
|
||||
short: Enable Zenoh
|
||||
long: |
|
||||
Set true (1) to start the Zenoh driver module (a.k.a the "Zenoh-Pico Node").
|
||||
See https://docs.px4.io/main/en/middleware/zenoh and
|
||||
https://docs.px4.io/main/en/modules/modules_driver.html#zenoh
|
||||
category: System
|
||||
type: int32
|
||||
type: boolean
|
||||
reboot_required: true
|
||||
default: 0
|
||||
|
||||
Reference in New Issue
Block a user