1 changed files with 100 additions and 0 deletions
@ -0,0 +1,100 @@ |
|||
#include <ros/ros.h> |
|||
#include <ros/time.h> |
|||
#include <locale.h> |
|||
|
|||
#include <pcl_ros/point_cloud.h> |
|||
#include <pcl/point_types.h> |
|||
|
|||
#include <hand_control/Plan.h> |
|||
|
|||
#include <geometry_msgs/Twist.h> |
|||
|
|||
#include <math.h> |
|||
|
|||
class Run |
|||
{ |
|||
private: |
|||
float z_previous; |
|||
ros::Time t_previous; |
|||
ros::Time t_current; |
|||
ros::Rate loop_rate; |
|||
float dz; |
|||
float xx; |
|||
float yy; |
|||
float zz; |
|||
float x_speed; |
|||
float y_speed; |
|||
float z_speed_max; |
|||
|
|||
float precision; |
|||
|
|||
public: |
|||
Run() : |
|||
x_speed(0.2), |
|||
y_speed(0.2), |
|||
z_speed_max(0.5), |
|||
loop_rate(30) |
|||
{ |
|||
//Sensibilité du drône
|
|||
precision = 0.1; |
|||
} |
|||
|
|||
|
|||
void operator()(const hand_control::Plan::ConstPtr& msg) |
|||
{ |
|||
t_current = msg->header.stamp; |
|||
|
|||
dz = (msg->normal.z - z_previous)/(t_current.sec - t_previous.sec); |
|||
|
|||
xx = msg->normal.x ; |
|||
yy = msg->normal.y ; |
|||
//zz = msg->normal.z ;
|
|||
|
|||
t_previous = msg->header.stamp; |
|||
z_previous = msg->normal.z; |
|||
}; |
|||
|
|||
void run(){ |
|||
//pour initialiser mvt (twist)
|
|||
geometry_msgs::Twist::Ptr mvt_init(new geometry_msgs::Twist()); |
|||
mvt_init->linear.x = mvt_init->linear.y = mvt_init->linear.z = |
|||
mvt_init->angular.x = mvt_init->angular.y = mvt_init->angular.z = 0.; |
|||
|
|||
|
|||
while(ros::ok()){ |
|||
|
|||
geometry_msgs::Twist::Ptr mvt(new geometry_msgs::Twist()); |
|||
mvt = mvt_init; |
|||
|
|||
//mouvement selon z
|
|||
if (dz < z_speed_max){ //pour éviter un soulèvement trop prompt du drône
|
|||
mvt->linear.z = dz *0.1 ; |
|||
} |
|||
|
|||
//mouvement selon x ou y
|
|||
if (fabs(xx) > precision && fabs(yy) > precision ) |
|||
{ |
|||
mvt->linear.x = x_speed ; |
|||
mvt->linear.y = y_speed ; |
|||
} |
|||
|
|||
ros::spinOnce(); |
|||
loop_rate.sleep(); |
|||
}//end while
|
|||
}//end run
|
|||
|
|||
}; //class Callback
|
|||
|
|||
int main(int argc, char** argv) |
|||
{ |
|||
|
|||
|
|||
|
|||
ros::init(argc, argv, "commande"); |
|||
|
|||
Run run; |
|||
run.run(); |
|||
|
|||
|
|||
return 0; |
|||
} |
|||
Loading…
Reference in new issue