agenticros 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +37 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/down.d.ts +6 -4
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +16 -6
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/logs.js +2 -2
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -6
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +12 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/runners/sim.d.ts +2 -0
- package/dist/runners/sim.d.ts.map +1 -1
- package/dist/runners/sim.js +2 -0
- package/dist/runners/sim.js.map +1 -1
- package/package.json +1 -1
- package/runtime/BUNDLE.json +1 -1
- package/runtime/packages/core/src/transport/local/transport.ts +25 -5
- package/runtime/ros2_ws/src/agenticros_sim/CMakeLists.txt +24 -0
- package/runtime/ros2_ws/src/agenticros_sim/README.md +120 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/agenticros-sim.config.json +28 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/amr_bridge.yaml +111 -0
- package/runtime/ros2_ws/src/agenticros_sim/config/amr_view.rviz +172 -0
- package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.dsv.in +3 -0
- package/runtime/ros2_ws/src/agenticros_sim/env-hooks/gz_resource_path.sh.in +7 -0
- package/runtime/ros2_ws/src/agenticros_sim/launch/sim_amr.launch.py +159 -0
- package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.config +17 -0
- package/runtime/ros2_ws/src/agenticros_sim/models/agenticros_amr/model.sdf +244 -0
- package/runtime/ros2_ws/src/agenticros_sim/package.xml +27 -0
- package/runtime/ros2_ws/src/agenticros_sim/worlds/agenticros_indoor.sdf +183 -0
- package/runtime/scripts/configure_for_sim.sh +64 -0
- package/runtime/scripts/sim/run_sim.sh +146 -0
- package/runtime/scripts/test-follow-me-sim.mjs +135 -0
- package/runtime/scripts/test-mcp-e2e.mjs +184 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBtE"}
|
package/dist/commands/config.js
CHANGED
|
@@ -26,6 +26,8 @@ export async function configCommand(opts) {
|
|
|
26
26
|
switch (action) {
|
|
27
27
|
case "show":
|
|
28
28
|
return showConfig();
|
|
29
|
+
case "get":
|
|
30
|
+
return getConfig(opts.keyValue);
|
|
29
31
|
case "set":
|
|
30
32
|
return setConfig(opts.keyValue);
|
|
31
33
|
case "edit":
|
|
@@ -33,10 +35,32 @@ export async function configCommand(opts) {
|
|
|
33
35
|
case "reset":
|
|
34
36
|
return resetConfig();
|
|
35
37
|
default:
|
|
36
|
-
err(`Unknown action '${opts.action}'. Use: show | set | edit | reset.`);
|
|
38
|
+
err(`Unknown action '${opts.action}'. Use: show | get | set | edit | reset.`);
|
|
37
39
|
process.exit(2);
|
|
38
40
|
}
|
|
39
41
|
}
|
|
42
|
+
function getConfig(key) {
|
|
43
|
+
if (!key) {
|
|
44
|
+
err("Usage: agenticros config get <key> (e.g. robot.namespace)");
|
|
45
|
+
process.exit(2);
|
|
46
|
+
}
|
|
47
|
+
const p = configPath();
|
|
48
|
+
if (!existsSync(p)) {
|
|
49
|
+
warn("Config file does not exist yet. Run `agenticros init` to create it.");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const obj = safeReadJson(p);
|
|
53
|
+
if (!obj) {
|
|
54
|
+
err(`Could not parse ${p}.`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
const value = getByPath(obj, key.split("."));
|
|
58
|
+
if (value === undefined) {
|
|
59
|
+
warn(`Key '${key}' is not set in ${p}.`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
process.stdout.write(`${typeof value === "string" ? value : JSON.stringify(value)}\n`);
|
|
63
|
+
}
|
|
40
64
|
function showConfig() {
|
|
41
65
|
const p = configPath();
|
|
42
66
|
header(`AgenticROS config (${p})`);
|
|
@@ -106,6 +130,18 @@ function safeReadJson(path) {
|
|
|
106
130
|
return undefined;
|
|
107
131
|
}
|
|
108
132
|
}
|
|
133
|
+
function getByPath(obj, keys) {
|
|
134
|
+
let cursor = obj;
|
|
135
|
+
for (const k of keys) {
|
|
136
|
+
if (cursor && typeof cursor === "object" && !Array.isArray(cursor) && k in cursor) {
|
|
137
|
+
cursor = cursor[k];
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return cursor;
|
|
144
|
+
}
|
|
109
145
|
function setByPath(obj, keys, value) {
|
|
110
146
|
let cursor = obj;
|
|
111
147
|
for (let i = 0; i < keys.length - 1; i++) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAOhE,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAmB;IACrD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IAErD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,UAAU,EAAE,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,WAAW,EAAE,CAAC;QACvB;YACE,GAAG,CAAC,mBAAmB,IAAI,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/down.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `agenticros down` - stop AgenticROS components this CLI brought up.
|
|
3
3
|
*
|
|
4
|
-
* Kills processes recorded in /tmp/agenticros-*.pid (
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Kills processes recorded in /tmp/agenticros-*.pid (sim, camera, mcp,
|
|
5
|
+
* rosbridge) plus stray gz / rviz / parameter_bridge. The OpenClaw gateway
|
|
6
|
+
* service is a persistent host service used by Claude Code / MCP - leave it
|
|
7
|
+
* running unless the user explicitly passes --stop-gateway.
|
|
7
8
|
*/
|
|
8
9
|
export interface DownOptions {
|
|
9
10
|
keepCamera?: boolean;
|
|
10
|
-
|
|
11
|
+
/** Default false. When true, also stops openclaw-gateway.service. */
|
|
12
|
+
stopGateway?: boolean;
|
|
11
13
|
}
|
|
12
14
|
export declare function downCommand(opts: DownOptions): Promise<void>;
|
|
13
15
|
//# sourceMappingURL=down.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAID,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiClE"}
|
package/dist/commands/down.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `agenticros down` - stop AgenticROS components this CLI brought up.
|
|
3
3
|
*
|
|
4
|
-
* Kills processes recorded in /tmp/agenticros-*.pid (
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Kills processes recorded in /tmp/agenticros-*.pid (sim, camera, mcp,
|
|
5
|
+
* rosbridge) plus stray gz / rviz / parameter_bridge. The OpenClaw gateway
|
|
6
|
+
* service is a persistent host service used by Claude Code / MCP - leave it
|
|
7
|
+
* running unless the user explicitly passes --stop-gateway.
|
|
7
8
|
*/
|
|
8
9
|
import { execa } from "execa";
|
|
9
10
|
import { clearPid, isPidAlive, killPid } from "../util/pidfile.js";
|
|
@@ -11,6 +12,7 @@ import { err, header, info, ok, warn, withSpinner } from "../util/logger.js";
|
|
|
11
12
|
const STOPPABLE = ["sim", "mcp", "rosbridge", "camera"];
|
|
12
13
|
export async function downCommand(opts) {
|
|
13
14
|
header("AgenticROS - shutting down");
|
|
15
|
+
let stoppedAny = false;
|
|
14
16
|
for (const name of STOPPABLE) {
|
|
15
17
|
if (name === "camera" && opts.keepCamera) {
|
|
16
18
|
info("Skipping camera (--keep-camera).");
|
|
@@ -18,6 +20,7 @@ export async function downCommand(opts) {
|
|
|
18
20
|
}
|
|
19
21
|
if (!isPidAlive(name))
|
|
20
22
|
continue;
|
|
23
|
+
stoppedAny = true;
|
|
21
24
|
await withSpinner(`Stopping ${name}`, async () => {
|
|
22
25
|
const pid = killPid(name, "SIGTERM");
|
|
23
26
|
if (pid === undefined)
|
|
@@ -26,11 +29,18 @@ export async function downCommand(opts) {
|
|
|
26
29
|
clearPid(name);
|
|
27
30
|
});
|
|
28
31
|
}
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
// Mop up any stray sim subprocesses that did not write a pidfile (children of
|
|
33
|
+
// ros2 launch typically inherit termination, but be defensive).
|
|
34
|
+
await tryKill(["gz sim", "ign gazebo", "rviz2", "parameter_bridge"]);
|
|
35
|
+
if (opts.stopGateway) {
|
|
32
36
|
await stopGatewayService();
|
|
33
37
|
}
|
|
38
|
+
else {
|
|
39
|
+
info("Leaving openclaw-gateway running (use --stop-gateway to also stop it).");
|
|
40
|
+
}
|
|
41
|
+
if (!stoppedAny && !opts.stopGateway) {
|
|
42
|
+
info("Nothing to stop.");
|
|
43
|
+
}
|
|
34
44
|
ok("Done.");
|
|
35
45
|
}
|
|
36
46
|
async function waitForExit(pid, timeoutMs = 5000) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -25,9 +25,9 @@ export async function logsCommand(opts) {
|
|
|
25
25
|
}
|
|
26
26
|
if (!TARGETS.includes(target)) {
|
|
27
27
|
warn(`Unknown log target '${opts.target}'. Valid: ${TARGETS.join(", ")}.`);
|
|
28
|
-
|
|
28
|
+
process.exit(2);
|
|
29
29
|
}
|
|
30
|
-
const follow = opts.follow
|
|
30
|
+
const follow = opts.follow === true;
|
|
31
31
|
const n = Number(opts.lines ?? 200);
|
|
32
32
|
if (target === "gateway") {
|
|
33
33
|
const args = ["--user", "-u", "openclaw-gateway.service", "-n", String(n)];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI/D,MAAM,OAAO,GAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;AAQ9E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAiB;IACjD,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAe,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,uEAAuE,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,IAAI,CAAC,MAAM,aAAa,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,OAAO;
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDtE"}
|
package/dist/commands/status.js
CHANGED
|
@@ -6,17 +6,21 @@
|
|
|
6
6
|
* a coloured table or JSON.
|
|
7
7
|
*/
|
|
8
8
|
import { execa } from "execa";
|
|
9
|
-
import { isPidAlive, readPid } from "../util/pidfile.js";
|
|
9
|
+
import { clearPid, isPidAlive, readPid } from "../util/pidfile.js";
|
|
10
10
|
import { colors, header, info } from "../util/logger.js";
|
|
11
11
|
import { readState } from "../util/state.js";
|
|
12
12
|
const COMPONENTS = ["camera", "sim", "mcp", "rosbridge"];
|
|
13
13
|
export async function statusCommand(opts) {
|
|
14
14
|
const state = readState();
|
|
15
|
-
const components = COMPONENTS.map((name) =>
|
|
16
|
-
name
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
const components = COMPONENTS.map((name) => {
|
|
16
|
+
const alive = isPidAlive(name);
|
|
17
|
+
const pid = readPid(name);
|
|
18
|
+
// Auto-clean stale pidfiles so subsequent runs aren't confused by ghosts.
|
|
19
|
+
if (!alive && pid !== undefined) {
|
|
20
|
+
clearPid(name);
|
|
21
|
+
}
|
|
22
|
+
return { name, running: alive, pid: alive ? pid : undefined };
|
|
23
|
+
});
|
|
20
24
|
let gatewayActive = false;
|
|
21
25
|
try {
|
|
22
26
|
const { exitCode } = await execa("systemctl", ["--user", "is-active", "openclaw-gateway.service"], {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAuB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/up.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"up.d.ts","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9D"}
|
package/dist/commands/up.js
CHANGED
|
@@ -27,16 +27,28 @@ export async function upCommand(opts) {
|
|
|
27
27
|
await runSimAmr({
|
|
28
28
|
namespace: opts.namespace,
|
|
29
29
|
useRviz: opts.rviz === true,
|
|
30
|
+
headless: resolveHeadless(opts.headless),
|
|
30
31
|
});
|
|
31
32
|
break;
|
|
32
33
|
case "sim-arm":
|
|
33
34
|
await runSimArm({
|
|
34
35
|
namespace: opts.namespace,
|
|
35
36
|
useRviz: opts.rviz === true,
|
|
37
|
+
headless: resolveHeadless(opts.headless),
|
|
36
38
|
});
|
|
37
39
|
break;
|
|
38
40
|
}
|
|
39
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* If the user explicitly passed --headless, respect it. Otherwise auto-detect:
|
|
44
|
+
* no DISPLAY env var (typical SSH session, CI, or docker headless container)
|
|
45
|
+
* means we should run sim headless — otherwise gz would hang waiting for X.
|
|
46
|
+
*/
|
|
47
|
+
function resolveHeadless(flag) {
|
|
48
|
+
if (flag !== undefined)
|
|
49
|
+
return flag;
|
|
50
|
+
return !process.env["DISPLAY"];
|
|
51
|
+
}
|
|
40
52
|
async function resolveTarget(raw) {
|
|
41
53
|
if (raw === "real" || raw === "sim-amr" || raw === "sim-arm")
|
|
42
54
|
return raw;
|
package/dist/commands/up.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"up.js","sourceRoot":"","sources":["../../src/commands/up.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAc9C,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAe;IAC7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAErE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM;YACT,MAAM,YAAY,CAAC;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK;gBAC7B,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK;aAC9B,CAAC,CAAC;YACH,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,SAAS,CAAC;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC3B,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;aACzC,CAAC,CAAC;YACH,MAAM;QACR,KAAK,SAAS;YACZ,MAAM,SAAS,CAAC;gBACd,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI;gBAC3B,QAAQ,EAAE,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC;aACzC,CAAC,CAAC;YACH,MAAM;IACV,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAyB;IAChD,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,GAAuB;IAClD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACzE,IAAI,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;QACtB,GAAG,CAAC,mBAAmB,GAAG,0CAA0C,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACnC,OAAO,MAAM,CAAW;QACtB,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,MAAM,EAAE;YAChE,EAAE,IAAI,EAAE,uCAAuC,EAAE,KAAK,EAAE,SAAS,EAAE;YACnE,EAAE,IAAI,EAAE,mCAAmC,EAAE,KAAK,EAAE,SAAS,EAAE;SAChE;QACD,OAAO,EAAE,MAAM;KAChB,CAAC,CAAC;AACL,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ program
|
|
|
31
31
|
.option("--ros-distro <distro>", "ROS 2 distribution (humble, jazzy, ...)")
|
|
32
32
|
.option("--namespace <ns>", "Robot namespace override")
|
|
33
33
|
.option("--rviz", "Open RViz alongside the sim (sim targets only)", false)
|
|
34
|
+
.option("--headless", "Run gz-sim with no GUI (auto-enabled if $DISPLAY is unset)")
|
|
34
35
|
.option("--no-camera", "Skip starting the RealSense camera (real target only)")
|
|
35
36
|
.option("--no-motors", "Skip starting the motor controller (real target only)")
|
|
36
37
|
.action(async (target, opts) => {
|
|
@@ -38,9 +39,9 @@ program
|
|
|
38
39
|
});
|
|
39
40
|
program
|
|
40
41
|
.command("down")
|
|
41
|
-
.description("Stop
|
|
42
|
+
.description("Stop AgenticROS processes (sim, camera, mcp, rosbridge). Leaves the OpenClaw gateway running by default.")
|
|
42
43
|
.option("--keep-camera", "Leave the RealSense camera running", false)
|
|
43
|
-
.option("--
|
|
44
|
+
.option("--stop-gateway", "Also stop the openclaw-gateway service (default: keep it running)", false)
|
|
44
45
|
.action(async (opts) => {
|
|
45
46
|
await downCommand(opts);
|
|
46
47
|
});
|
|
@@ -71,7 +72,7 @@ program
|
|
|
71
72
|
program
|
|
72
73
|
.command("logs [target]")
|
|
73
74
|
.description("Tail logs. target = camera | mcp | gateway | sim (default: print available logs).")
|
|
74
|
-
.option("-f, --follow", "
|
|
75
|
+
.option("-f, --follow", "Tail the log (tail -F). Default prints last N lines and exits.", false)
|
|
75
76
|
.option("-n, --lines <n>", "Number of lines from the end to start at", "200")
|
|
76
77
|
.action(async (target, opts) => {
|
|
77
78
|
await logsCommand({ target, ...opts });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CACV,gGAAgG,CACjG;KACA,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,kCAAkC,CAAC;KACrE,kBAAkB,CAAC,qDAAqD,CAAC,CAAC;AAE7E,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CACV,8EAA8E,CAC/E;KACA,MAAM,CAAC,uBAAuB,EAAE,yCAAyC,CAAC;KAC1E,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;KACtD,MAAM,CAAC,QAAQ,EAAE,gDAAgD,EAAE,KAAK,CAAC;KACzE,MAAM,CAAC,aAAa,EAAE,uDAAuD,CAAC;KAC9E,MAAM,CAAC,aAAa,EAAE,uDAAuD,CAAC;KAC9E,MAAM,CAAC,KAAK,EAAE,MAA0B,EAAE,IAAI,EAAE,EAAE;IACjD,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runners/sim.d.ts
CHANGED
|
@@ -11,6 +11,8 @@
|
|
|
11
11
|
export interface SimRunOptions {
|
|
12
12
|
namespace?: string;
|
|
13
13
|
useRviz?: boolean;
|
|
14
|
+
/** True = headless gz (-s --headless-rendering). Auto-detected from $DISPLAY upstream. */
|
|
15
|
+
headless?: boolean;
|
|
14
16
|
}
|
|
15
17
|
export declare function runSimAmr(opts: SimRunOptions): Promise<void>;
|
|
16
18
|
export declare function runSimArm(opts: SimRunOptions): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim.d.ts","sourceRoot":"","sources":["../../src/runners/sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sim.d.ts","sourceRoot":"","sources":["../../src/runners/sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoCD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAElE"}
|
package/dist/runners/sim.js
CHANGED
|
@@ -30,6 +30,8 @@ async function runSim(robot, opts) {
|
|
|
30
30
|
const args = ["--robot", robot, "--namespace", ns];
|
|
31
31
|
if (opts.useRviz)
|
|
32
32
|
args.push("--rviz");
|
|
33
|
+
if (opts.headless)
|
|
34
|
+
args.push("--no-gui");
|
|
33
35
|
info(`Invoking ${script} ${args.join(" ")}…`);
|
|
34
36
|
try {
|
|
35
37
|
await execa("bash", [script, ...args], {
|
package/dist/runners/sim.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sim.js","sourceRoot":"","sources":["../../src/runners/sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"sim.js","sourceRoot":"","sources":["../../src/runners/sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAS9C,KAAK,UAAU,MAAM,CAAC,KAAoB,EAAE,IAAmB;IAC7D,MAAM,CAAC,oBAAoB,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAElD,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,IAAI,CACF,uCAAuC,MAAM,KAAK;YAChD,6EAA6E;YAC7E,4EAA4E;YAC5E,8CAA8C,CACjD,CAAC;QACF,OAAO;IACT,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IACzC,UAAU,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;IAElC,MAAM,IAAI,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,IAAI,CAAC,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,CAAC,YAAY,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;YACrC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,0BAA0B,EAAE,EAAE,EAAE;YACvD,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,GAAG,CAAC,sBAAsB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAmB;IACjD,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAmB;IACjD,OAAO,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC"}
|
package/package.json
CHANGED
package/runtime/BUNDLE.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"packedAt": "2026-06-
|
|
2
|
+
"packedAt": "2026-06-05T21:21:33.732Z",
|
|
3
3
|
"repo": "https://github.com/PlaiPin/agenticros",
|
|
4
4
|
"note": "This directory is a snapshot of the agenticros monorepo source. `agenticros init` will copy it to ~/agenticros and run pnpm install + colcon build there.",
|
|
5
5
|
"layout": {
|
|
@@ -280,12 +280,32 @@ export class LocalTransport implements RosTransport {
|
|
|
280
280
|
async listTopics(): Promise<TopicInfo[]> {
|
|
281
281
|
this.ensureConnected();
|
|
282
282
|
|
|
283
|
-
|
|
284
|
-
|
|
283
|
+
// DDS discovery is asynchronous. On a freshly-connected node,
|
|
284
|
+
// getTopicNamesAndTypes() trickles in results as peers respond - the
|
|
285
|
+
// first call may return 0, the second 2, the third all of them.
|
|
286
|
+
// Poll until the count is stable across two consecutive 300ms reads (or
|
|
287
|
+
// time-bounded to ~3s) so we don't return a partial view.
|
|
288
|
+
const externalFilter = (t: { name: string; types: string[] }) =>
|
|
289
|
+
!INTERNAL_TOPIC_PREFIXES.some((prefix) => t.name.startsWith(prefix));
|
|
290
|
+
|
|
291
|
+
const deadline = Date.now() + 3000;
|
|
292
|
+
let raw: Array<{ name: string; types: string[] }> = [];
|
|
293
|
+
let prevCount = -1;
|
|
294
|
+
let stableHits = 0;
|
|
295
|
+
while (Date.now() < deadline) {
|
|
296
|
+
raw = this.node.getTopicNamesAndTypes();
|
|
297
|
+
const externalCount = raw.filter(externalFilter).length;
|
|
298
|
+
if (externalCount === prevCount && externalCount > 0) {
|
|
299
|
+
stableHits++;
|
|
300
|
+
if (stableHits >= 1) break; // one stable confirmation is enough
|
|
301
|
+
} else {
|
|
302
|
+
stableHits = 0;
|
|
303
|
+
prevCount = externalCount;
|
|
304
|
+
}
|
|
305
|
+
await new Promise<void>((resolve) => setTimeout(resolve, 300));
|
|
306
|
+
}
|
|
285
307
|
|
|
286
|
-
return
|
|
287
|
-
.filter((t) => !INTERNAL_TOPIC_PREFIXES.some((prefix) => t.name.startsWith(prefix)))
|
|
288
|
-
.map((t) => ({ name: t.name, type: t.types[0] ?? "" }));
|
|
308
|
+
return raw.filter(externalFilter).map((t) => ({ name: t.name, type: t.types[0] ?? "" }));
|
|
289
309
|
}
|
|
290
310
|
|
|
291
311
|
async listServices(): Promise<ServiceInfo[]> {
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.10)
|
|
2
|
+
project(agenticros_sim)
|
|
3
|
+
|
|
4
|
+
# This package is share-only: SDF worlds, model definitions, YAML configs,
|
|
5
|
+
# Python launch files. No compiled targets — ament_cmake exists only to give
|
|
6
|
+
# us a proper ROS 2 package with `ros2 launch` discovery and a share/ install.
|
|
7
|
+
|
|
8
|
+
find_package(ament_cmake REQUIRED)
|
|
9
|
+
|
|
10
|
+
install(DIRECTORY
|
|
11
|
+
launch
|
|
12
|
+
worlds
|
|
13
|
+
models
|
|
14
|
+
config
|
|
15
|
+
DESTINATION share/${PROJECT_NAME}/
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Tell gz_sim where to find our world + model files at runtime when the
|
|
19
|
+
# package is installed (colcon-built workspaces source this via the
|
|
20
|
+
# package.dsv environment hooks installed below).
|
|
21
|
+
ament_environment_hooks(${CMAKE_CURRENT_SOURCE_DIR}/env-hooks/gz_resource_path.sh.in)
|
|
22
|
+
ament_environment_hooks(${CMAKE_CURRENT_SOURCE_DIR}/env-hooks/gz_resource_path.dsv.in)
|
|
23
|
+
|
|
24
|
+
ament_package()
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# agenticros_sim
|
|
2
|
+
|
|
3
|
+
Gazebo Harmonic simulation assets for the AgenticROS project: an indoor world,
|
|
4
|
+
a 2-wheel diff-drive AMR with a depth camera + 2D lidar + IMU, and a `ros_gz_
|
|
5
|
+
bridge` config that exposes everything on the topic names the real-robot
|
|
6
|
+
plugin already expects.
|
|
7
|
+
|
|
8
|
+
## What's inside
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
agenticros_sim/
|
|
12
|
+
├── worlds/agenticros_indoor.sdf 12 x 12 m indoor room with obstacles
|
|
13
|
+
│ and one "person" target for follow-me
|
|
14
|
+
├── models/agenticros_amr/ 2-wheel diff-drive AMR with sensors
|
|
15
|
+
│ ├── model.config
|
|
16
|
+
│ └── model.sdf
|
|
17
|
+
├── config/
|
|
18
|
+
│ ├── amr_bridge.yaml gz <-> ROS topic mapping
|
|
19
|
+
│ └── amr_view.rviz RViz config showing camera, scan, TF
|
|
20
|
+
├── launch/sim_amr.launch.py One-stop launcher
|
|
21
|
+
├── env-hooks/ Add the package's share/ to GZ_SIM_RESOURCE_PATH
|
|
22
|
+
└── CMakeLists.txt + package.xml Standard ament_cmake skeleton
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Quick start
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Easiest: use the agenticros CLI (handles ROS sourcing + workspace build).
|
|
29
|
+
agenticros up sim-amr # GUI
|
|
30
|
+
agenticros up sim-amr --rviz # GUI + RViz panel
|
|
31
|
+
agenticros up sim-amr --no-camera # (no effect for sim - flag is real-only)
|
|
32
|
+
|
|
33
|
+
# Or run the launch file directly:
|
|
34
|
+
cd ros2_ws && colcon build --symlink-install --packages-select agenticros_sim
|
|
35
|
+
source install/setup.bash
|
|
36
|
+
ros2 launch agenticros_sim sim_amr.launch.py
|
|
37
|
+
ros2 launch agenticros_sim sim_amr.launch.py use_rviz:=true
|
|
38
|
+
ros2 launch agenticros_sim sim_amr.launch.py gui:=false # headless
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Topic layout
|
|
42
|
+
|
|
43
|
+
The bridge YAML deliberately matches the real-robot AgenticROS plugin's topic
|
|
44
|
+
names so any code that works against the real RealSense + diff-drive base
|
|
45
|
+
works against sim without configuration changes.
|
|
46
|
+
|
|
47
|
+
| Topic | Type | Direction |
|
|
48
|
+
|---------------------------------------------|---------------------------------|-----------|
|
|
49
|
+
| `/cmd_vel` | `geometry_msgs/msg/Twist` | ROS -> GZ |
|
|
50
|
+
| `/odom` | `nav_msgs/msg/Odometry` | GZ -> ROS |
|
|
51
|
+
| `/tf`, `/tf_static` | `tf2_msgs/msg/TFMessage` | GZ -> ROS |
|
|
52
|
+
| `/joint_states` | `sensor_msgs/msg/JointState` | GZ -> ROS |
|
|
53
|
+
| `/camera/camera/color/image_raw` | `sensor_msgs/msg/Image` | GZ -> ROS |
|
|
54
|
+
| `/camera/camera/color/camera_info` | `sensor_msgs/msg/CameraInfo` | GZ -> ROS |
|
|
55
|
+
| `/camera/camera/depth/image_rect_raw` | `sensor_msgs/msg/Image` (32FC1) | GZ -> ROS |
|
|
56
|
+
| `/camera/camera/depth/camera_info` | `sensor_msgs/msg/CameraInfo` | GZ -> ROS |
|
|
57
|
+
| `/camera/camera/depth/points` | `sensor_msgs/msg/PointCloud2` | GZ -> ROS |
|
|
58
|
+
| `/scan` | `sensor_msgs/msg/LaserScan` | GZ -> ROS |
|
|
59
|
+
| `/imu/data` | `sensor_msgs/msg/Imu` | GZ -> ROS |
|
|
60
|
+
| `/clock` | `rosgraph_msgs/msg/Clock` | GZ -> ROS |
|
|
61
|
+
|
|
62
|
+
## AMR specs
|
|
63
|
+
|
|
64
|
+
| Property | Value |
|
|
65
|
+
|-------------------------|-------------------------------------------|
|
|
66
|
+
| Footprint | 0.40 m x 0.30 m chassis |
|
|
67
|
+
| Wheel diameter | 0.16 m |
|
|
68
|
+
| Wheel separation | 0.36 m |
|
|
69
|
+
| Front sensor (RGBD) | 640 x 480, 30 Hz, 87° HFOV (D435-like) |
|
|
70
|
+
| Depth encoding | 32FC1 (float32 metres) |
|
|
71
|
+
| LIDAR | 360 samples, 12 Hz, 12 m range |
|
|
72
|
+
| IMU | 100 Hz, mild gaussian noise |
|
|
73
|
+
| Max linear acceleration | 1.0 m/s² |
|
|
74
|
+
| Max angular acceleration| 2.0 rad/s² |
|
|
75
|
+
|
|
76
|
+
## Notes & gotchas
|
|
77
|
+
|
|
78
|
+
- **Depth encoding**: the `rgbd_camera` plugin actually emits **16UC1 in
|
|
79
|
+
millimetres** when bridged via `ros_gz_bridge` on Humble. This matches the
|
|
80
|
+
real RealSense D435 driver's default 16UC1/mm encoding — the AgenticROS
|
|
81
|
+
depth-loop handles it natively. (Newer Gazebo versions may default to 32FC1;
|
|
82
|
+
the depth-loop normaliser handles both.)
|
|
83
|
+
- **`use_sim_time`**: defaulted to `true`. Any downstream node that subscribes
|
|
84
|
+
to bridged topics should also set `use_sim_time:=true`, or it will mismatch
|
|
85
|
+
timestamps.
|
|
86
|
+
- **Heavy worlds**: the indoor world is intentionally tiny so it runs on
|
|
87
|
+
Jetson-class hardware. For bigger demos, use the `world` launch arg with
|
|
88
|
+
one of the upstream `gazebo_models_worlds_collection` SDFs.
|
|
89
|
+
- **Why two TF bridges?** `/tf` is bridged as a regular topic, while
|
|
90
|
+
`/tf_static` rides over the pose_static endpoint with a transient_local QoS
|
|
91
|
+
override applied in the launch file.
|
|
92
|
+
|
|
93
|
+
## Known sharp edges (Phase 2 smoke-test findings on Jetson + Humble)
|
|
94
|
+
|
|
95
|
+
These are non-fatal but worth knowing as you build sim demos:
|
|
96
|
+
|
|
97
|
+
1. **`/odom` does not flow through the bridge.** The gz-sim diff-drive plugin
|
|
98
|
+
publishes `gz.msgs.Odometry` to `/odometry`, but `ros_gz_bridge` on Humble
|
|
99
|
+
appears to expect `gz.msgs.OdometryWithCovariance` for the
|
|
100
|
+
`nav_msgs/msg/Odometry` mapping. The other transforms (`/tf`, `/tf_static`)
|
|
101
|
+
work and are usually enough for navigation demos. Fix candidates:
|
|
102
|
+
add an `<odom_publisher_topic>` for `_with_covariance` in the diff-drive
|
|
103
|
+
config, or write a tiny relay node. Tracked for Phase 4 polish.
|
|
104
|
+
2. **`/camera/camera/color/image_raw` is silent in headless mode** on this
|
|
105
|
+
Jetson (`libEGL: failed to create dri2 screen`). Depth, lidar, IMU, and
|
|
106
|
+
joint_states all stream correctly regardless. With `gui:=true` (a real
|
|
107
|
+
display attached) RGB recovers. Run `gz sim --versions` to make sure
|
|
108
|
+
you're on Harmonic; older Garden / Citadel may have a different EGL path.
|
|
109
|
+
3. **gz CLI tools (`gz topic -e`, `gz topic --info`) sometimes can't reach
|
|
110
|
+
the running simulator** because gz publishes on the Docker bridge IP
|
|
111
|
+
(`172.17.0.1`) on this host. The ROS-side bridge still subscribes
|
|
112
|
+
successfully — you just won't be able to debug-echo at the gz layer. Use
|
|
113
|
+
ROS-side `ros2 topic` commands instead.
|
|
114
|
+
4. **Depth values can saturate well past `<far>`** when no surface is in the
|
|
115
|
+
camera frustum. The follow-me-depth algorithm clamps to `[0.5 m, 4.0 m]`,
|
|
116
|
+
which inherently filters this; if you write your own depth consumer,
|
|
117
|
+
add the same clamp.
|
|
118
|
+
5. **Two `set` lines:** `run_sim.sh` uses `set -eo pipefail` (not `set -u`)
|
|
119
|
+
because the ROS 2 `setup.bash` references some variables before defining
|
|
120
|
+
them, which would otherwise abort the script.
|