眾擎機器人開源代碼解讀

一,綜述

EngineAI ROS 包:

  • 高層開發模式:用戶可通過發布身體速度指令,直接調用 EngineAI 機器人的行走控制器。
  • 底層開發模式:用戶可通過發布關節指令,自主開發專屬的控制器。
  • ROS2 package:全稱為 “Robot Operating System 2 Package”(機器人操作系統 2 功能包),是 ROS2 生態中用于組織代碼、配置文件等資源的基本單元,便于模塊化開發與復用。
  • body velocity command:“身體速度指令”,通常包含機器人在三維空間中的線速度(如前后、左右移動速度)和角速度(如轉向速度),是高層控制中常用的指令類型,無需用戶關注單個關節的運動細節。
  • joint command:“關節指令”,針對機器人單個或多個關節的控制指令(如目標角度、角速度等),底層開發模式下用戶需通過該指令精確控制關節運動,以實現自定義動作或控制邏輯。

二,接口協議

Topic/Service Name

Type

RateMessageDescriptionDataStructure
/hardware/gamepad_keysTopic Publish>=500hzGamepadKeys.msgGamepad Message Feedback

# Timestamp field using ROS2 header
uint8 LB = 0
uint8 RB = 1
uint8 A = 2
uint8 B = 3
uint8 X = 4
uint8 Y = 5
uint8 BACK = 6
uint8 START = 7
uint8 CROSS_X_UP = 8
uint8 CROSS_X_DOWN = 9
uint8 CROSS_Y_LEFT = 10
uint8 CROSS_Y_RIGHT = 11

uint8 LT = 0
uint8 RT = 1
uint8 LEFT_STICK_X = 2
uint8 LEFT_STICK_Y = 3
uint8 RIGHT_STICK_X = 4
uint8 RIGHT_STICK_Y = 5

std_msgs/Header header

# Digital buttons (0 = released, 1 = pressed)
int32[12] digital_states ?# Fixed size array of 12 elements

# Analog inputs (range: -1.0 to 1.0)
float64[6] analog_states ?# Fixed size array of 6 elements

/hardware/imu_infoTopic Publish>=500hzIMUInfo.msgIMU Sensor Feedbackstd_msgs/Header header
geometry_msgs/Quaternion quaternion
geometry_msgs/Vector3 rpy
geometry_msgs/Vector3 linear_acceleration
geometry_msgs/Vector3 angular_velocity
?
/hardware/joint_stateTopic Publish>=500hzJointState.msgJoint Status Feedbackstd_msgs/Header header
float64[] position
float64[] velocity
float64[] torque
?
/hardware/joint_commandTopic Subscription0~500hzJointCommand.msgJoint Command Subscriptionstd_msgs/Header header
float64[] position
float64[] velocity
float64[] feed_forward_torque
float64[] torque
float64[] stiffness
float64[] damping
uint8 parallel_parser_type
/motion/motion_stateTopic Publish>=5hzMotionState.msgMotion Status Feedback of Robotstring current_motion_task
/hardware/motor_debugTopic Publish>=50hzMotorDebug.msgFeedback of Temperature, Tau, etc.float64[] tau_cmd
float64[] mos_temperature
float64[] motor_temperature
/motion/body_vel_cmdTopic Publish>=5hzBodyVelCmd.msgbody velocity command publish, linear_x_vel ranges [-0.5m/s +0.5m/s] linear_y_vel ranges [-0.2m/s, +0.2m/s], yaw_vel rangs [-0.5rad/s, 0.5rad/s]

std_msgs/Header header


float64[] linear_velocity


float64 yaw_velocity

/heartbeat

std_msgs/Header header

string node_name

int64 startup_timestamp

# idle, running, error, sleep
string node_status

int64 error_code

string error_message

/enablemotorserveEnableMotor.srvbool enable
---
bool success
string message
?

三,工作區架構及編譯環境

└── src├── interface_example # Interface examples, recommended to run on Nezha├── interface_protocol # Interface protocols, common modules├── third_party # Third-party libraries├── simulation # Simulation environment running on host
  • Ubuntu 22.04
  • ROS2 Humble Desktop
  • GCC >= 11
  • CMake >= 3.22
  • Python >= 3.10

四,FSM 三個模式:操縱桿模式,高層開發模式,底層開發模式

操縱桿模式、高層開發模式和底層開發模式的有限狀態機(FSM)

操縱桿狀態機

注意:LB+CORSS_Y_LEFT 是切入 joint commands即低層開發控制

高層開發模式

Body Velocity Control

底層開發模式

底層開發(Low-level Development)允許用戶使用基于 EngineAI 開源強化學習(RL)訓練框架(倉庫地址:https://github.com/engineai-robotics/engineai_gym)訓練的自定義強化學習控制器。用戶可按照以下步驟逐步操作,實現基于 Mujoco 模擬器的 “仿真到仿真”(sim2sim)功能及實際部署。

五,部署操作:
在主機上運行 rl_basic_example 程序

步驟 1:進入 PD 站立模式(pd-stand mode)

  1. 確保機器人穩固放置在平整地面上,且周圍有足夠操作空間;
  2. 使用遙控器進入 PD 站立模式;
  3. 繼續操作前,請確認機器人已穩定站立。

步驟 2:進入關節橋接模式(joint bridge mode)

關節橋接模式支持通過關節指令對機器人進行控制,操作步驟如下:

  1. 當機器人處于 PD 站立模式時,按下遙控器的【LB 鍵 + 左十字鍵 Y 向(CROSS_Y_LEFT)】組合鍵;
  2. 機器人將進入關節橋接模式,此時可通過關節指令對其進行控制;
  3. 執行以下命令驗證機器人狀態:

    bash

    # 在主機端執行
    ros2 topic echo /motion/motion_state
    
  4. 繼續操作前,請確認運動狀態(motion state)顯示為 “joint_bridge”。

步驟 3:運行強化學習(RL)示例程序

安全警告(SAFETY WARNING)
  • 確保所有人員與機器人保持安全距離;
  • 若機器人出現異常動作,請隨時準備緊急停止(可按下急停按鈕或使機器人進入被動模式)。
啟動示例程序?執行以下命令啟動示例程序:bash
# 在主機端執行
ros2 launch interface_example rl_basic_example.launch.py

六,編譯

幾個腳本梳理:

1)同步代碼到板級
主機(host)?端執行以下命令:./scripts/sync_src.sh nezha
(說明:“nezha” 指 “哪吒” 目標板,是該機器人系統適配的硬件設備;sync_src.sh為代碼同步腳本,用于將主機端的開發代碼傳輸到目標板,確保兩端代碼一致性。)
2)構建工作空間
????????首先通過 SSH 連接到哪吒板(Nezha board),并進入工作空間目錄:
cd ~/source/engineai_workspace
(說明:~/source/engineai_workspace是代碼在目標板上的默認工作空間路徑,cd命令用于切換到該目錄。)
????????然后執行構建腳本,編譯節點代碼:
./scripts/build_nodes.sh
(說明:build_nodes.sh是用于編譯機器人功能節點的腳本,“nodes” 指 ROS 2 框架中的 “節點”,是實現具體功能的可執行單元,編譯后生成可運行的程序文件。)
3)運行 PlotJuggler 進行數據監控
主機(host)?端編譯interface_protocol功能包:
# in host
colcon build --packages-select interface_protocol
(說明:colcon是 ROS 2 的官方構建工具,--packages-select interface_protocol表示僅編譯 “interface_protocol” 這一個功能包,該包通常包含機器人的數據通信協議相關代碼。)
source install/setup.bash
(說明:source命令用于加載腳本文件,install/setup.bash是編譯后生成的環境配置腳本,加載后主機才能識別并運行后續的 ROS 2 程序。)
ros2 run plotjuggler plotjuggler -n
(說明:ros2 run用于啟動 ROS 2 功能包中的可執行程序,-n是 PlotJuggler 的參數,全稱 “--no-config”,表示不自動加載之前保存的配置文件,便于用戶重新選擇需監控的數據話題。)
src/interface_protocol/pm_data_layout.xml
(說明:“layout file”(布局文件)包含數據圖表的排列、待監控的話題選擇等配置,加載后無需手動設置即可直接查看預設的機器人關鍵數據,如關節角度、電機電流等。)
?

check_format.sh

使用場景

這個腳本通常會集成到 CI/CD 流程中,在代碼提交或 PR 創建時自動運行,確保提交的代碼符合項目的格式規范。也可以在開發過程中手動運行,提前發現并修復格式問題。

依賴工具

腳本需要以下工具在系統中可用:

  • clang-format (用于 C/C++ 格式化)
  • yamllint (用于 YAML 文件檢查)
  • autopep8 (用于 Python 格式檢查)
  • git (用于檢查文件變更)

如果需要修改檢查規則,可以相應調整各工具的配置文件(如.clang-format、.yamllint 等)。

七,代碼解析

interface_example
????????hold_joint_status.cc
????????????????
????????joint_test_example.cc
????????????????
????????rl_basic_example.cc
??????????????

simulation
??????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920862.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920862.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920862.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows系統安裝Git詳細教程

文章目錄步驟 1:下載 Git 安裝包步驟 2:運行安裝程序步驟 3:選擇安裝路徑步驟 4:選擇組件步驟 5:選擇默認編輯器步驟 6:選擇路徑環境變量步驟 7:選擇 HTTPS 協議的傳輸方式步驟 8:配…

leetcode 3446. 按對角線進行矩陣排序 中等

給你一個大小為 n x n 的整數方陣 grid。返回一個經過如下調整的矩陣:左下角三角形(包括中間對角線)的對角線按 非遞增順序 排序。右上角三角形 的對角線按 非遞減順序 排序。示例 1:輸入: grid [[1,7,3],[9,8,2],[4,…

攜程旅行 web 驗證碼 分析

聲明 本文章中所有內容僅供學習交流使用,不用于其他任何目的,抓包內容、敏感網址、數據接口等均已做脫敏處理,嚴禁用于商業用途和非法用途,否則由此產生的一切后果均與作者無關! 逆向分析 部分python代碼 result cp…

JavaEE 進階第一期:開啟前端入門之旅(上)

專欄:JavaEE 進階躍遷營 個人主頁:手握風云 一、HTML基礎 1.1. 什么是HTML HTML(Hyper Text Markup Language),超文本標記語言。 超文本:比文本要強大,通過鏈接和交互式方式來組織和呈現信息的文本形式。不僅僅有文本…

4.5 PBR

1.PBR簡介 2.高光工作流 3.金屬工作流1.PBR簡介 PBR(Physically Based Rendering, 基于物理的渲染)的工作流分為金屬工作流和高光工作流2.高光工作流 高光工作流是一種傳統的工作流, 現在用的相對較少, 但是在某些特定情況下能提供更精細的控制a.核心思想它不區分金屬和非金屬,…

09.《路由基礎知識解析和實踐》

09.路由基礎 文章目錄09.路由基礎核心概念路由關鍵組成部分三層轉發原理介紹(通信流程)路由類型及配置直連路由(direct)實驗示例**靜態路由(Static)****實驗示例****動態路由****RIP(routing information protocol---路…

websocket建立連接過程

1. 客戶端發送一個GET的http請求,請求頭要包含connection: upgradehost:localhost:8000。表明地址upgrade: websocket。指明升級的協議sec-websocket-key 。 安全驗證密鑰sec-websocket-version。 協議版本sec-websocket-accept 。對傳過來的key進行加密…

Simulink庫文件-一種低通濾波模塊搭建方法

在汽車電控系統應用層開發中,經常會用到低通濾波模塊,其主要作用是去除輸入信號中的高頻干擾,防止由于輸入信號的干擾引起后續執行系統的非預期頻繁波動。本文介紹簡要介紹低通濾波的定義及作用,并介紹一種低通濾波模塊simulink搭…

【C++游記】AVL樹

楓の個人主頁 你不能改變過去,但你可以改變未來 算法/C/數據結構/C Hello,這里是小楓。C語言與數據結構和算法初階兩個板塊都更新完畢,我們繼續來學習C的內容呀。C是接近底層有比較經典的語言,因此學習起來注定枯燥無味&#xf…

音視頻學習(六十二):H264中的SEI

什么是SEI? 在 H.264 視頻編碼標準中,補充增強信息(Supplemental Enhancement Information,SEI) 是一種特殊的 NAL(網絡抽象層)單元。它不像序列參數集(SPS)或圖像參數集&#xff0…

docker run 后報錯/bin/bash: /bin/bash: cannot execute binary file總結

以下方法來源于AI&#xff0c;個人僅驗證了第三條便成功執行 1. 鏡像與宿主機架構不匹配 比如&#xff1a; 你是 x86_64 的機器&#xff0c;但鏡像是 ARM64 的&#xff08;或反之&#xff09;。在 PC 上拉了樹莓派用的鏡像。查看鏡像架構 docker inspect <image_name> | …

【Redisson 加鎖源碼解析】

Redisson 源碼解析 —— 分布式鎖實現過程 在分布式系統中&#xff0c;分布式鎖 是非常常見的需求&#xff0c;用來保證多個節點之間的互斥操作。Redisson 是 Redis 的一個 Java 客戶端&#xff0c;它提供了對分布式鎖的良好封裝。本文將從源碼角度剖析 Redisson 的分布式鎖實現…

uni-app支持單多選、搜索、查詢、限制能否點擊組件

<template><view class="multi-select-container" :class="{ single-select: !multiple, no-search: !searchable }"><!-- 當組件被禁用時,直接顯示選中的內容 --><view class="disabled-display" v-if="disabled &a…

TFT屏幕:STM32硬件SPI+DMA+隊列自動傳輸

看了網上的很多的SPIDMA的代碼&#xff0c;感覺都有一些缺陷&#xff0c;就是基本都是需要有手動等待DMA完成的這個操作&#xff0c;我感覺這種等待操作在很大程度上浪費了時間&#xff0c;那么我加入的“隊列”就是一種將等待時間利用起來的方法。原本的SPIDMA的操作邏輯如下圖…

AI操作系統語言模型設計 之1 基于意識的Face-Gate-Window的共軛路徑的思維-認知-情感嵌套模型

摘要&#xff08;AI生成&#xff09;本文提出了一種創新的AI操作系統語言模型設計框架&#xff0c;將人類意識活動的分層結構映射到人工智能系統中。該模型包含三個嵌套層次&#xff1a;理性思維層&#xff08;Face層&#xff09;&#xff1a;采用雙面膠隱喻&#xff08;A/B面&…

瘋狂星期四文案網第57天運營日記

網站運營第57天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 今日訪問量 今日搜索引擎收錄情況

SQLark:一款面向信創應用開發者的數據庫開發和管理工具

SQLark 是一款面向信創應用開發者的數據庫開發和管理工具&#xff0c;用于快速查詢、創建和管理不同類型的數據庫系統&#xff0c;現已支持達夢、Oracle、MySQL、PostgreSQL 數據庫。 SQLark 提供了對多種數據庫的連接支持&#xff0c;實現跨平臺數據庫管理的無縫切換&#xff…

BigDecimal——解決Java浮點數值精度問題:快速入門與使用

在Java開發中&#xff0c;涉及金額計算、科學計數或需要高精度數值處理時&#xff0c;你是否遇到過這樣的困惑&#xff1f;用double計算0.1加0.2&#xff0c;結果竟不是0.3&#xff1b;用float存儲商品價格&#xff0c;小數點后兩位莫名多出幾位亂碼&#xff1b;甚至在金融系統…

wpf之WrapPanel

前言 WrapPanel類似winform中的FlowLayoutPanel&#xff0c;采用流式布局。 1、Orientation 該屬性指定WrapPanel中子空間布局的方向&#xff0c;有水平和垂直方向兩種 1&#xff09;Horizontal 水平方向 子元素Button按照水平方向排列&#xff0c;如果一行排滿了自動換下一…

Woody:開源Java應用性能診斷分析工具

核心價值 Woody是一款專注于Java應用性能問題診斷的工具&#xff0c;旨在幫助開發者 定位高GC頻率問題&#xff0c;識別內存分配熱點分析CPU使用率過高的代碼路徑追蹤接口耗時瓶頸&#xff0c;定位內部操作耗時占比診斷鎖競爭問題&#xff0c;支持精準優化針對特定業務接口/請…