forked from Archive/PX4-Autopilot
Add jsbsim bridge to enable jsbsim for px4 SITL on jsbsim (#15748)
* Add jsbsim bridge to enable jsbsim for px4 SITL/HIL on jsbsim This is a PX4 HIL/SITL integration into JSBSim. JSBSim is an open source flight dynamics model (http://jsbsim.sourceforge.net/) Currently there are three models available which is the rascal, quadrotor_x, hexarotor_x integrated into the bridge. The simulation can be run with the firmware with the following command for example ``` make px4_sitl jsbsim_rascal ``` The visualization is done flightgear and is done by the bridge sending UDP packets to flightgear. To disable the visualization `HEADLESS=1` when running the make command. The simulation can be configured through the configuration files under the `config` directory through a xml file. Senor configurations, The xml file name should match the name of the model. * Update Tools/sitl_run.sh Co-authored-by: Beat Küng <beat-kueng@gmx.net> Co-authored-by: Beat Küng <beat-kueng@gmx.net>
This commit is contained in:
parent
c5f479dac7
commit
458420f9cb
|
@ -48,3 +48,6 @@
|
||||||
[submodule "Tools/flightgear_bridge"]
|
[submodule "Tools/flightgear_bridge"]
|
||||||
path = Tools/flightgear_bridge
|
path = Tools/flightgear_bridge
|
||||||
url = https://github.com/PX4/PX4-FlightGear-Bridge.git
|
url = https://github.com/PX4/PX4-FlightGear-Bridge.git
|
||||||
|
[submodule "Tools/jsbsim_bridge"]
|
||||||
|
path = Tools/jsbsim_bridge
|
||||||
|
url = https://github.com/PX4/px4-jsbsim-bridge.git
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# @name Quadrotor SITL model for JSBSim
|
||||||
|
#
|
||||||
|
# @type Quadrotor Wide
|
||||||
|
#
|
||||||
|
# @maintainer Jaeyoung Lim <jaeyoung@auterion.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
sh /etc/init.d/rc.mc_defaults
|
||||||
|
|
||||||
|
set MIXER quad_w
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# @name Hexacopter SITL model for JSBSim
|
||||||
|
#
|
||||||
|
# @type Hexarotor x
|
||||||
|
#
|
||||||
|
# @maintainer Jaeyoung Lim <jaeyoung@auterion.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
sh /etc/init.d/rc.mc_defaults
|
||||||
|
|
||||||
|
if [ $AUTOCNF = yes ]
|
||||||
|
then
|
||||||
|
param set MC_PITCHRATE_P 0.1
|
||||||
|
param set MC_PITCHRATE_I 0.05
|
||||||
|
param set MC_PITCH_P 6.0
|
||||||
|
param set MC_ROLLRATE_P 0.15
|
||||||
|
param set MC_ROLLRATE_I 0.1
|
||||||
|
param set MC_ROLL_P 6.0
|
||||||
|
param set MPC_XY_VEL_I_ACC 4
|
||||||
|
param set MPC_XY_VEL_P_ACC 3
|
||||||
|
|
||||||
|
param set RTL_DESCEND_ALT 10
|
||||||
|
param set RTL_LAND_DELAY 0
|
||||||
|
|
||||||
|
param set TRIG_INTERFACE 3
|
||||||
|
param set TRIG_MODE 4
|
||||||
|
param set MNT_MODE_IN 4
|
||||||
|
param set MNT_DO_STAB 2
|
||||||
|
param set MAV_PROTO_VER 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
set MAV_TYPE 13
|
||||||
|
|
||||||
|
set MIXER hexa_x
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit efe19dbec7e82784a48c6b6e7710f54468c8a8d4
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Setup environment to make JSBSim visible to PX4.
|
||||||
|
#
|
||||||
|
# License: according to LICENSE.md in the root directory of the PX4 Firmware repository
|
||||||
|
|
||||||
|
if [ "$#" != 3 ]; then
|
||||||
|
echo -e "usage: source setup_jsbsim.bash src_dir build_dir model\n"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
SRC_DIR="$1"
|
||||||
|
BUILD_DIR="$2"
|
||||||
|
MODEL="$3"
|
||||||
|
|
||||||
|
export FG_AIRCRAFT="${SRC_DIR}/Tools/jsbsim_bridge/models"
|
||||||
|
|
||||||
|
# This is needed for aircraft namespace mapping
|
||||||
|
# Need more architectural discussions to make this more scalable
|
||||||
|
case "$MODEL" in
|
||||||
|
rascal)
|
||||||
|
AIRCRAFT_DIR="Rascal"
|
||||||
|
MODEL_NAME="Rascal110-JSBSim"
|
||||||
|
;;
|
||||||
|
quadrotor_x)
|
||||||
|
AIRCRAFT_DIR="quadrotor_x"
|
||||||
|
MODEL_NAME="quadrotor_x"
|
||||||
|
;;
|
||||||
|
hexarotor_x)
|
||||||
|
AIRCRAFT_DIR="hexarotor_x"
|
||||||
|
MODEL_NAME="hexarotor_x"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown Model"
|
||||||
|
exit 1
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
export JSBSIM_AIRCRAFT_DIR="$AIRCRAFT_DIR"
|
||||||
|
export JSBSIM_AIRCRAFT_MODEL="$MODEL_NAME"
|
|
@ -58,7 +58,11 @@ fi
|
||||||
|
|
||||||
if [ "$model" == "" ] || [ "$model" == "none" ]; then
|
if [ "$model" == "" ] || [ "$model" == "none" ]; then
|
||||||
echo "empty model, setting iris as default"
|
echo "empty model, setting iris as default"
|
||||||
model="iris"
|
if [ "$program" == "jsbsim" ]; then
|
||||||
|
model="rascal"
|
||||||
|
else
|
||||||
|
model="iris"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# kill process names that might stil
|
# kill process names that might stil
|
||||||
|
@ -146,6 +150,21 @@ elif [ "$program" == "flightgear" ] && [ -z "$no_sim" ]; then
|
||||||
"${src_path}/Tools/flightgear_bridge/FG_run.py" "models/"${model}".json" 0
|
"${src_path}/Tools/flightgear_bridge/FG_run.py" "models/"${model}".json" 0
|
||||||
"${build_path}/build_flightgear_bridge/flightgear_bridge" 0 `./get_FGbridge_params.py "models/"${model}".json"` &
|
"${build_path}/build_flightgear_bridge/flightgear_bridge" 0 `./get_FGbridge_params.py "models/"${model}".json"` &
|
||||||
FG_BRIDGE_PID=$!
|
FG_BRIDGE_PID=$!
|
||||||
|
elif [ "$program" == "jsbsim" ] && [ -z "$no_sim" ]; then
|
||||||
|
source "$src_path/Tools/setup_jsbsim.bash" "${src_path}" "${build_path}" ${model}
|
||||||
|
if [[ -n "$HEADLESS" ]]; then
|
||||||
|
echo "not running flightgear gui"
|
||||||
|
else
|
||||||
|
fgfs --fdm=null \
|
||||||
|
--native-fdm=socket,in,60,,5550,udp \
|
||||||
|
--aircraft=$JSBSIM_AIRCRAFT_MODEL \
|
||||||
|
--airport=${world} \
|
||||||
|
--disable-hud \
|
||||||
|
--disable-ai-models &> /dev/null &
|
||||||
|
FGFS_PID=$!
|
||||||
|
fi
|
||||||
|
"${build_path}/build_jsbsim_bridge/jsbsim_bridge" "models/${JSBSIM_AIRCRAFT_DIR}" $JSBSIM_AIRCRAFT_MODEL ${model} "${src_path}/Tools/jsbsim_bridge/scene/${world}.xml" $HEADLESS 2> /dev/null &
|
||||||
|
JSBSIM_PID=$!
|
||||||
fi
|
fi
|
||||||
|
|
||||||
pushd "$rootfs" >/dev/null
|
pushd "$rootfs" >/dev/null
|
||||||
|
@ -199,4 +218,7 @@ elif [ "$program" == "gazebo" ]; then
|
||||||
elif [ "$program" == "flightgear" ]; then
|
elif [ "$program" == "flightgear" ]; then
|
||||||
kill $FG_BRIDGE_PID
|
kill $FG_BRIDGE_PID
|
||||||
kill -9 `cat /tmp/px4fgfspid_0`
|
kill -9 `cat /tmp/px4fgfspid_0`
|
||||||
|
elif [ "$program" == "jsbsim" ]; then
|
||||||
|
kill $JSBSIM_PID
|
||||||
|
kill $FGFS_PID
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -26,6 +26,7 @@ add_custom_target(run_config
|
||||||
px4_add_git_submodule(TARGET git_gazebo PATH "${PX4_SOURCE_DIR}/Tools/sitl_gazebo")
|
px4_add_git_submodule(TARGET git_gazebo PATH "${PX4_SOURCE_DIR}/Tools/sitl_gazebo")
|
||||||
px4_add_git_submodule(TARGET git_jmavsim PATH "${PX4_SOURCE_DIR}/Tools/jMAVSim")
|
px4_add_git_submodule(TARGET git_jmavsim PATH "${PX4_SOURCE_DIR}/Tools/jMAVSim")
|
||||||
px4_add_git_submodule(TARGET git_flightgear_bridge PATH "${PX4_SOURCE_DIR}/Tools/flightgear_bridge")
|
px4_add_git_submodule(TARGET git_flightgear_bridge PATH "${PX4_SOURCE_DIR}/Tools/flightgear_bridge")
|
||||||
|
px4_add_git_submodule(TARGET git_jsbsim_bridge PATH "${PX4_SOURCE_DIR}/Tools/jsbsim_bridge")
|
||||||
|
|
||||||
# Add support for external project building
|
# Add support for external project building
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
@ -73,6 +74,20 @@ ExternalProject_Add(flightgear_bridge
|
||||||
BUILD_ALWAYS 1
|
BUILD_ALWAYS 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
ExternalProject_Add(jsbsim_bridge
|
||||||
|
SOURCE_DIR ${PX4_SOURCE_DIR}/Tools/jsbsim_bridge
|
||||||
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}
|
||||||
|
BINARY_DIR ${PX4_BINARY_DIR}/build_jsbsim_bridge
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
DEPENDS
|
||||||
|
git_jsbsim_bridge
|
||||||
|
USES_TERMINAL_CONFIGURE true
|
||||||
|
USES_TERMINAL_BUILD true
|
||||||
|
EXCLUDE_FROM_ALL true
|
||||||
|
BUILD_ALWAYS 1
|
||||||
|
)
|
||||||
|
|
||||||
# create targets for each viewer/model/debugger combination
|
# create targets for each viewer/model/debugger combination
|
||||||
set(viewers none jmavsim gazebo)
|
set(viewers none jmavsim gazebo)
|
||||||
set(debuggers none ide gdb lldb ddd valgrind callgrind)
|
set(debuggers none ide gdb lldb ddd valgrind callgrind)
|
||||||
|
@ -161,6 +176,79 @@ foreach(viewer ${viewers})
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
# create targets for jsbsim
|
||||||
|
set(models_jsbsim none rascal quadrotor_x hexarotor_x)
|
||||||
|
set(worlds_jsbsim none LSZH)
|
||||||
|
foreach(debugger ${debuggers})
|
||||||
|
foreach(model ${models_jsbsim})
|
||||||
|
foreach(world ${worlds_jsbsim})
|
||||||
|
if (world STREQUAL "none")
|
||||||
|
if (debugger STREQUAL "none")
|
||||||
|
if (model STREQUAL "none")
|
||||||
|
set(_targ_name "jsbsim")
|
||||||
|
else()
|
||||||
|
set(_targ_name "jsbsim_${model}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if (model STREQUAL "none")
|
||||||
|
set(_targ_name "jsbsim__${debugger}_${world}")
|
||||||
|
else()
|
||||||
|
set(_targ_name "jsbsim_${model}_${debugger}_${world}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(${_targ_name}
|
||||||
|
COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh
|
||||||
|
$<TARGET_FILE:px4>
|
||||||
|
${debugger}
|
||||||
|
jsbsim
|
||||||
|
${model}
|
||||||
|
"LSZH"
|
||||||
|
${PX4_SOURCE_DIR}
|
||||||
|
${PX4_BINARY_DIR}
|
||||||
|
WORKING_DIRECTORY ${SITL_WORKING_DIR}
|
||||||
|
USES_TERMINAL
|
||||||
|
DEPENDS
|
||||||
|
logs_symlink
|
||||||
|
)
|
||||||
|
list(APPEND all_posix_vmd_make_targets ${_targ_name})
|
||||||
|
add_dependencies(${_targ_name} px4 jsbsim_bridge)
|
||||||
|
else()
|
||||||
|
if (debugger STREQUAL "none")
|
||||||
|
if (model STREQUAL "none")
|
||||||
|
set(_targ_name "jsbsim___${world}")
|
||||||
|
else()
|
||||||
|
set(_targ_name "jsbsim_${model}__${world}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if (model STREQUAL "none")
|
||||||
|
set(_targ_name "jsbsim___${debugger}_${world}")
|
||||||
|
else()
|
||||||
|
set(_targ_name "jsbsim_${model}_${debugger}_${world}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(${_targ_name}
|
||||||
|
COMMAND ${PX4_SOURCE_DIR}/Tools/sitl_run.sh
|
||||||
|
$<TARGET_FILE:px4>
|
||||||
|
${debugger}
|
||||||
|
jsbsim
|
||||||
|
${model}
|
||||||
|
${world}
|
||||||
|
${PX4_SOURCE_DIR}
|
||||||
|
${PX4_BINARY_DIR}
|
||||||
|
WORKING_DIRECTORY ${SITL_WORKING_DIR}
|
||||||
|
USES_TERMINAL
|
||||||
|
DEPENDS
|
||||||
|
logs_symlink
|
||||||
|
)
|
||||||
|
list(APPEND all_posix_vmd_make_targets ${_targ_name})
|
||||||
|
add_dependencies(${_targ_name} px4 jsbsim_bridge)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
endforeach()
|
||||||
|
|
||||||
#add flighgear targets
|
#add flighgear targets
|
||||||
if( ENABLE_LOCKSTEP_SCHEDULER STREQUAL "no")
|
if( ENABLE_LOCKSTEP_SCHEDULER STREQUAL "no")
|
||||||
set(models
|
set(models
|
||||||
|
|
Loading…
Reference in New Issue