(二)Nokovflie使用说明
一、 使用前准备
- Nokov光学动作捕捉系统
正确连接Nokov光学动作捕捉系统,并打开XingYing软件;动作捕捉系统利用L形标定框创建坐标系,角点为原点,长边为X轴正方向,短边为Y轴正方向,法向向上为Z轴正方向;以此为基准确定三维空间原点及坐标轴朝向,确保实验时无人机机头摆放朝向X轴正方向;
 (1).png)
- Nokov-vm虚拟机
正确连接虚拟机,并做好虚拟机相应配置;Nokov-vm虚拟机登录密码:nokovflie
.png)
如有问题,请参照《Nokovflie 虚拟机使用教程.pdf》设置;
- crazyflie无人机*4
①配置好4架飞机的地址,详见《Nokovflie 虚拟机使用教程.pdf》第三章 CFClient说明;
②更新无人机固件(若未修改固件,或近期已更新则忽略此步骤);
③接通无人机电源,并打开开关,无人机声音提示并进行螺旋桨自检,确认旋转方向如下图所示。
.png)
- crazyradio无线通信模块*1
插入U口,并在弹出的对话框选择连接到虚拟机;
.png)
二、 crazyswarm参数修改
双击打开虚拟机桌面 Visual Studio Code,在
"/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch"
路径下修改下面文件的参数配置:
- mocap_helper.launch
.png)
说明:motion_capture_host_name 设置为动捕环境设置的SDK广播IP;
mocap_helper.launch--该文件可实时获取动捕的数据;
- hover_swarm.launch
.png)
说明:object_tracking_type 两种类型 motionCapture 用作刚体模式;libobjecttracker用作单点或点云模式;
hover_swarm.launch--该文件用于开启仿真和Nokovflie飞机通信,是飞机真实测试启动项;
- crazyflies.yaml
.png)
说明:crazyflies.yaml--飞机的配置文件;
channel ->飞机通信通道;
id->飞机的物理地址最后一位;
initialPosition->飞机的初始坐标位置;
type->飞机的模式类型;CF21SingleMarker:单点模式;default:刚体模式和点云模式;
- crazyflieTypes.yaml
.png)
说明:一般不做修改,使用点云模式时修改此文件;修改方式见本文三.3;
三、 Nokovflie飞行贴点说明及相关参数配置
- 单点模式
优劣势:每架飞机上仅贴一个点,贴点位置可以重复;
避免杂点产生影响;
适用于位置轨迹追踪;
无速度和姿态的控制;
配置方法:
①crazyflies.yaml
Channel、ip、initialPosition根据起飞的飞机修改;
type:CF21SingleMarker
②hover_swarm.launch
object_tracking_type:libobjecttracker
.png)
- 刚体模式
优劣势:每架飞机上至少贴3个点,各个飞机的贴点位置不能重复,动捕软件中要能识别出是不同的刚体;
避免杂点产生影响;
适用于位置轨迹追踪,速度和姿态的控制等多方式开发;
配置方法:
①crazyflies.yaml
Channel、ip、initialPosition根据起飞的飞机修改;
type:default
②hover_swarm.launch
object_tracking_type:motionCapture
③动捕软件创立刚体名称要和飞机ip相互对应,例如飞机ip是1,则刚体名称为"cf1"
.png)
- 点云模式
优劣势:每架飞机上至少贴3个点,各个飞机的贴点位置要一样(建议如图示所贴);
适用于位置轨迹追踪,速度控制等开发;
配置方法:
①crazyflies.yaml
Channel、ip、initialPosition根据起飞的飞机修改;
type:default
②hover_swarm.launch
object_tracking_type:libobjecttracker
③ crazyflieTypes.yaml 文件修改
numPoints ->填写具体贴了几个点;
points->飞机上贴点的位置,可调用mocap_helper.launch获取;
.png)
.png)
四、 Nokovflie仿真和真机飞行实验
- 单机起飞悬停
说明:采用单点模式,单机起飞高度1米,悬停2.5秒,然后降落在原地;
操作步骤:
①Crazyflie接通电源,并开机,自检完成;
②插入Crazyratio PA,弹出对话框选择连接到虚拟机;
.png)
③打开虚拟机桌面Crazyflie client,地址处输入飞机正确地址,点击 Scan(找不到多点击几次,或重新插拔PA后再此点击Scan);connect 高亮后点击连接飞机,正确连接飞机后显示如下:
.png)
此时摆动动飞机,水平线会相应变化,则飞机正常;上图中箭头所指即为飞机channel,方框所指即为飞机id;记录此两个数值后,关闭Crazyflie client。
④将无人机放置动捕区域原点(偏差一点无所谓),机头朝向X轴正方向。
⑤确保Xingying软件向虚拟机网卡网段发送数据,并且已勾选使用SDK,如下图:
.png)
⑥打开Visual Studio Code,在/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch处右键选择"Open in Integrated Terminal"。在窗口处输入roslaunch crazyswarm mocap_helper.launch,验证系统能否接收到动捕数据。显示以下界面表示数据正常发送,即显示单个标识点的实时位置坐标且持续刷新,按Ctrl+c键退出。任选一帧数据复制做为无人机初始位置。
.png)
⑦打开crazyflies.yaml文件(路径crazyswarm/ros_ws/src/crazyswarm/launch),按照上面步骤的结果,将channel 配置为12,ID设置为5,初始位置设置为[-0.0127547,-0.00048209,-0.00438987],保存修改。
.png)
⑧打开hover_swarm.launch文件(路径为crazyswarm/ros_ws/src/crazyswarm/launch),将目标追踪方式(object_tracking_type)修改为libobjecttracker。
.png)
⑨在/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/launch处右键选择"Open in Integrated Terminal"。在新窗口处输入" roslaunch crazyswarm hover_swarm.launch",启动"crazyswarm_server.RVIZ"可视化软件自动打开,连接成功显示无人机坐标系与坐标原点重合。
.png)
⑩在crazyswarm/ros_ws/src/crazyswarm/scripts路径下右键打开两个新的terminal。在其中一个terminal输入rosservice call /land,双击tab键,将secs值修改为2,height值修改为0.02,作为安全设置,当出现突发情况时,在此界面敲击回车,强制停止无人机飞行。
.png)
在另一个terminal输入"python3 hello_world.py –sim",运行仿真程序,可以在仿真界面看到无人机(简化为一个点)起飞到一定高度,在空中悬停2.5秒,然后降落。
.png)
仿真测试后,输入"python3 hello_world.py",运行脚本程序,无人机实现起飞,悬停,降落。
注意:飞行结束后,确保关闭 "roslaunch crazyswarm hover_swarm.launch" (该窗口下按 CTRL+C),防止飞机因误操作炸机。
- 多机编队绕8字飞行
说明:使用3台无人机,均使用单点模式;三机可分散置于动捕场地内(注意飞机移动路径保证在动捕区域内。本次实验飞行覆盖区域长约2米,宽约1米左右);三机机头均朝向X轴正方向。
.png)
操作步骤:同"单机起飞悬停"
但注意:
步骤⑥会输出3个位置数据,如图所示:
.png)
需将上图的位置坐标和真实场景中飞机的位置相对应(也可将飞机依次拿到场地中,依次记录),依次配置到crazyflies.yaml文件中,如图:
步骤⑨执行"crazyswarm hover_swarm.launch",启动crazyswarm_server.RVIZ可视化软件自动打开,正常显示的画面如下图:
.png)
步骤10 在另一个terminal输入"python3 figure8_csv.py --sim",运行仿真程序,可以在仿真界面看到无人机(化为三个点)起飞到一定高度,在空中画正反两个8字后,降落到各自初始位置;
.png)
仿真测试无问题后,输入"python3 figure8_csv.py",运行脚本程序,无人机编队实现起飞绕8字正反飞行后降落。
注意:飞行结束后,确保关闭 "roslaunch crazyswarm hover_swarm.launch" (该窗口下按 CTRL+C),防止飞机因误操作炸机。
- 自定义轨迹飞行
说明:1台无人机,使用单点模式;飞机可以在动捕区域内按照预设轨迹飞行,飞行轨迹闭合(不出动捕环境的任意路径)。
操作步骤:同"单机起飞悬停"
但注意:
步骤⑥移动飞机位置,通过多次调用mocap_helper.launch采集飞机的位置(主要移动节点),并修改" /home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/scripts/trajectory_generator.py",并修改代码,如下图:
.png)
.png)
步骤10 在terminal输入"python3 trajectory_generator.py",会弹出路线仿真示意图和节点代码,如下图:
.png)
.png)
将此段输出代码复制到"/home/nokov/projects/crazyswarm/ros_ws/src/crazyswarm/scripts/nokov_custom.py"
如下图:
.png)
在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)