动捕使用 fcu_core_v2

机载电脑端使用 fcu_core_v2 连接无人机

注意:动捕频率必须为 10 Hz。

实验平台:Jetson Orin NX(8 GB / 16 GB)。

从 GitHub 获取源码(已完成此步骤时可跳过)

创建工作空间:

mkdir -p ~/ros_ws/src

拉取 fcu_core_v2 及相关工程: 项目 README

修改 launch 文件参数

    <node pkg="fcu_core" type="fcu_bridge_001" name="fcu_bridge_001" output="screen" >
        <remap from="~odometry_001" to="/vins_estimator/odometry"/> <!--"/vins_estimator/odometry" for vins; "/Odometry" for faster-lio -->
        <remap from="~imu_global_001" to="imu_global_001"/>
        <remap from="~odom_global_001" to="odom_global_001"/>
        <remap from="~path_global_001" to="path_global_001"/>
        <remap from="~path_target_001" to="path_target_001"/>
        <remap from="~goal_001" to="/move_base_simple/goal"/>
        <remap from="~motion_001" to="motion_001"/>
        <remap from="~command" to="/fcu_command/command"/>
        <remap from="~mission_001" to="/fcu_mission/mission_001"/>
        <param name="DRONE_IP" value="192.168.4.1" type="string"/>
        <param name="DRONE_PORT" value="333"/>
        <param name="USB_PORT" value="/dev/ttyTHS0" type="string"/>
        <param name="BANDRATE" value="460800"/>
        <param name="channel" value="0"/>
        <param name="offboard" value="true" type="bool"/>
        <param name="use_uwb" value="false" type="bool"/>
        <param name="set_goal" value="false" type="bool"/>
        <param name="simple_target" value="true" type="bool"/>
        <param name="odom_init_x" value="0.0"/> <!-- FLU 坐标系 -->
        <param name="odom_init_y" value="0.0"/>
        <param name="odom_init_z" value="0.0"/>
    </node>

使用 autodeploy 配置 /dev/ttyTHS0 的串口访问权限:

git clone https://gitee.com/fancinnov/autodeploy.git # 拉取自动部署脚本
cd autodeploy
sudo chmod +x autodeploy.sh
./autodeploy.sh --modules usb_permissions --run # 开启串口权限
sudo reboot  # 重启后生效

确定坐标系

确认动捕坐标系的坐标轴方向。该坐标系应为“前、左、上”,如下图所示:

使用 rostopic echo 命令查看动捕话题中的位置数据,确认其单位是毫米、厘米还是米。

在 fcu_bridge_001.cpp 中找到动捕回调函数,并根据动捕输出单位调整坐标换算。程序默认使用米作为坐标单位。

例如,若动捕话题输出的坐标单位为毫米,则需将其转换为米,转换方式如下图所示:

检查动捕数据中的偏航角是否正确。

完成上述配置并确认动捕系统正常运行后,编译并启动 fcu_core_v2 工程。终端应持续输出动捕数据,如下图所示。当心跳间隔为 1 s、动捕输出频率为 10 Hz,且终端逐条打印动捕数据时,相邻两条心跳之间通常约有 10 条动捕数据。实际数量与心跳间隔、数据接收及打印时序有关,不能仅凭单次计数判定丢包。若持续出现数据缺失、延迟或频率异常,应结合实际动捕话题的 rostopic hz 输出及时间戳排查;确认数据连续、频率满足要求后再进行飞行测试。

上图中的第四项数据 yaw 为偏航角,取值范围为 −π 至 π。

偏航角须满足以下要求:

飞控烧录动捕模式固件

打开飞控固件中的 clibrary/include/confg.h 文件。

按上图修改相应参数,保存、编译并烧录固件后,无人机进入动捕定位模式。 首先在动捕定位模式下完成试飞。 确认试飞正常后,可进一步启用动捕定高。

按上图启用动捕定高,保存、编译并烧录固件后,无人机进入动捕定位与动捕定高模式。

测试

烧录动捕模式固件后,fcu_core_v2 的 RViz 界面中,虚拟无人机应跟随真实无人机的位置变化。手持无人机在动捕场地内移动,检查虚拟无人机与真实无人机的位置是否一致。


远程电脑端使用 fcu_core_v2 连接无人机

实验环境:Windows 11 宿主机,VMware 17.5 Pro 虚拟机,Ubuntu 20.04 LTS。

从 GitHub 获取源码(已完成此步骤时可跳过)

创建工作空间:

mkdir -p ~/ros_ws/src

拉取 fcu_core_v2 及相关工程: 项目 README

修改 launch 文件参数

    <node pkg="fcu_core" type="fcu_bridge_001" name="fcu_bridge_001" output="screen" >
        <remap from="~odometry_001" to="/vins_estimator/odometry"/> <!--"/vins_estimator/odometry" for vins; "/Odometry" for faster-lio -->
        <remap from="~imu_global_001" to="imu_global_001"/>
        <remap from="~odom_global_001" to="odom_global_001"/>
        <remap from="~path_global_001" to="path_global_001"/>
        <remap from="~path_target_001" to="path_target_001"/>
        <remap from="~goal_001" to="/move_base_simple/goal"/>
        <remap from="~motion_001" to="motion_001"/>
        <remap from="~command" to="/fcu_command/command"/>
        <remap from="~mission_001" to="/fcu_mission/mission_001"/>
        <param name="DRONE_IP" value="192.168.4.1" type="string"/>
        <param name="DRONE_PORT" value="333"/>
        <param name="USB_PORT" value="/dev/ttyTHS0" type="string"/>
        <param name="BANDRATE" value="460800"/>
        <param name="channel" value="1"/>
        <param name="offboard" value="false" type="bool"/>
        <param name="use_uwb" value="false" type="bool"/>
        <param name="set_goal" value="false" type="bool"/>
        <param name="simple_target" value="true" type="bool"/>
        <param name="odom_init_x" value="0.0"/> <!-- FLU 坐标系 -->
        <param name="odom_init_y" value="0.0"/>
        <param name="odom_init_z" value="0.0"/>
    </node>

返回教程目录 · 上一章:激光雷达 SLAM 套件使用 fcu_core_v2 · 下一章:单机自动任务