Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
crazyflie-lib-python
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Lukas Wegmann
crazyflie-lib-python
Commits
43e7a5fc
Commit
43e7a5fc
authored
6 years ago
by
Kristoffer Richardsson
Browse files
Options
Downloads
Patches
Plain Diff
#101 Added missing file
parent
024889d9
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
cflib/crazyflie/high_level_commander.py
+181
-0
181 additions, 0 deletions
cflib/crazyflie/high_level_commander.py
examples/autonomous_sequence_high_level.py
+1
-1
1 addition, 1 deletion
examples/autonomous_sequence_high_level.py
with
182 additions
and
1 deletion
cflib/crazyflie/high_level_commander.py
0 → 100644
+
181
−
0
View file @
43e7a5fc
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# || ____ _ __
# +------+ / __ )(_) /_______________ _____ ___
# | 0xBC | / __ / / __/ ___/ ___/ __ `/_ / / _ \
# +------+ / /_/ / / /_/ /__/ / / /_/ / / /_/ __/
# || || /_____/_/\__/\___/_/ \__,_/ /___/\___/
#
# Copyright (C) 2018 Bitcraze AB
#
# Crazyflie Nano Quadcopter Client
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
"""
Used for sending high level setpoints to the Crazyflie
"""
import
struct
from
cflib.crtp.crtpstack
import
CRTPPacket
from
cflib.crtp.crtpstack
import
CRTPPort
__author__
=
'
Bitcraze AB
'
__all__
=
[
'
HighLevelCommander
'
]
class
HighLevelCommander
():
"""
Used for sending high level setpoints to the Crazyflie
"""
COMMAND_SET_GROUP_MASK
=
0
COMMAND_TAKEOFF
=
1
COMMAND_LAND
=
2
COMMAND_STOP
=
3
COMMAND_GO_TO
=
4
COMMAND_START_TRAJECTORY
=
5
COMMAND_DEFINE_TRAJECTORY
=
6
ALL_GROUPS
=
0
TRAJECTORY_LOCATION_MEM
=
1
TRAJECTORY_TYPE_POLY4D
=
0
def
__init__
(
self
,
crazyflie
=
None
):
"""
Initialize the object.
"""
self
.
_cf
=
crazyflie
def
set_group_mask
(
self
,
group_mask
=
ALL_GROUPS
):
"""
Set the group mask that the Crazyflie belongs to
:param group_mask: mask for which groups this CF belongs to
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BB
'
,
self
.
COMMAND_SET_GROUP_MASK
,
group_mask
))
def
takeoff
(
self
,
absolute_height_m
,
duration_s
,
group_mask
=
ALL_GROUPS
):
"""
vertical takeoff from current x-y position to given height
:param absolute_height_m: absolut (m)
:param duration_s: time it should take until target height is
reached (s)
:param group_mask: mask for which CFs this should apply to
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BBff
'
,
self
.
COMMAND_TAKEOFF
,
group_mask
,
absolute_height_m
,
duration_s
))
def
land
(
self
,
absolute_height_m
,
duration_s
,
group_mask
=
ALL_GROUPS
):
"""
vertical land from current x-y position to given height
:param absolute_height_m: absolut (m)
:param duration_s: time it should take until target height is
reached (s)
:param group_mask: mask for which CFs this should apply to
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BBff
'
,
self
.
COMMAND_LAND
,
group_mask
,
absolute_height_m
,
duration_s
))
def
stop
(
self
,
group_mask
=
ALL_GROUPS
):
"""
stops the current trajectory (turns off the motors)
:param group_mask: mask for which CFs this should apply to
:return:
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BB
'
,
self
.
COMMAND_STOP
,
group_mask
))
def
go_to
(
self
,
x
,
y
,
z
,
yaw
,
duration_s
,
relative
=
False
,
group_mask
=
ALL_GROUPS
):
"""
Go to an absolute or relative position
:param x: x (m)
:param y: y (m)
:param z: z (m)
:param yaw: yaw (radians)
:param duration_s: time it should take to reach the position (s)
:param relative: True if x, y, z is relative to the current position
:param group_mask: mask for which CFs this should apply to
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BBBfffff
'
,
self
.
COMMAND_GO_TO
,
group_mask
,
relative
,
x
,
y
,
z
,
yaw
,
duration_s
))
def
start_trajectory
(
self
,
trajectory_id
,
time_scale
=
1.0
,
relative
=
False
,
reversed
=
False
,
group_mask
=
ALL_GROUPS
):
"""
starts executing a specified trajectory
:param trajectory_id: id of the trajectory (previously defined by
define_trajectory)
:param time_scale: time factor; 1.0 = original speed;
>1.0: slower;
<1.0: faster
:param relative: set to True, if trajectory should be shifted to
current setpoint
:param reversed: set to True, if trajectory should be executed in
reverse
:param group_mask: mask for which CFs this should apply to
:return:
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BBBBBf
'
,
self
.
COMMAND_START_TRAJECTORY
,
group_mask
,
relative
,
reversed
,
trajectory_id
,
time_scale
))
def
define_trajectory
(
self
,
trajectory_id
,
offset
,
n_pieces
):
"""
Define a trajectory that has previously been uploaded to memory.
:param trajectory_id: The id of the trajectory
:param offset: offset in uploaded memory
:param n_pieces: Nr of pieces in the trajectory
:return:
"""
self
.
_send_packet
(
struct
.
pack
(
'
<BBBBIB
'
,
self
.
COMMAND_DEFINE_TRAJECTORY
,
trajectory_id
,
self
.
TRAJECTORY_LOCATION_MEM
,
self
.
TRAJECTORY_TYPE_POLY4D
,
offset
,
n_pieces
))
def
_send_packet
(
self
,
data
):
pk
=
CRTPPacket
()
pk
.
port
=
CRTPPort
.
SETPOINT_HL
pk
.
data
=
data
self
.
_cf
.
send_packet
(
pk
)
This diff is collapsed.
Click to expand it.
examples/autonomous_sequence_high_level.py
+
1
−
1
View file @
43e7a5fc
...
@@ -177,6 +177,6 @@ if __name__ == '__main__':
...
@@ -177,6 +177,6 @@ if __name__ == '__main__':
activate_high_level_commander
(
cf
)
activate_high_level_commander
(
cf
)
# activate_mellinger_controller(cf)
# activate_mellinger_controller(cf)
duration
=
upload_trajectory
(
cf
,
trajectory_id
,
figure8
)
duration
=
upload_trajectory
(
cf
,
trajectory_id
,
figure8
)
print
(
"
The sequence is {:.1f} seconds long
"
.
format
(
duration
))
print
(
'
The sequence is {:.1f} seconds long
'
.
format
(
duration
))
reset_estimator
(
cf
)
reset_estimator
(
cf
)
run_sequence
(
cf
,
trajectory_id
,
duration
)
run_sequence
(
cf
,
trajectory_id
,
duration
)
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment