Project

General

Profile

Statistics
| Branch: | Revision:

root / mikrokopter / mikrokopter / src / nav_lib.cpp @ 98711613

History | View | Annotate | Download (1.95 KB)

1 da889457 Tom Mullins
#include "nav_lib.h"
2
3 dd56aeef Tom Mullins
MikrokopterControl::MikrokopterControl()
4 493cca7c Chris Burchhardt
{
5 dd56aeef Tom Mullins
    control.digital[0] = 0;
6
    control.digital[1] = 0;
7
    control.remoteKey = 0;
8
    control.pitch = 0;
9
    control.roll = 0;
10
    control.yaw = 0;
11
    control.thrust = 40;
12
    control.height = 0;
13
    control.free = 0;
14
    control.frame = 7;
15
    control.config = 1;
16 da889457 Tom Mullins
}
17
18 fd29b28e Priya
void MikrokopterControl::velocity_control(float forward_speed, float lateral_speed)
19 bc4b408e Tom Mullins
{
20 84a809d3 Nicolas
    if(forward_speed > 1) forward_speed = 1;
21
    if(forward_speed < -1) forward_speed = -1;
22
    if(lateral_speed > 1) lateral_speed = 1;
23
    if(lateral_speed < -1) lateral_speed = -1; 
24 fd29b28e Priya
    int k = 50; // TODO set scaling constant and check signs
25 bc4b408e Tom Mullins
    control.roll = k*(forward_speed - lateral_speed);
26
    control.pitch = k*(forward_speed + lateral_speed);
27
}
28
29 dd56aeef Tom Mullins
void MikrokopterControl::forward()
30 da889457 Tom Mullins
{
31 d58012b5 Chris Burchhardt
    control.roll = 15;
32
    control.pitch = 15;
33
}
34
35
void MikrokopterControl::backward()
36
{
37 dd56aeef Tom Mullins
    control.roll = -15;
38
    control.pitch = -15;
39 da889457 Tom Mullins
}
40
41 d58012b5 Chris Burchhardt
void MikrokopterControl::left()
42 da889457 Tom Mullins
{
43 dd56aeef Tom Mullins
    control.roll = 15;
44 d58012b5 Chris Burchhardt
    control.pitch = -15;
45 da889457 Tom Mullins
}
46
47 d58012b5 Chris Burchhardt
void MikrokopterControl::right()
48 da889457 Tom Mullins
{
49 dd56aeef Tom Mullins
    control.roll = -15;
50
    control.pitch = 15;
51 da889457 Tom Mullins
}
52
53 d58012b5 Chris Burchhardt
void MikrokopterControl::level()
54 da889457 Tom Mullins
{
55 d58012b5 Chris Burchhardt
    control.roll = 0;
56
    control.pitch = 0;
57 da889457 Tom Mullins
}
58
59 fd29b28e Priya
void MikrokopterControl::set_thrust(float thrust)
60 da889457 Tom Mullins
{
61 737bd480 Tom Mullins
    if (thrust < 0) thrust = 0;
62
    if (thrust > 1) thrust = 1;
63 08b4f0df Tom Mullins
    int k = 255;
64 fd29b28e Priya
    control.thrust = k*thrust;
65
}
66
67
void MikrokopterControl::set_yaw(float yaw)
68
{
69 84a809d3 Nicolas
    if(yaw>1) yaw = 1;
70
    if(yaw<-1) yaw = -1;
71
    int k = 50;;
72 fd29b28e Priya
    control.yaw = k*yaw;
73 dd56aeef Tom Mullins
}
74
75
void MikrokopterControl::publish_on(ros::Publisher& pub)
76
{
77
    pub.publish(control);
78 da889457 Tom Mullins
}
79 493cca7c Chris Burchhardt
80 7a6ed02d Tom Mullins
void MikrokopterControl::main_loop()
81
{
82
    ros::Publisher pub = nh.advertise< ::mikrokopter::Control>(
83
        "/mk_wrapper/control", 200);
84
    
85
    int publish_rate;
86 bc5901d3 Tom Mullins
    ros::param::param<int>("~publish_rate", publish_rate, 20);
87 7a6ed02d Tom Mullins
    ros::Rate loop_rate(publish_rate);
88
    
89
    while (ros::ok())
90
    {
91
        ros::spinOnce();
92
        pub.publish(control);
93
        loop_rate.sleep();
94
    }
95
    
96
}