refactor(brain): replace arm_action_define constants in cerebellum arm flow
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
#include "brain/cerebellum_hooks.hpp"
|
||||
#include "brain/cerebellum_node.hpp"
|
||||
#include "brain/payload_converters.hpp"
|
||||
#include "arm_action_define.h"
|
||||
// #include "arm_action_define.h"
|
||||
#include "interfaces/action/dual_arm.hpp"
|
||||
#include "interfaces/msg/arm_motion_params.hpp"
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
#include <sstream>
|
||||
#include <iomanip>
|
||||
@@ -49,43 +50,43 @@ void CerebellumHooks::ConfigureArmHooks(CerebellumNode * node)
|
||||
RCLCPP_INFO(node->get_logger(), "[%s]Received Parse Arm goal: body_id=%d, data_type=%d, data_length=%d, command_id=%ld, frame_time_stamp=%ld",
|
||||
skill_name.c_str(), goal.body_id, goal.data_type, goal.data_length, goal.command_id, goal.frame_time_stamp);
|
||||
|
||||
goal.body_id = (CerebellumNode::tls_arm_body_id == LEFT_ARM ||
|
||||
CerebellumNode::tls_arm_body_id == RIGHT_ARM) ? CerebellumNode::tls_arm_body_id : goal.body_id;
|
||||
goal.body_id = (CerebellumNode::tls_arm_body_id == interfaces::msg::ArmMotionParams::ARM_LEFT ||
|
||||
CerebellumNode::tls_arm_body_id == interfaces::msg::ArmMotionParams::ARM_RIGHT) ? CerebellumNode::tls_arm_body_id : goal.body_id;
|
||||
goal.command_id = ++node->command_id_;
|
||||
if (goal.body_id == LEFT_ARM) {
|
||||
if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_LEFT) {
|
||||
node->command_id_left_arm_ = goal.command_id;
|
||||
} else if (goal.body_id == RIGHT_ARM) {
|
||||
} else if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_RIGHT) {
|
||||
node->command_id_right_arm_ = goal.command_id;
|
||||
}
|
||||
goal.frame_time_stamp = node->get_clock()->now().nanoseconds();
|
||||
|
||||
if (goal.data_type == ARM_COMMAND_TYPE_POSE_DIRECT_MOVE) {
|
||||
if (goal.data_length == POSE_DIMENSION*2 && goal.data_array.size() == POSE_DIMENSION*2) {
|
||||
if (goal.body_id == LEFT_ARM) {
|
||||
if (goal.data_type == 3) {
|
||||
if (goal.data_length == 7*2 && goal.data_array.size() == 7*2) {
|
||||
if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_LEFT) {
|
||||
goal.data_array = {goal.data_array[0], goal.data_array[1], goal.data_array[2],
|
||||
goal.data_array[3], goal.data_array[4], goal.data_array[5], goal.data_array[6]};
|
||||
} else if (goal.body_id == RIGHT_ARM) {
|
||||
} else if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_RIGHT) {
|
||||
goal.data_array = {goal.data_array[7], goal.data_array[8], goal.data_array[9],
|
||||
goal.data_array[10], goal.data_array[11], goal.data_array[12], goal.data_array[13]};
|
||||
}
|
||||
goal.data_length = POSE_DIMENSION;
|
||||
goal.data_length = 7;
|
||||
}
|
||||
} else if (goal.data_type == ARM_COMMAND_TYPE_ANGLE_DIRECT_MOVE) {
|
||||
if (goal.data_length == USED_ARM_DOF*2 && goal.data_array.size() == USED_ARM_DOF*2) {
|
||||
if (goal.body_id == LEFT_ARM) {
|
||||
} else if (goal.data_type == 2) {
|
||||
if (goal.data_length == 6*2 && goal.data_array.size() == 6*2) {
|
||||
if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_LEFT) {
|
||||
goal.data_array = {goal.data_array[0], goal.data_array[1], goal.data_array[2],
|
||||
goal.data_array[3], goal.data_array[4], goal.data_array[5]};
|
||||
} else if (goal.body_id == RIGHT_ARM) {
|
||||
} else if (goal.body_id == interfaces::msg::ArmMotionParams::ARM_RIGHT) {
|
||||
goal.data_array = {goal.data_array[6], goal.data_array[7], goal.data_array[8], goal.data_array[9],
|
||||
goal.data_array[10], goal.data_array[11]};
|
||||
}
|
||||
goal.data_length = USED_ARM_DOF;
|
||||
goal.data_length = 6;
|
||||
}
|
||||
} else if (goal.data_type >= node->arm_cmd_type_custom_min_ && goal.data_type <= node->arm_cmd_type_custom_max_) {
|
||||
geometry_msgs::msg::Pose pose;
|
||||
std::vector<double> angle(6, 360.0); //invalid angles
|
||||
|
||||
const std::string side = (goal.body_id == RIGHT_ARM) ? "right_arm_" : "left_arm_";
|
||||
const std::string side = (goal.body_id == interfaces::msg::ArmMotionParams::ARM_RIGHT) ? "right_arm_" : "left_arm_";
|
||||
const char * action = nullptr;
|
||||
if (goal.data_type == node->arm_cmd_type_take_photo_) { //take photo
|
||||
action = "take_photo";
|
||||
@@ -116,17 +117,17 @@ void CerebellumHooks::ConfigureArmHooks(CerebellumNode * node)
|
||||
load_cached_pose_angle(side, action);
|
||||
|
||||
#ifdef USE_ARM_POSE_DIRECT_MOVE
|
||||
goal.data_type = ARM_COMMAND_TYPE_POSE_DIRECT_MOVE;
|
||||
goal.data_length = POSE_DIMENSION;
|
||||
goal.data_type = 3;
|
||||
goal.data_length = 7;
|
||||
goal.data_array = {pose.position.x, pose.position.y, pose.position.z,
|
||||
pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w};
|
||||
#elif defined(USE_ARM_ANGLE_DIRECT_MOVE)
|
||||
if (angle.size() == USED_ARM_DOF) {
|
||||
goal.data_type = ARM_COMMAND_TYPE_ANGLE_DIRECT_MOVE;
|
||||
goal.data_length = USED_ARM_DOF;
|
||||
if (angle.size() == 6) {
|
||||
goal.data_type = 2;
|
||||
goal.data_length = 6;
|
||||
goal.data_array = {angle[0], angle[1], angle[2], angle[3], angle[4], angle[5]};
|
||||
} else {
|
||||
RCLCPP_ERROR(node->get_logger(), "ARM make goal error: invalid angle size: %ld/%d", angle.size(), USED_ARM_DOF);
|
||||
RCLCPP_ERROR(node->get_logger(), "ARM make goal error: invalid angle size: %ld/%d", angle.size(), 6);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@@ -135,7 +136,7 @@ void CerebellumHooks::ConfigureArmHooks(CerebellumNode * node)
|
||||
return goal;
|
||||
}
|
||||
|
||||
if (goal.data_array.size() >= USED_ARM_DOF) {
|
||||
if (goal.data_array.size() >= 6) {
|
||||
RCLCPP_INFO(node->get_logger(), "[%s] Control params: body_id=%d, data_type=%d, data_length=%d, command_id=%ld, frame_time_stamp=%ld, data_array=[%.6f, %.6f, %.6f, %.6f, %.6f, %.6f]",
|
||||
skill_name.c_str(), goal.body_id, goal.data_type, goal.data_length, goal.command_id, goal.frame_time_stamp,
|
||||
goal.data_array[0], goal.data_array[1], goal.data_array[2], goal.data_array[3], goal.data_array[4], goal.data_array[5]);
|
||||
@@ -158,7 +159,7 @@ void CerebellumHooks::ConfigureArmHooks(CerebellumNode * node)
|
||||
hooks.on_result = [node](
|
||||
const std::string & skill_name,
|
||||
const ActionClientRegistry::GoalHandle<interfaces::action::Arm>::WrappedResult & res) {
|
||||
const bool success = (res.code == rclcpp_action::ResultCode::SUCCEEDED && res.result && res.result->result == OK);
|
||||
const bool success = (res.code == rclcpp_action::ResultCode::SUCCEEDED && res.result && res.result->result == 0);
|
||||
const std::string message = res.result ? std::string("action end") : std::string("No return information");
|
||||
|
||||
geometry_msgs::msg::Pose pose = res.result->pose;
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
#include <tf2_geometry_msgs/tf2_geometry_msgs.hpp>
|
||||
#include <tf2_ros/buffer.h>
|
||||
#include <tf2_ros/transform_listener.h>
|
||||
#include "arm_action_define.h"
|
||||
// #include "arm_action_define.h"
|
||||
|
||||
namespace brain
|
||||
{
|
||||
@@ -884,7 +884,7 @@ bool CerebellumNode::ExecuteBilateralArmAction(
|
||||
time_steady = std::chrono::steady_clock::now();
|
||||
RCLCPP_WARN(this->get_logger(), "left_arm_time_steady2");
|
||||
};
|
||||
std::thread left_arm_thread(left_arm_worker, LEFT_ARM); // LEFT_ARM=0
|
||||
std::thread left_arm_thread(left_arm_worker, interfaces::msg::ArmMotionParams::ARM_LEFT); // ARM_LEFT=0
|
||||
|
||||
auto right_arm_worker = [this, &ok_out = right_arm_ok, &done_flag = right_arm_finished, &d_out = right_arm_d,
|
||||
skill, interface_name, topic, timeout, &goal_handle, &time_steady = right_arm_time_steady, instance_name](int body_id) {
|
||||
@@ -898,7 +898,7 @@ bool CerebellumNode::ExecuteBilateralArmAction(
|
||||
time_steady = std::chrono::steady_clock::now();
|
||||
RCLCPP_WARN(this->get_logger(), "right_arm_time_steady2");
|
||||
};
|
||||
std::thread right_arm_thread(right_arm_worker, RIGHT_ARM); // RIGHT_ARM=1
|
||||
std::thread right_arm_thread(right_arm_worker, interfaces::msg::ArmMotionParams::ARM_RIGHT); // ARM_RIGHT=1
|
||||
|
||||
const auto start_steady = std::chrono::steady_clock::now();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user