Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ateam_joystick_control/config/common_params.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
/joystick_control_node:
ros__parameters:
dribbler_speed_step: 10.0
dribbler_speed_step: 0.01
2 changes: 1 addition & 1 deletion ateam_joystick_control/config/xbox_joy_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
axis: 3
scale: 4.0
kick: "axis 5 < -0.8"
chip: "button 5"
pivot: "button 5"
dribbler:
increment: "button 3"
decrement: "button 2"
Expand Down
50 changes: 35 additions & 15 deletions ateam_joystick_control/src/joystick_control_node.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ class JoystickControlNode : public rclcpp::Node

kick_trigger_ = ParseTriggerFunction(declare_parameter<std::string>("mapping.kick",
"axis 5 < -0.8"));
chip_trigger_ = ParseTriggerFunction(declare_parameter<std::string>("mapping.chip",
"button 5"));
pivot_trigger_ = ParseTriggerFunction(declare_parameter<std::string>("mappign.pivot",
Comment thread
barulicm marked this conversation as resolved.
Outdated
"button 5"));
dribbler_increment_trigger_ =
ParseTriggerFunction(declare_parameter<std::string>("mapping.dribbler.increment",
"button 3"));
Expand All @@ -77,16 +77,20 @@ class JoystickControlNode : public rclcpp::Node
{"linear.x.scale", 1.0},
{"linear.y.scale", 1.0},
{"angular.z.scale", 1.0},
{"dribbler.max", 1000.0},
{"dribbler.max", 1.0},
{"dribbler.min", 0.0}
});

// controls the size of steps when changing dribbler speed
declare_parameter<double>("dribbler_speed_step", 10.0);
declare_parameter<double>("dribbler_speed_step", 0.01);

declare_parameter<double>("kick_speed", 5.0);
declare_parameter<double>("chip_speed", 5.0);

// When true, joystick axes fill the global-frame pose (x, y, theta) and commands are sent as
// BCM_GLOBAL_POSITION instead of BCM_LOCAL_VELOCITY.
declare_parameter<bool>("use_global_position", false);

CreatePublisher(declare_parameter<int>("robot_id", -1));
parameter_callback_handle_ =
add_on_set_parameters_callback(
Expand All @@ -105,7 +109,7 @@ class JoystickControlNode : public rclcpp::Node
sensor_msgs::msg::Joy prev_joy_msg_;

TriggerFunction kick_trigger_;
TriggerFunction chip_trigger_;
TriggerFunction pivot_trigger_;
TriggerFunction dribbler_increment_trigger_;
TriggerFunction dribbler_decrement_trigger_;
TriggerFunction dribbler_spin_trigger_;
Expand Down Expand Up @@ -156,20 +160,34 @@ class JoystickControlNode : public rclcpp::Node

ateam_msgs::msg::RobotMotionCommand command_message;

command_message.body_control_mode = ateam_msgs::msg::RobotMotionCommand::BCM_LOCAL_VELOCITY;
command_message.velocity.x = get_parameter("mapping.linear.x.scale").as_double() *
joy_message->axes[linear_x_axis_];
command_message.velocity.y = get_parameter("mapping.linear.y.scale").as_double() *
joy_message->axes[linear_y_axis_];
command_message.velocity.theta = get_parameter("mapping.angular.z.scale").as_double() *
joy_message->axes[angular_z_axis_];
if (pivot_trigger_(*joy_message)) {
command_message.body_control_mode = ateam_msgs::msg::RobotMotionCommand::BCM_HEADING_PIVOT;
command_message.pivot_orbit_radius = kRobotRadius + kBallRadius;
command_message.pivot_inset_angle = M_PI / 2;

command_message.pivot_global_theta = M_PI * joy_message->axes[angular_z_axis_];
} else if (get_parameter("use_global_position").as_bool()) {
command_message.body_control_mode =
ateam_msgs::msg::RobotMotionCommand::BCM_GLOBAL_POSITION;
command_message.pose.x = get_parameter("mapping.linear.x.scale").as_double() *
joy_message->axes[linear_x_axis_];
command_message.pose.y = get_parameter("mapping.linear.y.scale").as_double() *
joy_message->axes[linear_y_axis_];
command_message.pose.theta = get_parameter("mapping.angular.z.scale").as_double() *
joy_message->axes[angular_z_axis_];
} else {
command_message.body_control_mode = ateam_msgs::msg::RobotMotionCommand::BCM_LOCAL_VELOCITY;
command_message.velocity.x = get_parameter("mapping.linear.x.scale").as_double() *
joy_message->axes[linear_x_axis_];
command_message.velocity.y = get_parameter("mapping.linear.y.scale").as_double() *
joy_message->axes[linear_y_axis_];
command_message.velocity.theta = get_parameter("mapping.angular.z.scale").as_double() *
joy_message->axes[angular_z_axis_];
}

if (kick_trigger_(*joy_message)) {
command_message.kick_request = ateam_msgs::msg::RobotMotionCommand::KR_KICK_TOUCH;
command_message.kick_speed = get_parameter("kick_speed").as_double();
} else if (chip_trigger_(*joy_message)) {
command_message.kick_request = ateam_msgs::msg::RobotMotionCommand::KR_CHIP_TOUCH;
command_message.kick_speed = get_parameter("chip_speed").as_double();
} else {
command_message.kick_request = ateam_msgs::msg::RobotMotionCommand::KR_ARM;
}
Expand All @@ -185,8 +203,10 @@ class JoystickControlNode : public rclcpp::Node
dribbler_speed_, static_cast<float>(get_parameter("mapping.dribbler.min").as_double()),
static_cast<float>(get_parameter("mapping.dribbler.max").as_double()));
if (dribbler_spin_trigger_(*joy_message)) {
command_message.dribbler_mode = ateam_msgs::msg::RobotMotionCommand::DC_CURRENT;
command_message.dribbler_setpoint = dribbler_speed_;
} else {
command_message.dribbler_mode = ateam_msgs::msg::RobotMotionCommand::DC_DISABLE;
command_message.dribbler_setpoint = 0.0;
}

Expand Down
Loading