Skip to main content

(二)Nokovflie使用说明

一、 使用前准备

  1. Nokov光学动作捕捉系统

正确连接Nokov光学动作捕捉系统,并打开XingYing软件;动作捕捉系统利用L形标定框创建坐标系,角点为原点,长边为X轴正方向,短边为Y轴正方向,法向向上为Z轴正方向;以此为基准确定三维空间原点及坐标轴朝向,确保实验时无人机机头摆放朝向X轴正方向;

  1. Nokov-vm虚拟机

正确连接虚拟机,并做好虚拟机相应配置;Nokov-vm虚拟机登录密码:nokovflie

如有问题,请参照《Nokovflie 虚拟机使用教程.pdf》设置;

  1. crazyflie无人机*4

①配置好4架飞机的地址,详见《Nokovflie 虚拟机使用教程.pdf》第三章 CFClient说明;

②更新无人机固件(若未修改固件,或近期已更新则忽略此步骤);

③接通无人机电源,并打开开关,无人机声音提示并进行螺旋桨自检,确认旋转方向如下图所示。

  1. crazyradio无线通信模块*1

插入U口,并在弹出的对话框选择连接到虚拟机;

二、 crazyswarm参数修改

双击打开虚拟机桌面 Visual Studio Code,在

"/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch"

路径下修改下面文件的参数配置:

  1. mocap_helper.launch

说明:motion_capture_host_name 设置为动捕环境设置的SDK广播IP;

mocap_helper.launch--该文件可实时获取动捕的数据;

  1. hover_swarm.launch

说明:object_tracking_type 两种类型 motionCapture 用作刚体模式;libobjecttracker用作单点或点云模式;

hover_swarm.launch--该文件用于开启仿真和Nokovflie飞机通信,是飞机真实测试启动项;

  1. crazyflies.yaml

说明:crazyflies.yaml--飞机的配置文件;

channel ->飞机通信通道;

id->飞机的物理地址最后一位;

initialPosition->飞机的初始坐标位置;

type->飞机的模式类型;CF21SingleMarker:单点模式;default:刚体模式和点云模式;

  1. crazyflieTypes.yaml

说明:一般不做修改,使用点云模式时修改此文件;修改方式见本文三.3;

三、 Nokovflie飞行贴点说明及相关参数配置

  1. 单点模式

优劣势:每架飞机上仅贴一个点,贴点位置可以重复;

避免杂点产生影响;

适用于位置轨迹追踪;

无速度和姿态的控制;

配置方法:

①crazyflies.yaml

Channel、ip、initialPosition根据起飞的飞机修改;

type:CF21SingleMarker

②hover_swarm.launch

object_tracking_type:libobjecttracker

  1. 刚体模式

优劣势:每架飞机上至少贴3个点,各个飞机的贴点位置不能重复,动捕软件中要能识别出是不同的刚体;

避免杂点产生影响;

适用于位置轨迹追踪,速度和姿态的控制等多方式开发;

配置方法:

①crazyflies.yaml

Channel、ip、initialPosition根据起飞的飞机修改;

type:default

②hover_swarm.launch

object_tracking_type:motionCapture

③动捕软件创立刚体名称要和飞机ip相互对应,例如飞机ip是1,则刚体名称为"cf1"

  1. 点云模式

优劣势:每架飞机上至少贴3个点,各个飞机的贴点位置要一样(建议如图示所贴);

适用于位置轨迹追踪,速度控制等开发;

配置方法:

①crazyflies.yaml

Channel、ip、initialPosition根据起飞的飞机修改;

type:default

②hover_swarm.launch

object_tracking_type:libobjecttracker

③ crazyflieTypes.yaml 文件修改

numPoints ->填写具体贴了几个点;

points->飞机上贴点的位置,可调用mocap_helper.launch获取;

四、 Nokovflie仿真和真机飞行实验

  1. 单机起飞悬停

说明:采用单点模式,单机起飞高度1米,悬停2.5秒,然后降落在原地;

操作步骤:

①Crazyflie接通电源,并开机,自检完成;

②插入Crazyratio PA,弹出对话框选择连接到虚拟机;

③打开虚拟机桌面Crazyflie client,地址处输入飞机正确地址,点击 Scan(找不到多点击几次,或重新插拔PA后再此点击Scan);connect 高亮后点击连接飞机,正确连接飞机后显示如下:

此时摆动动飞机,水平线会相应变化,则飞机正常;上图中箭头所指即为飞机channel,方框所指即为飞机id;记录此两个数值后,关闭Crazyflie client。

④将无人机放置动捕区域原点(偏差一点无所谓),机头朝向X轴正方向。

⑤确保Xingying软件向虚拟机网卡网段发送数据,并且已勾选使用SDK,如下图:

⑥打开Visual Studio Code,在/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch处右键选择"Open in Integrated Terminal"。在窗口处输入roslaunch crazyswarm mocap_helper.launch,验证系统能否接收到动捕数据。显示以下界面表示数据正常发送,即显示单个标识点的实时位置坐标且持续刷新,按Ctrl+c键退出。任选一帧数据复制做为无人机初始位置。

⑦打开crazyflies.yaml文件(路径crazyswarm/ros_ws/src/crazyswarm/launch),按照上面步骤的结果,将channel 配置为12,ID设置为5,初始位置设置为[-0.0127547,-0.00048209,-0.00438987],保存修改。

⑧打开hover_swarm.launch文件(路径为crazyswarm/ros_ws/src/crazyswarm/launch),将目标追踪方式(object_tracking_type)修改为libobjecttracker。

⑨在/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch处右键选择"Open in Integrated Terminal"。在新窗口处输入" roslaunch crazyswarm hover_swarm.launch",启动"crazyswarm_server.RVIZ"可视化软件自动打开,连接成功显示无人机坐标系与坐标原点重合。

⑩在crazyswarm/ros_ws/src/crazyswarm/scripts路径下右键打开两个新的terminal。在其中一个terminal输入rosservice call /land,双击tab键,将secs值修改为2,height值修改为0.02,作为安全设置,当出现突发情况时,在此界面敲击回车,强制停止无人机飞行。

在另一个terminal输入"python3 hello_world.py –sim",运行仿真程序,可以在仿真界面看到无人机(简化为一个点)起飞到一定高度,在空中悬停2.5秒,然后降落。

仿真测试后,输入"python3 hello_world.py",运行脚本程序,无人机实现起飞,悬停,降落。

注意:飞行结束后,确保关闭 "roslaunch crazyswarm hover_swarm.launch" (该窗口下按 CTRL+C),防止飞机因误操作炸机。

  1. 多机编队绕8字飞行

说明:使用3台无人机,均使用单点模式;三机可分散置于动捕场地内(注意飞机移动路径保证在动捕区域内。本次实验飞行覆盖区域长约2米,宽约1米左右);三机机头均朝向X轴正方向。

操作步骤:同"单机起飞悬停"

但注意:

步骤⑥会输出3个位置数据,如图所示:

需将上图的位置坐标和真实场景中飞机的位置相对应(也可将飞机依次拿到场地中,依次记录),依次配置到crazyflies.yaml文件中,如图:

步骤⑨执行"crazyswarm hover_swarm.launch",启动crazyswarm_server.RVIZ可视化软件自动打开,正常显示的画面如下图:

步骤10 在另一个terminal输入"python3 figure8_csv.py --sim",运行仿真程序,可以在仿真界面看到无人机(化为三个点)起飞到一定高度,在空中画正反两个8字后,降落到各自初始位置;

仿真测试无问题后,输入"python3 figure8_csv.py",运行脚本程序,无人机编队实现起飞绕8字正反飞行后降落。

注意:飞行结束后,确保关闭 "roslaunch crazyswarm hover_swarm.launch" (该窗口下按 CTRL+C),防止飞机因误操作炸机。

  1. 自定义轨迹飞行

说明:1台无人机,使用单点模式;飞机可以在动捕区域内按照预设轨迹飞行,飞行轨迹闭合(不出动捕环境的任意路径)。

操作步骤:同"单机起飞悬停"

但注意:

步骤⑥移动飞机位置,通过多次调用mocap_helper.launch采集飞机的位置(主要移动节点),并修改" /home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/scripts/trajectory_generator.py",并修改代码,如下图:

步骤10 在terminal输入"python3 trajectory_generator.py",会弹出路线仿真示意图和节点代码,如下图:

将此段输出代码复制到"/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/scripts/nokov_custom.py"

如下图:

在terminal输入"python3 nokov_custom.py --sim",运行仿真程序,可以在仿真界面看到无人机按照预设的轨迹路线飞行。

仿真测试无问题后,输入"python3 nokov_custom.py" ,运行脚本程序,无人机将按照预设的路径飞行一周。

注意:飞行结束后,确保关闭 "roslaunch crazyswarm hover_swarm.launch" (该窗口下按 CTRL+C),防止飞机因误操作炸机。

说明:以上实验均可以替换成刚体或点云方式进行,可以参照第三章文档说明修改。

五、 参考资料

1、bitcraze官网:https://www.bitcraze.io/documentation/start/

2、crazyswarm系统论文:Preiss_ICRA2017.pdf (usc.edu)