为 sim_vehicle 添加模拟外设

在 SITL 中可以模拟多种设备。这些设备包括万向节、信标、测距仪、VICON、转速传感器等。

从基于 CAN 的模拟外设开始

启动 SITL 时,还将模拟一组标准外围设备(即 GPS、电调、飞行表面舵机、电源监控器等)。不过,这些外围设备可以被模拟为 DroneCAN 设备,以便监控 CAN 行为,在模拟中测试新的 AP_Periph 设备等。要使用这些外设启动 SITL,而不是使用正常连接的外设:

模拟载具.py -v <;载具>; --游戏机 --地图 ---外设

模拟板载 OSD

启动 SITL 时,如果(飞行)控制器包含集成 OSD,可以让它显示集成 OSD 的模拟效果。添加 --osd 选项:

模拟载具.py -v ArduPlane --游戏机 --地图 --osd

备注

OSD 模拟可显示 OSD 面板项目和位置,但不允许使用多屏幕,也不允许使用公制以外的单位。

模拟 I2C 设备

添加虚拟云台

SITL 可以模拟虚拟万向节。

备注

万向模拟导致 SITL 开始发送 MOUNT_STATUS 信息。这些信息包含根据最后发送给云台的指令确定的方位,而不是实际测量值。因此,真实的云台位置有可能与之不符,例如,命令可能被忽略或云台可能被手动移动。在Mission Planner地面站中看不到更改。

首先启动模拟器,使用以下命令设置云台支架:

# 指定基于伺服的安装:
停止 设置 MNT1_TYPE 1

# 将 RC 输出 6 设置为摇摄伺服:

停止 设置 servo6_function 6


# 设置 RC 输出 8 为滚转伺服:
停止 设置 servo7_function 8

然后停止并重新启动 SITL,使用 -M 旗子

模拟载具.py -M

添加真实串行云台

添加测距仪

SITL 可以模拟模拟测距仪,这对于开发可以使用测距仪的飞行模式非常有用。要对其进行设置,请使用以下命令:

停止 设置 sim_sonar_scale 10
停止 设置 RNGFND1_TYPE 1
停止 设置 rngfnd1_scaling 10
停止 设置 RNGFND1_PIN 0
停止 设置 RNGFND1_MAX_CM 5000
停止 设置 RNGFND1_MIN_CM 0

# 启用着陆测距仪(仅限飞机!) # 启用着陆测距仪(仅限飞机
停止 设置 RNGFND_LANDING 1

上述命令将设置一个最大量程为 50 米的模拟测距仪(50 米来自 0 至 5V 的模拟电压范围和 10 的缩放比例)。完成上述更改后,需要重新启动 SITL。

然后试着测试一下:

模块 负荷 示意图
示意图 测距仪.距离

然后尝试飞行,看看图表是否能显示测距仪的距离。

提示

您还可以使用以下命令绘制测距仪信息(定义为 MAVProxy 别名):

  • 沼泽地 - 显示测距仪距离和相对高度。

  • grangev - 测距仪电压

  • 牧场 - 图形 "rangefinder_roll"

添加 360 度激光雷达

SITL 可以模拟 360 度激光雷达(RPLidarA2 或 SF45b),这对测试物体回避非常有用。使用以下命令进行设置:

停止 设置 serial5_protocol 11 (邻近性)
停止 设置 PRX1_TYPE 5 (RPLidarA2)
  
停止 设置 PRX1_TYPE 8 (SF45b)

然后使用下图中的一行启动模拟器。这将在一个被虚拟障碍物包围的位置启动载具

../工具/自动测试/模拟载具.py -A --序列5=模拟:sf45b -l 51.8752066,14.6487840,54.15,0
../工具/自动测试/模拟载具.py -A --序列5=模拟:rplidara2 -l 51.8752066,14.6487840,54.15,0

要在地图上显示障碍,请在终端键入以下内容

脚本 /文件/邮寄-地点.擦洗
../_images/sim-rplidara2-barriers.png

添加光学流量传感器

可以添加一个虚拟光流传感器,启用测距仪(见上文 "添加测距仪"),然后设置这些参数:

停止 设置 sim_flow_enable 1
停止 设置 流量类型 10

然后重启 SITL。设置完成后,试着这样做

模块 负荷 示意图
示意图 OPTICAL_FLOW.flow_comp_m_x OPTICAL_FLOW.流速_comp_m_y

去飞一圈,看看能否获得合理的数据。

添加转速传感器

您可以像这样添加一个转速传感器:

停止 设置 RPM_TYPE 1

它可以显示和记录虚拟电机的转速。

添加车轮编码器

您可以这样测试两个虚拟滚轮编码器:

停止 设置 EK3_SRC1_POSXY 0
停止 设置 EK3_SRC1_VELXY 7
停止 设置 EK3_SRC1_VELZ 0
停止 设置 GPS_TYPE 0
停止 设置 WENC_TYPE 10
停止 取得
停止 设置 WENC_POS_Y 0.075
停止 设置 WENC2_TYPE 10
停止 设置 WENC2_POS_Y -0.075
停止 设置 上膛检查 60918 ( 关闭 全球定位系统 检查)

重新启动 SITL 并在地图上点击鼠标右键,选择 "设置原点(带高度)",载具就会出现在地图上。输入 "map set showsimpos 1"(地图设置显示 impos 1)也可能有用,可以显示载具的实际位置。

添加测距信标

您可以通过设置以下参数来测试虚拟范围信标

停止 设置 EK3_GPS_TYPE 3
停止 设置 GPS_TYPE 0
停止 设置 BCN_TYPE 10
停止 取得
停止 设置 BCN_LATITUDE -35.363261
停止 设置 BCN_LONGITUDE 149.165230
停止 设置 BCN_ALT 584

重新启动 SITL,载具应该会出现在地图上。大约 30 秒后,它应该会移动到正常的起始位置。

测试精确着陆

备注

这些说明是假设 ArduCopter

启用精确着陆,并将精确着陆后端类型设置为 SITL:

停止 设置 PLND_ENABLED 1
停止 取得
停止 设置 PLND_TYPE 4
停止 设置 SIM_PLD_ENABLE 1
停止 设置 SIM_PLD_LAT -35.3632
停止 设置 SIM_PLD_LON 149.1652

精确着陆目前需要测距仪。启用模拟测距仪:

停止 设置 RNGFND1_TYPE 1
停止 设置 RNGFND1_MIN_CM 0
停止 设置 RNGFND1_MAX_CM 4000
停止 设置 RNGFND1_PIN 0
停止 设置 rngfnd1_scaling 12.12

重新启动模拟。

起飞并飞行一会儿,然后转入着陆:

上膛 throttle
rc 3 1800
模式 土地
rc 3 1500

检查日志中的精确着陆信息:

ls -lt 原木

那就选最年轻的吧:

mavlogdump.py --类型 PL 原木/<;老么>;

测试 Vicon(又名视觉定位系统)

启动 SITL,擦除参数:

./工具/自动测试/模拟载具.py -v ArduCopter --gdb --排错 -w

启用 EKF3、禁用 GPS 并将 Serial5 协议设置为 mavlink,以便接受视觉位置估算和视觉速度估算信息:

停止 设置 EK3_SRC1_POSXY 6
停止 设置 EK3_SRC1_POSZ 6
停止 设置 EK3_SRC1_VELXY 6
停止 设置 EK3_SRC1_VELZ 6
停止 设置 EK3_SRC1_YAW 6
停止 设置 VISO_TYPE 2
停止 设置 serial5_protocol 2
停止 设置 GPS_TYPE 0 (可选的)
停止 设置 上膛检查 388598 (可选的,  关闭 全球定位系统 检查)
停止 取得

重新启动模拟,将模拟的 Vicon 系统连接到 序号5:

../工具/自动测试/模拟载具.py --地图 --游戏机 -A "--serial5=sim:vicon:";

控制台应显示没有 GPS:

全球定位系统: 0 (0)

现在应该可以将视觉位置估计值输入 ArduCopter:

稳定>; 地位 Vicon_position_estimate
稳定>; 43371: Vicon_position_estimate {欧空局 : 38380000, x : 0.0, y : 0.0, z : -0.0999755859375, 滚动 : 0.0, 沥青 : 0.0, 打呵欠 : -0.122173137963}

您还会收到来自 EKF 的启动信息:

APM: EKF3 IMU0  使用 外部 航行 数据
APM: EKF3 IMU0 最初 姿势 NED = 0.0,0.0,-0.1 (m)
APM: EKF3 IMU1  使用 外部 航行 数据
APM: EKF3 IMU1 最初 姿势 NED = 0.0,0.0,-0.1 (m)

使用 MAVProxy 的右键上下文菜单项,可以 设置 起源 (与 共)

上膛位置悬停,起飞并飞往某个地方:

位置悬停
上膛 throttle
rc 3 1800
rc 2 1400

其他 SITL vicon 设置参见 SIM_VICON_xx 参数:

停止 展览 SIM_VICON*

模拟飞行器上的多个飞行控制器

待机模式功能 (RCx_OPTION = 76)允许(飞行)控制器进入软待机模式,以便第二台(飞行)控制器或配套计算机可以控制,但允许第一台稍后恢复。为了帮助此类系统的代码开发,您可以在仿真中模拟两个飞行控制器同时运行。启动 "主 "实例(该实例拥有进入模拟的有效输出)时,将声明有一个 "从 "实例,该实例将监控传感器并并行运行其代码,但其输出未连接到模拟物理中:

./工具/自动测试/模拟载具.py -v ArduCopter --奴仆 1

然后再为 "从属 "(飞行)控制器启动另一个模拟:

./工具/自动测试/模拟载具.py -v ArduCopter  -f json:0.0.0.0 -I1

然后,您可以使用 sim_json_master 参数,即 O 或 1。

第二次模拟可能是在同一台计算机上运行不同分支的代码。

加装卷扬机

通过设置这些参数,可为旋翼飞行器添加虚拟卷扬机:

停止 设置 卷扬机类型 1
停止 设置 servo9_function 88
停止 设置 RC9_OPTION 45

然后重启 SITL。设置完成后,试着这样做

模块 负荷 示意图
示意图 原始伺服输出.servo9_raw
rc 9 2000 ( 释放 线条)
rc 9 1000 ( 风电  线条)
rc 9 1500 ( 停止 卷扬机  移动)

有关使用 mavlink 命令控制卷扬机的更多说明,请参见 MAVLink 接口卷扬机控制页面