增加URDF文件注册测试入口
This commit is contained in:
@@ -382,9 +382,16 @@
|
||||
<label for="robot-uuid">robot_uuid</label>
|
||||
<input id="robot-uuid" value="abb_irb120_3_58" />
|
||||
</div>
|
||||
<div class="field full">
|
||||
<label for="urdf-file">URDF 文件</label>
|
||||
<input id="urdf-file" type="file" accept=".xml,.urdf" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<button id="init-btn" type="button">初始化</button>
|
||||
<button id="register-urdf-btn" class="secondary" type="button">
|
||||
注册 URDF
|
||||
</button>
|
||||
<button id="reset-btn" class="secondary" type="button">零位</button>
|
||||
</div>
|
||||
</section>
|
||||
@@ -507,6 +514,7 @@
|
||||
wasmStatus: document.getElementById("wasm-status"),
|
||||
solverStatus: document.getElementById("solver-status"),
|
||||
robotUuid: document.getElementById("robot-uuid"),
|
||||
urdfFile: document.getElementById("urdf-file"),
|
||||
jointControls: document.getElementById("joint-controls"),
|
||||
requestJson: document.getElementById("request-json"),
|
||||
responseJson: document.getElementById("response-json"),
|
||||
@@ -521,6 +529,7 @@
|
||||
jointCountValue: document.getElementById("joint-count-value"),
|
||||
toast: document.getElementById("toast"),
|
||||
initBtn: document.getElementById("init-btn"),
|
||||
registerUrdfBtn: document.getElementById("register-urdf-btn"),
|
||||
resetBtn: document.getElementById("reset-btn"),
|
||||
fkBtn: document.getElementById("fk-btn"),
|
||||
ikBtn: document.getElementById("ik-btn"),
|
||||
@@ -756,6 +765,67 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 读取本地 URDF 文件并注册为当前 robot_uuid。
|
||||
async function registerUrdfFromFile() {
|
||||
await ensureInitialized();
|
||||
const file = elements.urdfFile.files?.[0];
|
||||
const robotUuid = elements.robotUuid.value.trim();
|
||||
|
||||
if (!file) {
|
||||
showToast("请选择 URDF 文件");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!robotUuid) {
|
||||
showToast("请先填写 robot_uuid");
|
||||
return;
|
||||
}
|
||||
|
||||
setBusy(true, "正在注册 URDF");
|
||||
try {
|
||||
const urdfText = await file.text();
|
||||
const request = {
|
||||
msg: "threejs init robot from urdf",
|
||||
req_code: `THREE_INIT_URDF_${Date.now()}`,
|
||||
req_from: "threejs_test",
|
||||
req_cmd: "Cmd_InitRobot",
|
||||
req_param: {
|
||||
robot_uuid: robotUuid,
|
||||
force_update: true,
|
||||
urdf_base64: encodeUtf8Base64(urdfText),
|
||||
},
|
||||
};
|
||||
|
||||
renderJson(request, null);
|
||||
const response = await api.processBusinessRequest(request);
|
||||
renderJson(request, response);
|
||||
|
||||
if (response.success && response.res_data?.success) {
|
||||
state.latestIkJoints = null;
|
||||
elements.applyIkBtn.disabled = true;
|
||||
setStatus("URDF 注册完成", true);
|
||||
await runForwardKinematics();
|
||||
} else {
|
||||
setStatus("URDF 注册失败", false);
|
||||
showToast(response.res_data?.message || response.msg || "URDF 注册失败");
|
||||
}
|
||||
} catch (error) {
|
||||
showError(error);
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
}
|
||||
|
||||
// 将 URDF 文本编码成接口需要的 UTF-8 Base64 字符串。
|
||||
function encodeUtf8Base64(value) {
|
||||
const bytes = new TextEncoder().encode(value);
|
||||
let binary = "";
|
||||
bytes.forEach((byte) => {
|
||||
binary += String.fromCharCode(byte);
|
||||
});
|
||||
return btoa(binary);
|
||||
}
|
||||
|
||||
// 确保调用算法前已经完成初始化。
|
||||
async function ensureInitialized() {
|
||||
if (!state.initialized) {
|
||||
@@ -1029,6 +1099,7 @@
|
||||
function setBusy(isBusy, label) {
|
||||
[
|
||||
elements.initBtn,
|
||||
elements.registerUrdfBtn,
|
||||
elements.resetBtn,
|
||||
elements.fkBtn,
|
||||
elements.ikBtn,
|
||||
@@ -1095,6 +1166,7 @@
|
||||
}
|
||||
|
||||
elements.initBtn.addEventListener("click", initializeWasm);
|
||||
elements.registerUrdfBtn.addEventListener("click", registerUrdfFromFile);
|
||||
elements.resetBtn.addEventListener("click", resetJoints);
|
||||
elements.fkBtn.addEventListener("click", runForwardKinematics);
|
||||
elements.ikBtn.addEventListener("click", runInverseKinematics);
|
||||
|
||||
Reference in New Issue
Block a user