Backend registry: single name → constructor dispatch
メンテナーはふだん 1 日以内に返信
@petercorke がすでに取り組んでいます。
2026年10月25日 から。
評価
この issue はまだ評価されていません。
説明
Part of #886. Groundwork for the new backends; each backend issue is blocked by this one.
Problem
Backend selection is spread over several places:
backends.load_backend(): anif/elifover "swift", "pyplot", "pyplot2"BaseRobot._get_graphical_backend(): aLiteralof the same names, anisinstancechain to pick a default, a Pyodide special case, and Swift-specific fallback logicBaseRobot.plot():type(env).__name__ == "Swift"andisinstance(env, PyPlot)checks
Adding a backend means editing all of these. Also, default_backend isn't lowercased, so robot.default_backend = "Swift" fails with ValueError at plot time.
Proposal
- One registry in
roboticstoolbox.backends, mapping name → target, e.g."swift": "roboticstoolbox.backends.swift:Swift". Built-in backends are entries here. load_backend(name)looks the name up (case-insensitive). A string target is imported only when chosen. An unknown name gives an error listing the registered names. A missing optional package givesModuleNotFoundErrornaming the pip extra.register_backend(name, target, *, replace=False), public:targetis a lazy"module:Class"string, or a callable returning aConnector- registering an existing name raises unless
replace=True - registration is per process (call it before
plot()); entry-point discovery may come later - lets a backend be developed, tested and used outside the RTB tree, e.g.
register_backend("isaacsim", "rtb_isaacsim:IsaacSim"); once accepted into RTB, that call becomes a registry entry - backends that can't live in RTB (licence, GPU) can stay as separate packages
- Default choice stays in
_get_graphical_backend, but works only with names: explicit argument → robot/class default → robot kind → "pyplot". Defaults by robot kind pick only built-ins; a registered backend is used when named or set withset_default_backend(). Normalise case at every entry point. - Capability flags replace type checks. Add flags to
Connector, and usegetattr(env, flag, default)inplot():embeds_in_notebookreplaces__name__ == "Swift"supports_moviereplacesisinstance(env, PyPlot)- existing:
supports_teach,supports_ellipse
- Type hints. The
backendargument becomesstr, validated at runtime against the registry, so the names live in one place and registered names are valid too.
Out of scope
- Changing the
Connectorprotocol itself (#676) - Third-party discovery via entry points
Tests
- Lookup: case-insensitivity, unknown-name error, missing-package error
register_backendwith a string target and a callable target, the duplicate-name error, andreplace=True, all using a fake backend- Default resolution for each robot kind and for Pyodide
- Capability flags read with the right defaults
- The mocked Swift tests use
register_backendand no longer need a class namedSwift
Done when
- Adding a backend is one registry entry plus the backend module
- No
__name__or backendisinstancechecks remain inBaseRobot - Existing tests pass, including the Swift ones
- The docs list the registered backends and their flags, and show
register_backendusage
- 主要言語
- C++
- スター
- 3.6k
- フォーク
- 645
- 平均マージ
- 1日 8時間
- マージ済み PR(30日)
- 145
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
petercorke/robotics-toolbox-python のほかの issue
-
plt.pause(0) waits for ever: PoseGraph.plot_scan(pause=0) and Vehicle animation may hang対応中かも @huxiaoyi-ovo が今日担当しました。 オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
petercorke/robotics-toolbox-python#876 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
petercorke/robotics-toolbox-python#709 ·
メンテナーはふだん 1 日以内に返信
-
Isaac Sim backendオープンenhancement
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
petercorke/robotics-toolbox-python#903 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
tech-debt
難易度 4/5 1〜2日 初心者へのやさしさ 55/100
petercorke/robotics-toolbox-python#898 ·
メンテナーはふだん 1 日以内に返信
-
LatticePlanner: integer headings, and motion primitives with finer turn steps (design first)対応中かも @kVinsom が 3 日前に担当しました。 オープンenhancement help wanted
難易度 5/5 1週間以上 初心者へのやさしさ 25/100
petercorke/robotics-toolbox-python#895 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
petercorke/robotics-toolbox-python の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
KhronosGroup/Vulkan-Tutorial#534 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 2 日以内に返信
-
bug IO
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MrNeRF/LichtFeld-Studio#3824 ·
メンテナーはふだん 1 日以内に返信
-
pnnx: manual tanh GELU fusion loses the approximation mode対応中かも @ktz03 が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
Tencent/ncnn#7175 · リアクション 1 件 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
throneproj/Throne#2043 ·
メンテナーはふだん 2 日以内に返信