关于rcS文件的UDP端口

2023-05-16

可见仿真的时候PX4和gazebo之间的通信是两个进程通过UDP 端口通信,自己写过UDP通信之后这就好理解了。

没有自己弄个TCP UDP通信的这一时半会可能就不好理解。

地面站连飞控,是地面站端填IP,地面站端应该是客户端主动发起连接,飞控这边是服务端,等待连,那么写和地面站的UDP连接的时候,我们这边应该是写成服务端,现在应该清楚了!!!!

既然是通过UDP端口,PX4讲道理不放在本机上也是可以的啊,清楚了这个本质你就可以任意自由更改了。或许这也是为什么QGC放在docker外部也可以连上PX4的原因。

我突然看到这个init.d-posix就更有感触了,posix。

 

https://gitee.com/maxibooksiyi/prometheus_px4/blob/Prometheus_PX4_1.11.1/ROMFS/px4fmu_common/init.d-posix/rcS

#!/bin/sh

# PX4 commands need the 'px4-' prefix in bash.
# (px4-alias.sh is expected to be in the PATH)
# shellcheck disable=SC1091
. px4-alias.sh

SCRIPT_DIR="$(CDPATH='' cd -- "$(dirname -- "$0")" && pwd)"

#
# Main SITL startup script
#

# check for ekf2 replay
# shellcheck disable=SC2154
if [ "$replay_mode" = "ekf2" ]
then
	sh etc/init.d-posix/rc.replay
	exit 0
fi

# initialize script variables
set AUX_MODE                    none
set IO_PRESENT                  no
set LOG_FILE                    bootlog.txt
set MAV_TYPE                    none
set MIXER                       none
set MIXER_AUX                   none
set MIXER_FILE                  none
set OUTPUT_MODE                 sim
set PWM_OUT                     none
set SDCARD_MIXERS_PATH          etc/mixers
set USE_IO                      no
set VEHICLE_TYPE                none
set LOGGER_ARGS                 ""
set LOGGER_BUF                  1000

set RUN_MINIMAL_SHELL           no

# Use the variable set by sitl_run.sh to choose the model settings.
if [ "$PX4_SIM_MODEL" = "shell" ]; then
	set RUN_MINIMAL_SHELL yes
else
	# Find the matching Autostart ID (file name has the form: [0-9]+_${PX4_SIM_MODEL})
	# TODO: unify with rc.autostart generation
	# shellcheck disable=SC2012
	REQUESTED_AUTOSTART=$(ls "$SCRIPT_DIR" | sed -n 's/^\([0-9][0-9]*\)_'${PX4_SIM_MODEL}'$/\1/p')
	if [ -z "$REQUESTED_AUTOSTART" ]; then
		echo "Error: Unknown model '$PX4_SIM_MODEL'"
		exit 1
	fi
fi

# clear bootlog
[ -f $LOG_FILE ] && rm $LOG_FILE


uorb start

# Load parameters
set PARAM_FILE eeprom/parameters_"$REQUESTED_AUTOSTART"
param select $PARAM_FILE

if [ -f $PARAM_FILE ]
then
	if param load
	then
		echo "[param] Loaded: $PARAM_FILE"
	else
		echo "[param] FAILED loading $PARAM_FILE"
	fi
else
	echo "[param] parameter file not found, creating $PARAM_FILE"
fi

# exit early when the minimal shell is requested
[ $RUN_MINIMAL_SHELL = yes ] && exit 0


# Use environment variable PX4_ESTIMATOR to choose estimator.
if [ "$PX4_ESTIMATOR" = "q" ]; then
	param set SYS_MC_EST_GROUP 3
elif [ "$PX4_ESTIMATOR" = "ekf2_gps" ]; then
	param set SYS_MC_EST_GROUP 2
	param set EKF2_AID_MASK 1
	param set EKF2_HGT_MODE 0
elif [ "$PX4_ESTIMATOR" = "ekf2_vision" ]; then
	param set SYS_MC_EST_GROUP 2
	param set EKF2_AID_MASK 24
	param set EKF2_EV_DELAY 5
	param set EKF2_HGT_MODE 3
elif [ "$PX4_ESTIMATOR" = "inav" ]; then
	param set SYS_MC_EST_GROUP 0
fi


if param compare SYS_AUTOSTART $REQUESTED_AUTOSTART
then
	set AUTOCNF no
else
	set AUTOCNF yes
	param set SYS_AUTOCONFIG 1
fi

if param compare SYS_AUTOCONFIG 1
then
	set AUTOCNF yes

	# Wipe out params except RC*, flight modes, total flight time, accel cal, gyro cal, next flight UUID
	param reset_nostart RC* COM_FLTMODE* LND_FLIGHT_T_* TC_* CAL_ACC* CAL_GYRO* COM_FLIGHT_UUID
fi

# multi-instance setup
# shellcheck disable=SC2154
param set MAV_SYS_ID $((px4_instance+1))
simulator_tcp_port=$((4560+px4_instance))
udp_offboard_port_local=$((14580+px4_instance))
udp_offboard_port_remote=$((14540+px4_instance))
[ $px4_instance -gt 9 ] && udp_offboard_port_remote=14549 # use the same ports for more than 10 instances to avoid port overlaps
udp_onboard_payload_port_local=$((14280+px4_instance))
udp_onboard_payload_port_remote=$((14030+px4_instance))
udp_gcs_port_local=$((18570+px4_instance))

if [ $AUTOCNF = yes ]
then
	param set SYS_AUTOSTART $REQUESTED_AUTOSTART

	param set BAT_N_CELLS 4

	param set CAL_ACC0_ID 1311244
	param set CAL_ACC_PRIME 1311244

	param set CAL_GYRO0_ID 1311244
	param set CAL_GYRO_PRIME 1311244

	param set CAL_MAG0_ID 197388
	param set CAL_MAG_PRIME 197388

	param set CBRK_AIRSPD_CHK 0
	param set CBRK_SUPPLY_CHK 894281

	# Don't require RC calibration and configuration
	param set COM_RC_IN_MODE 1

	param set EKF2_ANGERR_INIT 0.01
	param set EKF2_GBIAS_INIT 0.01

	# Prevent high accel bias
	param set COM_ARM_EKF_AB 0.005

	# Speedup SITL startup
	param set EKF2_REQ_GPS_H 0.5

	# LPE: GPS only mode
	param set LPE_FUSION 145

	param set MC_PITCH_P 6
	param set MC_PITCHRATE_P 0.2
	param set MC_ROLL_P 6
	param set MC_ROLLRATE_P 0.2

	param set MPC_Z_VEL_P_ACC 12.0
	param set MPC_Z_VEL_I_ACC 3.0
	param set MPC_XY_P 0.8
	param set MPC_XY_VEL_P_ACC 4.0
	param set MPC_XY_VEL_I_ACC 0.4
	param set MPC_XY_VEL_D_ACC 0.32

	param set RTL_RETURN_ALT 30

	# By default log from boot until first disarm.
	param set SDLOG_MODE 1
	# enable default, estimator replay and vision/avoidance logging profiles
	param set SDLOG_PROFILE 131
	param set SDLOG_DIRS_MAX 7
	param set SENS_BOARD_ROT 0
	param set SENS_BOARD_X_OFF 0.000001
	param set SENS_DPRES_OFF 0.001
	param set SYS_RESTART_TYPE 2

	param set TRIG_INTERFACE 3
fi

param set COM_CPU_MAX -1 # disable check, no CPU load reported on posix yet

# Simulator IMU data provided at 250 Hz
param set IMU_INTEG_RATE 250

# Adapt timeout parameters if simulation runs faster or slower than realtime.
if [ -n "$PX4_SIM_SPEED_FACTOR" ]; then
	COM_DL_LOSS_T_LONGER=$(echo "$PX4_SIM_SPEED_FACTOR * 10" | bc)
	echo "COM_DL_LOSS_T set to $COM_DL_LOSS_T_LONGER"
	param set COM_DL_LOSS_T $COM_DL_LOSS_T_LONGER

	COM_RC_LOSS_T_LONGER=$(echo "$PX4_SIM_SPEED_FACTOR * 0.5" | bc)
	echo "COM_RC_LOSS_T set to $COM_RC_LOSS_T_LONGER"
	param set COM_RC_LOSS_T $COM_RC_LOSS_T_LONGER

	COM_OF_LOSS_T_LONGER=$(echo "$PX4_SIM_SPEED_FACTOR * 0.5" | bc)
	echo "COM_OF_LOSS_T set to $COM_OF_LOSS_T_LONGER"
	param set COM_OF_LOSS_T $COM_OF_LOSS_T_LONGER
fi

# Autostart ID
autostart_file=''
for f in etc/init.d-posix/"$(param show -q SYS_AUTOSTART)"_*
do
	filename=$(basename "$f")
	case "$filename" in
		*\.*)
			# ignore files that contain a dot (e.g. <vehicle>.post)
			;;
		*)
			autostart_file="$f"
			;;
	esac
done
if [ ! -e "$autostart_file" ]; then
	echo "Error: no autostart file found ($autostart_file)"
	exit 1
fi

sh "$autostart_file"

#
# If autoconfig parameter was set, reset it and save parameters.
#
if [ $AUTOCNF = yes ]
then
	param set SYS_AUTOCONFIG 0
fi

dataman start
# only start the simulator if not in replay mode, as both control the lockstep time
if ! replay tryapplyparams
then
	simulator start -c $simulator_tcp_port
fi
battery_simulator start
tone_alarm start
rc_update start
sensors start
commander start
navigator start


if ! param compare -s MNT_MODE_IN -1
then
	vmount start
fi

if param greater -s TRIG_MODE 0
then
	camera_trigger start
	camera_feedback start
fi

# Configure vehicle type specific parameters.
# Note: rc.vehicle_setup is the entry point for rc.interface,
#       rc.fw_apps, rc.mc_apps, rc.rover_apps, and rc.vtol_apps.
#
sh etc/init.d/rc.vehicle_setup

# GCS link
mavlink start -x -u $udp_gcs_port_local -r 4000000
mavlink stream -r 50 -s POSITION_TARGET_LOCAL_NED -u $udp_gcs_port_local
mavlink stream -r 50 -s LOCAL_POSITION_NED -u $udp_gcs_port_local
mavlink stream -r 50 -s GLOBAL_POSITION_INT -u $udp_gcs_port_local
mavlink stream -r 50 -s ATTITUDE -u $udp_gcs_port_local
mavlink stream -r 50 -s ATTITUDE_QUATERNION -u $udp_gcs_port_local
mavlink stream -r 50 -s ATTITUDE_TARGET -u $udp_gcs_port_local
mavlink stream -r 50 -s SERVO_OUTPUT_RAW_0 -u $udp_gcs_port_local
mavlink stream -r 20 -s RC_CHANNELS -u $udp_gcs_port_local
mavlink stream -r 10 -s OPTICAL_FLOW_RAD -u $udp_gcs_port_local

# API/Offboard link
mavlink start -x -u $udp_offboard_port_local -r 4000000 -m onboard -o $udp_offboard_port_remote

# Onboard link to camera
mavlink start -x -u $udp_onboard_payload_port_local -r 4000 -f -m onboard -o $udp_onboard_payload_port_remote

# execute autostart post script if any
[ -e "$autostart_file".post ] && sh "$autostart_file".post

# Run script to start logging
if param compare SYS_MC_EST_GROUP 2
then
	set LOGGER_ARGS "-p ekf2_timestamps"
else
	set LOGGER_ARGS "-p vehicle_attitude"
fi
sh etc/init.d/rc.logging

mavlink boot_complete
replay trystart

 http://blog.sina.cn/dpool/blog/s/blog_aa9fb81a0102wbbe.html

 似乎PX4启动去跑的第一个文件就是rcS文件?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于rcS文件的UDP端口 的相关文章

  • 为什么服务器不使用 C# 中的套接字接收本地传输中的所有 UDP 数据包?

    我有一个服务器和一个客户端应用程序 客户端将一堆数据包发送到服务器 使用的协议是UDP 客户端应用程序生成一个新线程来循环发送数据包 服务器应用程序还生成一个新线程来循环等待数据包 这两个应用程序都需要根据传输进度保持 UI 更新 如何正确
  • 在不使用环回网络的情况下将数据包转发到同一主机中的服务

    我有这个 libnetfilter queue 应用程序 它根据某些 iptables 规则从内核接收数据包 在直接讨论我的问题之前 我提供了一个示例可行代码和其他工具来设置测试环境 以便我们的问题定义和可能的解决方案可以更加准确和稳健 以
  • 使用 Winsock 通过单个 UDP 服务器处理 10 个客户端

    我已经使用 UDP 套接字建立了一个服务器 客户端应用程序 但我的服务器无法一次处理多个客户端 现在我想修改我的应用程序 让 10 个客户端分别运行在不同的计算机上 而我的服务器运行在单独的计算机上 我希望我的服务器能够与 10 个不同机器
  • 在 iOS 中跨应用程序(后台/前台或分屏多任务处理)共享 UDP 数据

    我正在编写一个研究应用程序 该应用程序利用通过 UDP 广播数据的特定传感器 有各种商业应用程序使用此传感器 我们希望能够同时运行我们的应用程序和现有应用程序 在过去 iOS 8 及更低版本 我们会在后台运行应用程序来记录数据 并在前台运行
  • UDP 服务器套接字缓冲区溢出

    我正在 Linux 上编写 C 应用程序 我的应用程序有一个 UDP 服务器 它在某些事件上向客户端发送数据 UDP 服务器还接收来自客户端的一些反馈 确认 为了实现这个应用程序 我使用了一个 UDP 套接字 例如int fdSocket
  • Python-UDP客户端

    我目前正在阅读Pythonbook https www nostarch com blackhatpython并遇到了以下示例 import socket target host 127 0 0 1 target port 80 creat
  • 为什么我的 UDP 广播失败?

    我正在尝试发送 UDP 广播 但wireshark 没有报告任何流量 这是执行发送的代码片段 void SendBroadcast String ip 255 255 255 255 int port 30718 String messag
  • 具有多个接口的 Python UDP 套接字

    我正在 Windows XP 机器上用 python2 7 编写脚本 本机使用不同的网卡连接到多个网络 我遇到了一个问题 我已将 UDP 套接字绑定到特定接口 我知道您可以通过仅提供网卡现有的 IP 地址来在 Windows 中完成此操作
  • 移动提供商无法进行 UDP 打洞

    实际上 我正在编写一个 Android 应用程序 该应用程序接收连接到 PC 的网络摄像头的图片 为了获得更多的 fps 我使用 udp 协议而不是 tcp 这个想法是 电脑将图片发送到手机的 IP 和端口 但电话提供商有不同的公共端口 所
  • NodeJS UDP 多播如何

    我正在尝试将 UDP 多播数据包发送到 230 185 192 108 以便每个订阅的人都会收到 有点卡住了 我相信它的广播正确 但似乎无法从任何客户端获取任何信息 Server var news Borussia Dortmund win
  • 接收来自 N 个客户端的响应,以回复通过 UDP 的广播请求

    我正在为特定类型的网络多媒体设备实现一种 IP 查找器 我想找出 LAN 中该类型的所有活动设备及其 IP 地址和其他详细信息 设备有自己的设备发现方式 其工作原理如下 客户端通过 UDP 通过 LAN 发送广播请求 目的端口号是固定的 作
  • 当网络上的所有计算机都具有相同的公共IP地址时,如何向特定计算机发送UDP数据包? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 这就是问题 它非常简单 理解 我家里有 2 台电脑 它们都有相同的公共 IP 地址 例如 1 2 3 4 我在咖啡馆有一台计算机 不同的网络 因此它具
  • 如何监听任意端口的广播包?

    使用 NET 如何在任何端口上侦听发送到 255的udp广播数据包 而不需要绑定到特定端口 我自己找到了办法 它是这样工作的 mainSocket new Socket AddressFamily InterNetwork SocketTy
  • Go:如何接收整个 UDP 数据报

    我的问题 使用 net Read 方法仅复制给定字节数组或切片大小的字节数 当然 我不想每次都分配最大 64 kB 的 UDP 数据报 有没有go如何确定数据报的大小 位于数据报头中 或再次读取直到数据报完全读取 Try 从UDP读取 ht
  • iOS 14 在进行本地网络广播时给出“操作系统错误:错误的文件描述符,errno = 9”

    做一点Jeopardy 风格问答 https stackoverflow blog 2011 07 01 its ok to ask and answer your own questions here 我正在 Flutter 中开发一个应
  • 如何在QT中发送和接收UDP数据包

    我正在 QT 中编写一个小型应用程序 它通过本地网络发送广播 UDP 数据包 并等待来自网络上的一个或多个设备的 UDP 响应数据包 创建套接字并发送广播数据包 udpSocketSend new QUdpSocket this udpSo
  • VS2015:应用程序无法正确启动(0xc000007b)

    我在 Visual Studio 2015 上为 Windows 10 PC 编写了代码 该应用程序主要关注 UDP 通信 我使用 boost 库 它工作正常 但当我将代码文件夹移至 Windows 7 时 我收到错误 应用程序无法正确启动
  • 什么是消息边界?

    什么是 消息边界 在以下情况下 TCP 和 UDP 之间的区别之一是 UDP 保留消息 边界 我理解之间的区别TCP and UDP 但我不确定的定义 消息边界 由于 UDP 在每个单独的数据包中包含目的地和端口信息 因此是否可以为消息提供
  • 数据包丢失和数据包重复

    我试图找出数据包丢失和数据包重复问题之间的区别 有谁知道 数据包重复 是什么意思 和TCP检测到丢失时重传数据包一样吗 No In TCP 数据包 的传递是可靠的 我认为在这种情况下术语数据应该更好 因为它是面向流的协议 数据包丢失和重复是
  • P2P网络游戏/应用程序:类似“战网”匹配服务器的不错选择

    我正在制作一个网络游戏 1v1 游戏中是 p2p 不需要游戏服务器 然而 为了让玩家能够 找到彼此 而不需要在另一种媒介中协调并输入IP地址 类似于网络游戏的现代时代 我需要有一个协调 匹配服务器 我无法使用常规网络托管 因为 客户端将使用

随机推荐