Project

General

Profile

Statistics
| Branch: | Revision:

root / mikrokopter / src / nav_lib.cpp @ bc5901d3

History | View | Annotate | Download (1.66 KB)

1
#include "nav_lib.h"
2

    
3
MikrokopterControl::MikrokopterControl()
4
{
5
    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
}
17

    
18
void MikrokopterControl::velocity_control(float forward_speed, float lateral_speed)
19
{
20
    int k = 50; // TODO set scaling constant and check signs
21
    control.roll = k*(forward_speed - lateral_speed);
22
    control.pitch = k*(forward_speed + lateral_speed);
23
}
24

    
25
void MikrokopterControl::forward()
26
{
27
    control.roll = 15;
28
    control.pitch = 15;
29
}
30

    
31
void MikrokopterControl::backward()
32
{
33
    control.roll = -15;
34
    control.pitch = -15;
35
}
36

    
37
void MikrokopterControl::left()
38
{
39
    control.roll = 15;
40
    control.pitch = -15;
41
}
42

    
43
void MikrokopterControl::right()
44
{
45
    control.roll = -15;
46
    control.pitch = 15;
47
}
48

    
49
void MikrokopterControl::level()
50
{
51
    control.roll = 0;
52
    control.pitch = 0;
53
}
54

    
55
void MikrokopterControl::set_thrust(float thrust)
56
{
57
    int k = 100;
58
    control.thrust = k*thrust;
59
}
60

    
61
void MikrokopterControl::set_yaw(float yaw)
62
{
63
    int k = 50;
64
    control.yaw = k*yaw;
65
}
66

    
67
void MikrokopterControl::publish_on(ros::Publisher& pub)
68
{
69
    pub.publish(control);
70
}
71

    
72
void MikrokopterControl::main_loop()
73
{
74
    ros::Publisher pub = nh.advertise< ::mikrokopter::Control>(
75
        "/mk_wrapper/control", 200);
76
    
77
    int publish_rate;
78
    ros::param::param<int>("~publish_rate", publish_rate, 20);
79
    ros::Rate loop_rate(publish_rate);
80
    
81
    while (ros::ok())
82
    {
83
        ros::spinOnce();
84
        pub.publish(control);
85
        loop_rate.sleep();
86
    }
87
    
88
}