LOCO定位系统入门教程-使用python脚本控制在边界框中弹跳
说明:
- 介绍如何使用使用python脚本,控制在边界框中弹跳
步骤:
新建python脚本motion_flying.py
代码如下
import logging
import sys
import time
from threading import Event
import cflib.crtp
from cflib.crazyflie import Crazyflie
from cflib.crazyflie.log import LogConfig
from cflib.crazyflie.syncCrazyflie import SyncCrazyflie
from cflib.positioning.motion_commander import MotionCommander
from cflib.utils import uri_helper
URI = uri_helper.uri_from_env(default='radio://0/80/2M/E7E7E7E7E7')
DEFAULT_HEIGHT = 0.5
BOX_LIMIT = 0.5
deck_attached_event = Event()
logging.basicConfig(level=logging.ERROR)
position_estimate = [0, 0]
def move_box_limit(scf):
with MotionCommander(scf, default_height=DEFAULT_HEIGHT) as mc:
body_x_cmd = 0.2
body_y_cmd = 0.1
max_vel = 0.2
while (1):
#if position_estimate[0] > BOX_LIMIT:
# mc.start_back()
#elif position_estimate[0] < -BOX_LIMIT:
# mc.start_forward()
if position_estimate[0] > BOX_LIMIT:
body_x_cmd = -max_vel
elif position_estimate[0] < -BOX_LIMIT:
body_x_cmd = max_vel
if position_estimate[1] > BOX_LIMIT:
body_y_cmd = -max_vel
elif position_estimate[1] < -BOX_LIMIT:
body_y_cmd = max_vel
mc.start_linear_motion(body_x_cmd, body_y_cmd, 0)
time.sleep(0.1)
def move_linear_simple(scf):
...
def take_off_simple(scf):
...
def log_pos_callback(timestamp, data, logconf):
print(data)
global position_estimate
position_estimate[0] = data['stateEstimate.x']
position_estimate[1] = data['stateEstimate.y']
def param_deck_flow(_, value_str):
value = int(value_str)
print(value)
if value:
deck_attached_event.set()
print('Deck is attached!')
else:
print('Deck is NOT attached!')
if __name__ == '__main__':
cflib.crtp.init_drivers()
with SyncCrazyflie(URI, cf=Crazyflie(rw_cache='./cache')) as scf:
scf.cf.param.add_update_callback(group='deck', name='bcFlow2',
cb=param_deck_flow)
time.sleep(1)
logconf = LogConfig(name='Position', period_in_ms=10)
logconf.add_variable('stateEstimate.x', 'float')
logconf.add_variable('stateEstimate.y', 'float')
scf.cf.log.add_config(logconf)
logconf.data_received_cb.add_callback(log_pos_callback)
if not deck_attached_event.wait(timeout=5):
print('No flow deck detected!')
sys.exit(1)
logconf.start()
move_box_limit(scf)
logconf.stop()
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号