|
@@ -1,7 +1,7 @@
|
|
|
/*
|
|
|
* @Author: adam_zhuo
|
|
|
* @Date: 2021-01-23 11:08:19
|
|
|
- * @LastEditTime: 2021-01-23 14:59:50
|
|
|
+ * @LastEditTime: 2021-01-25 19:06:54
|
|
|
* @LastEditors: Please set LastEditors
|
|
|
* @Description: In User Settings Edit
|
|
|
* @FilePath: /blackTornadoRobot/src/robot_new_year/src/robot_new_year_server_node.cpp
|
|
@@ -45,17 +45,24 @@ ros_arduino_msgs::GripperAngle gripper_srv;
|
|
|
ros_arduino_msgs::GripperControl control_srv;
|
|
|
|
|
|
float vertical_linear_x_speed;
|
|
|
+float horizon_linear_y_speed;
|
|
|
float turn_angular_z_speed;
|
|
|
float curve_linear_x_speed,curve_angular_z_speed;
|
|
|
float diagonal_linear_x_speed,diagonal_linear_y_speed;
|
|
|
|
|
|
-float first_vertical_distance,second_vertical_distance;
|
|
|
+float first_vertical_distance,second_vertical_distance,first_horizon_distance;
|
|
|
+float third_vertical_distance,forth_vertical_distance,fifth_vertical_distance;
|
|
|
float diagonal_distance;
|
|
|
int gripper_open_angle,gripper_close_angle;
|
|
|
-float first_turn_yaw,second_turn_yaw;
|
|
|
+float first_turn_yaw,second_turn_yaw,initial_yaw;
|
|
|
|
|
|
float tolerance_d;
|
|
|
|
|
|
+float first_delay;
|
|
|
+float second_delay;
|
|
|
+float third_delay;
|
|
|
+float forth_delay;
|
|
|
+
|
|
|
string odom_frame = "/odom_combined";
|
|
|
string base_frame = "/base_footprint";
|
|
|
|
|
@@ -102,6 +109,9 @@ void robot_move(int move_flag,const float check_dist)
|
|
|
case VERTICAL_MOVE:
|
|
|
pub_twist_cmd(copysign(vertical_linear_x_speed,check_dist), 0, 0);
|
|
|
break;
|
|
|
+ case HORIZON_MOVE:
|
|
|
+ pub_twist_cmd(0,copysign(horizon_linear_y_speed,check_dist),0);
|
|
|
+ break;
|
|
|
case DIAGONAL_MOVE:
|
|
|
pub_twist_cmd(diagonal_linear_x_speed,diagonal_linear_y_speed,0);
|
|
|
break;
|
|
@@ -136,20 +146,52 @@ void robot_turn(float target,float angular_z_speed){
|
|
|
}
|
|
|
}
|
|
|
pub_twist_cmd(0, 0, 0);
|
|
|
+ // bool flag = true;
|
|
|
+ // float now_yaw,start_yaw,target_yaw;
|
|
|
+ // yaw_srv_client.call(yaw_srv);
|
|
|
+ // now_yaw = yaw_srv.response.yaw;
|
|
|
+ // start_yaw = now_yaw;
|
|
|
+ // target_yaw = fabs(start_yaw - initial_yaw);
|
|
|
+ // while(flag){
|
|
|
+ // pub_twist_cmd(0, 0, angular_z_speed);
|
|
|
+ // ros::Duration(0.005).sleep();
|
|
|
+ // yaw_srv_client.call(yaw_srv);
|
|
|
+ // now_yaw = yaw_srv.response.yaw;
|
|
|
+ // if((target_yaw-fabs(now_yaw - start_yaw))<0.005){
|
|
|
+ // flag = false;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // pub_twist_cmd(0, 0, 0);
|
|
|
}
|
|
|
|
|
|
void robot_curve(){
|
|
|
- float start_yaw;
|
|
|
- float now_yaw;
|
|
|
+ // float start_yaw;
|
|
|
+ // float now_yaw;
|
|
|
+ // bool flag = true;
|
|
|
+ // yaw_srv_client.call(yaw_srv);
|
|
|
+ // start_yaw = yaw_srv.response.yaw;
|
|
|
+ // while(flag){
|
|
|
+ // pub_twist_cmd(curve_linear_x_speed, 0, curve_angular_z_speed);
|
|
|
+ // ros::Duration(0.1).sleep();
|
|
|
+ // yaw_srv_client.call(yaw_srv);
|
|
|
+ // now_yaw = yaw_srv.response.yaw;
|
|
|
+ // if((1.57-fabs(now_yaw - start_yaw))<0.005){
|
|
|
+ // flag = false;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // pub_twist_cmd(0, 0, 0);
|
|
|
bool flag = true;
|
|
|
+ float now_yaw,start_yaw,target_yaw;
|
|
|
yaw_srv_client.call(yaw_srv);
|
|
|
- start_yaw = yaw_srv.response.yaw;
|
|
|
+ now_yaw = yaw_srv.response.yaw;
|
|
|
+ start_yaw = now_yaw;
|
|
|
+ target_yaw = fabs(start_yaw - initial_yaw);
|
|
|
while(flag){
|
|
|
pub_twist_cmd(curve_linear_x_speed, 0, curve_angular_z_speed);
|
|
|
- ros::Duration(0.1).sleep();
|
|
|
+ ros::Duration(0.005).sleep();
|
|
|
yaw_srv_client.call(yaw_srv);
|
|
|
now_yaw = yaw_srv.response.yaw;
|
|
|
- if((1.57-fabs(now_yaw - start_yaw))<0.005){
|
|
|
+ if((target_yaw-fabs(now_yaw - start_yaw))<0.005){
|
|
|
flag = false;
|
|
|
}
|
|
|
}
|
|
@@ -169,31 +211,28 @@ void voice(string words){
|
|
|
voice_pub.publish(lucky);
|
|
|
}
|
|
|
|
|
|
-void control_up(){
|
|
|
+void control_up(int time){
|
|
|
control_srv.request.servoID = 0;
|
|
|
control_srv.request.value = 1;
|
|
|
control_srv_client.call(control_srv);
|
|
|
- ros::Duration(2).sleep();
|
|
|
- control_srv.request.value = 3;
|
|
|
+ ros::Duration(time).sleep();
|
|
|
+ control_srv.request.value = 2;
|
|
|
control_srv_client.call(control_srv);
|
|
|
}
|
|
|
|
|
|
-void control_down(){
|
|
|
+void control_down(int time){
|
|
|
control_srv.request.servoID = 0;
|
|
|
- control_srv.request.value = 2;
|
|
|
- control_srv_client.call(control_srv);
|
|
|
- ros::Duration(2).sleep();
|
|
|
control_srv.request.value = 3;
|
|
|
control_srv_client.call(control_srv);
|
|
|
+ ros::Duration(time).sleep();
|
|
|
+ control_srv.request.value = 2;
|
|
|
+ control_srv_client.call(control_srv);
|
|
|
}
|
|
|
|
|
|
void execute(const robot_new_year::new_yearGoalConstPtr& new_year_goal, Server* as)
|
|
|
{
|
|
|
robot_new_year::new_yearFeedback feedback;
|
|
|
ROS_INFO("THE GOAL IS: %d", new_year_goal -> goal);
|
|
|
- // feedback.complete_percent = 2;
|
|
|
- // as -> publishFeedback(feedback);
|
|
|
- // r.sleep();
|
|
|
switch(new_year_goal -> goal){
|
|
|
case 1:
|
|
|
robot_move(VERTICAL_MOVE,first_vertical_distance);
|
|
@@ -202,25 +241,51 @@ void execute(const robot_new_year::new_yearGoalConstPtr& new_year_goal, Server*
|
|
|
robot_turn(first_turn_yaw,turn_angular_z_speed);
|
|
|
break;
|
|
|
case 3:
|
|
|
+ ros::Duration(first_delay).sleep();
|
|
|
+ break;
|
|
|
+ case 4:
|
|
|
robot_turn(second_turn_yaw,turn_angular_z_speed);
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
robot_turn(second_turn_yaw,-turn_angular_z_speed);
|
|
|
+ break;
|
|
|
+ case 6:
|
|
|
robot_turn(second_turn_yaw,turn_angular_z_speed);
|
|
|
+ break;
|
|
|
+ case 7:
|
|
|
robot_turn(second_turn_yaw,-turn_angular_z_speed);
|
|
|
gripper(gripper_open_angle);
|
|
|
break;
|
|
|
- case 4:
|
|
|
+ case 8:
|
|
|
+ control_down(second_delay);
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
robot_curve();
|
|
|
break;
|
|
|
- case 5:
|
|
|
+ case 10:
|
|
|
robot_move(VERTICAL_MOVE,second_vertical_distance);
|
|
|
break;
|
|
|
- case 6:
|
|
|
+ case 11:
|
|
|
gripper(gripper_close_angle);
|
|
|
- control_up();
|
|
|
+ control_up(third_delay);
|
|
|
break;
|
|
|
- case 7:
|
|
|
+ case 12:
|
|
|
+ robot_move(HORIZON_MOVE,first_horizon_distance);
|
|
|
+ break;
|
|
|
+ case 13:
|
|
|
robot_move(DIAGONAL_MOVE,diagonal_distance);
|
|
|
- control_down();
|
|
|
+ break;
|
|
|
+ case 14:
|
|
|
+ control_down(forth_delay);
|
|
|
+ break;
|
|
|
+ case 15:
|
|
|
+ robot_move(VERTICAL_MOVE,third_vertical_distance);
|
|
|
+ break;
|
|
|
+ case 16:
|
|
|
+ robot_move(VERTICAL_MOVE,forth_vertical_distance);
|
|
|
+ break;
|
|
|
+ case 17:
|
|
|
+ robot_move(VERTICAL_MOVE,fifth_vertical_distance);
|
|
|
break;
|
|
|
}
|
|
|
as -> setSucceeded();
|
|
@@ -235,11 +300,9 @@ int main(int argc, char **argv)
|
|
|
string control_service;
|
|
|
string last_words;
|
|
|
string future_words;
|
|
|
- float first_delay;
|
|
|
- float second_delay;
|
|
|
|
|
|
ros::init(argc, argv, "robot_new_year_server_node");
|
|
|
- ros::NodeHandle nh("~");
|
|
|
+ ros::NodeHandle nh;
|
|
|
|
|
|
ros::param::get("~odom_frame", odom_frame);
|
|
|
ros::param::get("~base_frame", base_frame);
|
|
@@ -249,13 +312,18 @@ int main(int argc, char **argv)
|
|
|
ros::param::get("~gripper_service", gripper_service);
|
|
|
ros::param::get("~control_service", control_service);
|
|
|
ros::param::get("~vertical_linear_x_speed", vertical_linear_x_speed);
|
|
|
+ ros::param::get("~horizon_linear_y_speed", horizon_linear_y_speed);
|
|
|
ros::param::get("~turn_angular_z_speed", turn_angular_z_speed);
|
|
|
ros::param::get("~curve_linear_x_speed", curve_linear_x_speed);
|
|
|
ros::param::get("~curve_angular_z_speed", curve_angular_z_speed);
|
|
|
ros::param::get("~diagonal_linear_x_speed", diagonal_linear_x_speed);
|
|
|
ros::param::get("~diagonal_linear_y_speed", diagonal_linear_y_speed);
|
|
|
ros::param::get("~first_vertical_distance", first_vertical_distance);
|
|
|
+ ros::param::get("~first_horizon_distance", first_horizon_distance);
|
|
|
ros::param::get("~second_vertical_distance", second_vertical_distance);
|
|
|
+ ros::param::get("~third_vertical_distance", third_vertical_distance);
|
|
|
+ ros::param::get("~forth_vertical_distance", forth_vertical_distance);
|
|
|
+ ros::param::get("~fifth_vertical_distance", fifth_vertical_distance);
|
|
|
ros::param::get("~first_turn_yaw", first_turn_yaw);
|
|
|
ros::param::get("~second_turn_yaw", second_turn_yaw);
|
|
|
ros::param::get("~diagonal_distance", diagonal_distance);
|
|
@@ -266,6 +334,8 @@ int main(int argc, char **argv)
|
|
|
ros::param::get("~future_words", future_words);
|
|
|
ros::param::get("~first_delay", first_delay);
|
|
|
ros::param::get("~second_delay", second_delay);
|
|
|
+ ros::param::get("~third_delay", third_delay);
|
|
|
+ ros::param::get("~forth_delay", forth_delay);
|
|
|
|
|
|
cmd_pub = nh.advertise<geometry_msgs::Twist>(cmd_topic, 1);
|
|
|
voice_pub = nh.advertise<std_msgs::String>(voice_topic, 1);
|
|
@@ -273,6 +343,9 @@ int main(int argc, char **argv)
|
|
|
gripper_srv_client = nh.serviceClient<ros_arduino_msgs::GripperAngle>(gripper_service);
|
|
|
control_srv_client = nh.serviceClient<ros_arduino_msgs::GripperControl>(control_service);
|
|
|
|
|
|
+ yaw_srv_client.call(yaw_srv);
|
|
|
+ initial_yaw = yaw_srv.response.yaw;
|
|
|
+
|
|
|
Server server(nh, "action_new_year", boost::bind(&execute, _1, &server), false);
|
|
|
server.start();
|
|
|
|