| 120 | } |
| 121 | |
| 122 | int main(int argc, char **argv) { |
| 123 | ros::init(argc, argv, "cascade_PID"); |
| 124 | |
| 125 | ros::NodeHandle n("~"); |
| 126 | |
| 127 | double init_x, init_y, init_z; |
| 128 | double init_yaw; |
| 129 | double controller_rate, angle_stable_time, damping_ratio; |
| 130 | int drone_id; |
| 131 | std::string quad_name; |
| 132 | n.param("init_state_x", init_x, 0.0); |
| 133 | n.param("init_state_y", init_y, 0.0); |
| 134 | n.param("init_state_z", init_z, 1.0); |
| 135 | n.param("init_state_yaw", init_yaw, 1.0); |
| 136 | init_yaw = init_yaw / 180.0 * M_PI; |
| 137 | yaw_des = init_yaw; |
| 138 | n.param("controller_rate", controller_rate, 200.0); |
| 139 | n.param("quadrotor_name", quad_name, std::string("quadrotor")); |
| 140 | n.param("angle_stable_time", angle_stable_time, 0.1); |
| 141 | n.param("damping_ratio", damping_ratio, 0.7); |
| 142 | n.param("drone_id", drone_id, 0); |
| 143 | |
| 144 | control_RPM_pub = n.advertise<std_msgs::Float32MultiArray>("cmd_RPM", 100); |
| 145 | ros::Subscriber odom_sub = n.subscribe("odom", 100, Odom_callback, |
| 146 | ros::TransportHints().tcpNoDelay()); |
| 147 | ros::Subscriber cmd_sub = n.subscribe("cmd_pose", 100, cmd_callback, |
| 148 | ros::TransportHints().tcpNoDelay()); |
| 149 | ros::Subscriber position_cmd_sub_ = |
| 150 | n.subscribe("position_cmd", 10, fuel_position_cmd_callback, |
| 151 | ros::TransportHints().tcpNoDelay()); |
| 152 | |
| 153 | quad_PID.setdroneid(drone_id); |
| 154 | |
| 155 | ros::Timer controller_timer = |
| 156 | n.createTimer(ros::Duration(1.0 / controller_rate), run_control); |
| 157 | |
| 158 | Matrix3d Internal_mat; |
| 159 | Internal_mat << 2.64e-3, 0, 0, 0, 2.64e-3, 0, 0, 0, 4.96e-3; |
| 160 | double arm_length = 0.22; |
| 161 | double k_F = 8.98132e-9; |
| 162 | k_F = 3.0 * k_F; |
| 163 | double mass = 1.9; |
| 164 | |
| 165 | // cascadePID quad_PID(controller_rate); |
| 166 | quad_PID.setrate(controller_rate); |
| 167 | quad_PID.setInternal(mass, Internal_mat, arm_length, k_F); |
| 168 | quad_PID.setParam(angle_stable_time, damping_ratio); |
| 169 | |
| 170 | ros::Rate rate(controller_rate); |
| 171 | rate.sleep(); |
| 172 | |
| 173 | pos_des << init_x, init_y, init_z; |
| 174 | vel_des << 0, 0, 0; |
| 175 | acc_des << 0, 0, 0; |
| 176 | |
| 177 | t_init = ros::Time::now(); |
| 178 | |
| 179 | ros::spin(); |
nothing calls this directly
no test coverage detected