Source: DeepRoboticsLab/sdk_deploy (BSD-3-Clause), M20 sim2real part only. Packages: - invicta_msgs: JointCommandArray, MotionCommand, MotionState; standard messages (sensor_msgs/JointState, sensor_msgs/Imu) elsewhere; shared motion value defs. - invicta_deploy: state machine (idle/standup/rl/joint-damping/lie-down), ONNX policy with per-gait models, auto RL entry after standup with readiness checks, safety loop, gait->model table; no protocol/network code. - invicta_remote: vendor basic_server protocol (UDP + JSON, proto.md V1.2.0), header/MsgId, 0xE0xx error codes, motion/usage-mode/gait translation, telemetry 1002/3,4,5,6 (2/10/2/2 Hz); publishes /motion_command, subscribes /motion_state. - invicta_hardware: joint/IMU bridge skeleton (SocketCAN I/O is TODO), publishes sensor_msgs/JointState + sensor_msgs/Imu, consumes /joint_commands. Verified on ROS Noetic (Ubuntu 20.04) in docker: clean catkin_make, 200 Hz joint state / 50 Hz RL commands / 20 Hz state report, protocol conformance (MotionParam, gait preconditions, error codes), telemetry push, and end-to-end switching of two policy models with a real remote controller.
28 lines
661 B
C++
28 lines
661 B
C++
/**
|
|
* @file main.cpp
|
|
* @brief invicta RL deploy 入口:ROS 回调跑在 main 线程,控制线程跑 200 Hz 状态机
|
|
*/
|
|
#include <ros/ros.h>
|
|
|
|
#include <iostream>
|
|
#include <memory>
|
|
|
|
#include "quadruped_wheel/invicta_state_machine.hpp"
|
|
|
|
using namespace types;
|
|
|
|
MotionStateFeedback StateBase::msfb_ = MotionStateFeedback();
|
|
|
|
int main(int argc, char** argv) {
|
|
ros::init(argc, argv, "invicta_deploy");
|
|
std::cout << "Invicta State Machine Start Running" << std::endl;
|
|
|
|
std::shared_ptr<StateMachineBase> fsm = std::make_shared<invicta::InvictaStateMachine>();
|
|
fsm->Start();
|
|
fsm->Run();
|
|
fsm->Stop();
|
|
|
|
ros::shutdown();
|
|
return 0;
|
|
}
|