#include #include #include #include #include enum class ControlParameterValueKind : uint64_t { kDOUBLE = 1, kS64 = 2, kVEC_X_DOUBLE = 3, // for template type derivation kMAT_X_DOUBLE = 4 // for template type derivation }; class ExampleNode: public rclcpp::Node { public: ExampleNode(std::string node_name):Node(node_name){}; ~ExampleNode(){}; }; int main(int argc, char** argv){ rclcpp::init(argc, argv); auto example_node_=std::make_shared("cyberdogmsg_node"); rclcpp::Publisher::SharedPtr para_pub_; rclcpp::Publisher::SharedPtr force_pub_; para_pub_=example_node_->create_publisher("yaml_parameter",10); force_pub_=example_node_->create_publisher("apply_force",10); auto param_message_ = cyberdog_msg::msg::YamlParam(); auto force_message_ = cyberdog_msg::msg::ApplyForce(); sleep(1); //send control mode to Gamepad_controller mode which can enable control from simulator program param_message_.name = "use_rc"; param_message_.kind = uint64_t(ControlParameterValueKind::kS64); param_message_.s64_value = int64_t(0); param_message_.is_user = 0; para_pub_->publish(param_message_); std::cout<<"switch to gamepad control model..."<publish(param_message_); std::cout<<"recovery stand ..."<publish(param_message_); std::cout<<"locomotion ..."< rel_pos_; std::array force_; force_[2] = 20; force_message_.link_name = "FL_knee"; force_message_.rel_pos = rel_pos_; force_message_.force = force_; force_message_.time = 2; force_pub_->publish(force_message_); std::cout<<"applying force on FL_knee ..."< vecxd_value_; vecxd_value_[0] = 0.2; vecxd_value_[2] = 0.25; param_message_.name = "des_roll_pitch_height"; param_message_.kind = uint64_t(ControlParameterValueKind::kVEC_X_DOUBLE); param_message_.vecxd_value = vecxd_value_; param_message_.is_user = 1; para_pub_->publish(param_message_); std::cout<<"set roll angle to 0.2 ..."<publish(param_message_); std::cout<<"recovery stand ..."<