mods by mikerb Sat Aug 31 09:35:01 EDT 2024
This commit is contained in:
104
CMakeLists.txt
Normal file
104
CMakeLists.txt
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
#=======================================================================
|
||||||
|
# FILE: moos-ivp-extend/CMakeLists.txt
|
||||||
|
# DATE: 2012/07/24
|
||||||
|
# INFO: Top-level CMakeLists.txt file for the moos-ivp-extend project
|
||||||
|
# NAME: Maintained by Mike Benjamin - Original setup by Christian Convey
|
||||||
|
# Chris Gagner, and tips borrowed from Dave Billin
|
||||||
|
#=======================================================================
|
||||||
|
|
||||||
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.0)
|
||||||
|
PROJECT( IVP_EXTEND )
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 11)
|
||||||
|
|
||||||
|
#=======================================================================
|
||||||
|
# Set the output directories for the binary and library files
|
||||||
|
#=======================================================================
|
||||||
|
|
||||||
|
GET_FILENAME_COMPONENT(IVP_EXTEND_BIN_DIR "${CMAKE_SOURCE_DIR}/bin" ABSOLUTE )
|
||||||
|
GET_FILENAME_COMPONENT(IVP_EXTEND_LIB_DIR "${CMAKE_SOURCE_DIR}/lib" ABSOLUTE )
|
||||||
|
|
||||||
|
SET( LIBRARY_OUTPUT_PATH "${IVP_EXTEND_LIB_DIR}" CACHE PATH "" )
|
||||||
|
SET( ARCHIVE_OUTPUT_DIRECTORY "${IVP_EXTEND_LIB_DIR}" CACHE PATH "" )
|
||||||
|
SET( LIBRARY_OUTPUT_DIRECTORY "${IVP_EXTEND_LIB_DIR}" CACHE PATH "" )
|
||||||
|
|
||||||
|
SET( EXECUTABLE_OUTPUT_PATH "${IVP_EXTEND_BIN_DIR}" CACHE PATH "" )
|
||||||
|
SET( RUNTIME_OUTPUT_DIRECTORY "${IVP_EXTEND_BIN_DIR}" CACHE PATH "" )
|
||||||
|
|
||||||
|
#=======================================================================
|
||||||
|
# Find MOOS
|
||||||
|
#=======================================================================
|
||||||
|
find_package(MOOS 10.0)
|
||||||
|
INCLUDE_DIRECTORIES(${MOOS_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
#=======================================================================
|
||||||
|
# Find the "moos-ivp" base directory
|
||||||
|
#=======================================================================
|
||||||
|
|
||||||
|
# Search for the moos-ivp folder
|
||||||
|
find_path( MOOSIVP_SOURCE_TREE_BASE
|
||||||
|
NAMES build-ivp.sh build-moos.sh configure-ivp.sh
|
||||||
|
PATHS "../moos-ivp" "../../moos-ivp" "../../moos-ivp/trunk/" "../moos-ivp/trunk/"
|
||||||
|
DOC "Base directory of the MOOS-IvP source tree"
|
||||||
|
NO_DEFAULT_PATH
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT MOOSIVP_SOURCE_TREE_BASE)
|
||||||
|
message("Please set MOOSIVP_SOURCE_TREE_BASE to ")
|
||||||
|
message("the location of the \"moos-ivp\" folder ")
|
||||||
|
message( FATAL_ERROR "CMake will exit." )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#======================================================================
|
||||||
|
# Specify where to find IvP's headers and libraries...
|
||||||
|
#======================================================================
|
||||||
|
|
||||||
|
FILE(GLOB IVP_INCLUDE_DIRS ${MOOSIVP_SOURCE_TREE_BASE}/ivp/src/lib_* )
|
||||||
|
INCLUDE_DIRECTORIES(${IVP_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
FILE(GLOB IVP_LIBRARY_DIRS ${MOOSIVP_SOURCE_TREE_BASE}/lib )
|
||||||
|
LINK_DIRECTORIES(${IVP_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
#======================================================================
|
||||||
|
# Specify Compiler Flags
|
||||||
|
#======================================================================
|
||||||
|
IF( ${WIN32} )
|
||||||
|
#---------------------------------------------
|
||||||
|
# Windows Compiler Flags
|
||||||
|
#---------------------------------------------
|
||||||
|
IF(MSVC)
|
||||||
|
# Flags for Microsoft Visual Studio
|
||||||
|
SET( WALL_ON OFF CACHE BOOL
|
||||||
|
"tell me about all compiler warnings (-Wall) ")
|
||||||
|
IF(WALL_ON)
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
|
||||||
|
ENDIF(WALL_ON)
|
||||||
|
ELSE(MSVC)
|
||||||
|
# Other Windows compilers go here
|
||||||
|
ENDIF(MSVC)
|
||||||
|
|
||||||
|
ELSE( ${WIN32} )
|
||||||
|
#---------------------------------------------
|
||||||
|
# Linux and Apple Compiler Flags
|
||||||
|
#---------------------------------------------
|
||||||
|
# Force -fPIC because gcc complains when we don't use it with x86_64 code.
|
||||||
|
# Note sure why: -fPIC should only be needed for shared objects, and
|
||||||
|
# AFAIK, CMake gets that right when building shared objects. -CJC
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -g -Wdeprecated-declarations")
|
||||||
|
IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
# Flags for the GNU C++ Compiler
|
||||||
|
SET( WALL_ON OFF CACHE BOOL
|
||||||
|
"tell me about all compiler warnings (-Wall) ")
|
||||||
|
IF(WALL_ON)
|
||||||
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" -C++11)
|
||||||
|
ENDIF( WALL_ON)
|
||||||
|
ELSE(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
|
||||||
|
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
|
||||||
|
|
||||||
|
ENDIF( ${WIN32} )
|
||||||
|
|
||||||
|
#=======================================================================
|
||||||
|
# Add Subdirectories
|
||||||
|
#=======================================================================
|
||||||
|
ADD_SUBDIRECTORY( src )
|
||||||
84
README
Normal file
84
README
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
##############################################################################
|
||||||
|
# FILE: moos-ivp-extend/README
|
||||||
|
# DATE: 2014/01/02
|
||||||
|
# DESCRIPTION: Contains important information regarding the moos-ivp-extend
|
||||||
|
# repository.
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Introduction
|
||||||
|
#=============================================================================
|
||||||
|
The moos-ivp-extend repository contains examples for extending the MOOS-IvP
|
||||||
|
Autonomy system. This includes a MOOS application and an IvP behavior.
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Directory Structure
|
||||||
|
#=============================================================================
|
||||||
|
The directory structure for the moos-ivp-extend is decribed below:
|
||||||
|
|
||||||
|
bin - Directory for generated executable files
|
||||||
|
build - Directory for build object files
|
||||||
|
build.sh - Script for building moos-ivp-extend
|
||||||
|
CMakeLists.txt - CMake configuration file for the project
|
||||||
|
data - Directory for storing data
|
||||||
|
lib - Directory for generated library files
|
||||||
|
missions - Directory for mission files
|
||||||
|
README - Contains helpful information - (this file).
|
||||||
|
scripts - Directory for script files
|
||||||
|
src - Directory for source code
|
||||||
|
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Build Instructions
|
||||||
|
#=============================================================================
|
||||||
|
#--------------------
|
||||||
|
# Linux and Mac Users
|
||||||
|
#--------------------
|
||||||
|
|
||||||
|
To build on Linux and Apple platforms, execute the build script within this
|
||||||
|
directory:
|
||||||
|
|
||||||
|
$ ./build.sh
|
||||||
|
|
||||||
|
To build without using the supplied script, execute the following commands
|
||||||
|
within this directory:
|
||||||
|
|
||||||
|
$ mkdir -p build
|
||||||
|
$ cd build
|
||||||
|
$ cmake ../
|
||||||
|
$ make
|
||||||
|
$ cd ..
|
||||||
|
|
||||||
|
|
||||||
|
#--------------
|
||||||
|
# Windows Users
|
||||||
|
#--------------
|
||||||
|
To build on Windows platform, open CMake using your favorite shortcut. Then
|
||||||
|
set the source directory to be this directory and set the build directory
|
||||||
|
to the "build" directory inside this directory.
|
||||||
|
|
||||||
|
The source directory is typically next to the question:
|
||||||
|
"Where is the source code?"
|
||||||
|
|
||||||
|
The build directory is typically next to the question:
|
||||||
|
"Where to build the binaries?"
|
||||||
|
|
||||||
|
Alternatively, CMake can be invoked via the command line. However, you must
|
||||||
|
specify your gernerator. Use "cmake --help" for a list of generators and
|
||||||
|
additional help.
|
||||||
|
|
||||||
|
#=============================================================================
|
||||||
|
# Environment variables
|
||||||
|
#=============================================================================
|
||||||
|
The moos-ivp-extend binaries files should be added to your path to allow them
|
||||||
|
to be launched from pAntler.
|
||||||
|
|
||||||
|
In order for generated IvP Behaviors to be recognized by the IvP Helm, you
|
||||||
|
should add the library directory to the "IVP_BEHAVIOR_DIRS" environment
|
||||||
|
variable.
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# END of README
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
84
README.md
Normal file
84
README.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# moos-ivp-extend
|
||||||
|
|
||||||
|
| | |
|
||||||
|
|:------------ |:---------------------- |
|
||||||
|
| FILE: | moos-ivp-extend/README |
|
||||||
|
| DATE: | 2014/01/02 |
|
||||||
|
| DESCRIPTION: | Contains important information regarding the moos-ivp-extend repository. |
|
||||||
|
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
The moos-ivp-extend repository contains examples for extending the MOOS-IvP
|
||||||
|
Autonomy system. This includes a MOOS application and an IvP behavior.
|
||||||
|
|
||||||
|
|
||||||
|
# Directory Structure
|
||||||
|
|
||||||
|
The directory structure for the moos-ivp-extend is described below:
|
||||||
|
|
||||||
|
| Directory | Description |
|
||||||
|
|:---------------- |:------------------------------------------- |
|
||||||
|
| bin | Directory for generated executable files |
|
||||||
|
| build | Directory for build object files |
|
||||||
|
| build.sh | Script for building moos-ivp-extend |
|
||||||
|
| CMakeLists.txt | CMake configuration file for the project |
|
||||||
|
| data | Directory for storing data |
|
||||||
|
| lib | Directory for generated library files |
|
||||||
|
| missions | Directory for mission files |
|
||||||
|
| README | Contains helpful information - (this file). |
|
||||||
|
| scripts | Directory for script files |
|
||||||
|
| src | Directory for source code |
|
||||||
|
|
||||||
|
|
||||||
|
# Build Instructions
|
||||||
|
|
||||||
|
## Linux and Mac Users
|
||||||
|
|
||||||
|
To build on Linux and Apple platforms, execute the build script within this
|
||||||
|
directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
To build without using the supplied script, execute the following commands
|
||||||
|
within this directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ mkdir -p build
|
||||||
|
$ cd build
|
||||||
|
$ cmake ../
|
||||||
|
$ make
|
||||||
|
$ cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Windows Users
|
||||||
|
|
||||||
|
To build on Windows platform, open CMake using your favorite shortcut. Then
|
||||||
|
set the source directory to be this directory and set the build directory
|
||||||
|
to the "build" directory inside this directory.
|
||||||
|
|
||||||
|
The source directory is typically next to the question:
|
||||||
|
"Where is the source code?"
|
||||||
|
|
||||||
|
The build directory is typically next to the question:
|
||||||
|
"Where to build the binaries?"
|
||||||
|
|
||||||
|
Alternatively, CMake can be invoked via the command line. However, you must
|
||||||
|
specify your generator. Use "cmake --help" for a list of generators and
|
||||||
|
additional help.
|
||||||
|
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
|
||||||
|
The moos-ivp-extend binaries files should be added to your path to allow them
|
||||||
|
to be launched from pAntler.
|
||||||
|
|
||||||
|
In order for generated IvP Behaviors to be recognized by the IvP Helm, you
|
||||||
|
should add the library directory to the "IVP_BEHAVIOR_DIRS" environment
|
||||||
|
variable.
|
||||||
|
|
||||||
|
# END of README
|
||||||
|
|
||||||
46
build.sh
Executable file
46
build.sh
Executable file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
INVOCATION_ABS_DIR=`pwd`
|
||||||
|
BUILD_TYPE="None"
|
||||||
|
CMD_LINE_ARGS=""
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# Part 1: Check for and handle command-line arguments
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
for ARGI; do
|
||||||
|
if [ "${ARGI}" = "--help" -o "${ARGI}" = "-h" ] ; then
|
||||||
|
printf "%s [SWITCHES] \n" $0
|
||||||
|
printf "Switches: \n"
|
||||||
|
printf " --help, -h \n"
|
||||||
|
printf " --debug, -d \n"
|
||||||
|
printf " --release, -r \n"
|
||||||
|
printf "Notes: \n"
|
||||||
|
printf " (1) All other command line args will be passed as args \n"
|
||||||
|
printf " to \"make\" when it is eventually invoked. \n"
|
||||||
|
printf " (2) For example -k will continue making when/if a failure \n"
|
||||||
|
printf " is encountered in building one of the subdirectories. \n"
|
||||||
|
printf " (3) For example -j2 will utilize a 2nd core in the build \n"
|
||||||
|
printf " if your machine has two cores. -j4 etc for quad core. \n"
|
||||||
|
exit 0;
|
||||||
|
elif [ "${ARGI}" = "--debug" -o "${ARGI}" = "-d" ] ; then
|
||||||
|
BUILD_TYPE="Debug"
|
||||||
|
elif [ "${ARGI}" = "--release" -o "${ARGI}" = "-r" ] ; then
|
||||||
|
BUILD_TYPE="Release"
|
||||||
|
else
|
||||||
|
CMD_LINE_ARGS=$CMD_LINE_ARGS" "$ARGI
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
# Part 2: Invoke the call to make in the build directory
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=${BUILD_TYPE} ../ || exit 1
|
||||||
|
|
||||||
|
make ${CMD_LINE_ARGS}
|
||||||
|
cd ${INVOCATION_ABS_DIR}
|
||||||
|
|
||||||
|
|
||||||
15
clean.sh
Executable file
15
clean.sh
Executable file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
rm -rf build/*
|
||||||
|
rm -rf lib/*
|
||||||
|
rm -rf bin/p*
|
||||||
|
rm -f .DS_Store
|
||||||
|
rm -f missions/*/.LastOpenedMOOSLogDirectory
|
||||||
|
|
||||||
|
find . -name '.DS_Store' -print -exec rm -rfv {} \;
|
||||||
|
find . -name '*~' -print -exec rm -rfv {} \;
|
||||||
|
find . -name '#*' -print -exec rm -rfv {} \;
|
||||||
|
find . -name '*.moos++' -print -exec rm -rfv {} \;
|
||||||
|
|
||||||
|
find . -name 'MOOSLog*' -print -exec rm -rfv {} \;
|
||||||
|
|
||||||
11
missions/alder/README
Normal file
11
missions/alder/README
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
To Run this mission, make sure that the following two bin
|
||||||
|
directories are in your path:
|
||||||
|
|
||||||
|
moos-ivp/ivp/bin/
|
||||||
|
moos-ivp-extend/bin/
|
||||||
|
|
||||||
|
Then launch the mission by:
|
||||||
|
|
||||||
|
pAntler alder.moos
|
||||||
|
|
||||||
|
|
||||||
33
missions/alder/alder.bhv
Normal file
33
missions/alder/alder.bhv
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
//-------- FILE: alder.bhv -------------
|
||||||
|
|
||||||
|
initialize DEPLOY = false
|
||||||
|
initialize RETURN = false
|
||||||
|
|
||||||
|
//----------------------------------------------
|
||||||
|
Behavior = BHV_SimpleWaypoint
|
||||||
|
{
|
||||||
|
name = waypt_to_point
|
||||||
|
pwt = 100
|
||||||
|
condition = RETURN = false
|
||||||
|
condition = DEPLOY = true
|
||||||
|
endflag = RETURN = true
|
||||||
|
|
||||||
|
speed = 2.0 // meters per second
|
||||||
|
radius = 8.0
|
||||||
|
ptx = 100
|
||||||
|
pty = -50
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------
|
||||||
|
Behavior = BHV_Waypoint
|
||||||
|
{
|
||||||
|
name = waypt_return
|
||||||
|
pwt = 100
|
||||||
|
condition = (RETURN = true)
|
||||||
|
condition = (DEPLOY = true)
|
||||||
|
|
||||||
|
speed = 2.0
|
||||||
|
radius = 8.0
|
||||||
|
point = 0,0
|
||||||
|
}
|
||||||
|
|
||||||
152
missions/alder/alder.moos
Normal file
152
missions/alder/alder.moos
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
// Alder mission file
|
||||||
|
ServerHost = localhost
|
||||||
|
ServerPort = 9000
|
||||||
|
Community = alder
|
||||||
|
MOOSTimeWarp = 1
|
||||||
|
|
||||||
|
LatOrigin = 43.825300
|
||||||
|
LongOrigin = -70.330400
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// Antler config block
|
||||||
|
ProcessConfig = ANTLER
|
||||||
|
{
|
||||||
|
MSBetweenLaunches = 200
|
||||||
|
|
||||||
|
Run = MOOSDB @ NewConsole = false
|
||||||
|
Run = uSimMarineV22 @ NewConsole = false
|
||||||
|
Run = pNodeReporter @ NewConsole = false
|
||||||
|
Run = pMarinePIDV22 @ NewConsole = false
|
||||||
|
Run = pMarineViewer @ NewConsole = false
|
||||||
|
Run = uProcessWatch @ NewConsole = false
|
||||||
|
Run = pHelmIvP @ NewConsole = false
|
||||||
|
//Run = pOdometry @ NewConsole = false
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// uSimMarineV22 config block
|
||||||
|
|
||||||
|
ProcessConfig = uSimMarineV22
|
||||||
|
{
|
||||||
|
AppTick = 10
|
||||||
|
CommsTick = 10
|
||||||
|
|
||||||
|
START_X = 0
|
||||||
|
START_Y = 0
|
||||||
|
START_SPEED = 0
|
||||||
|
START_HEADING = 180
|
||||||
|
PREFIX = NAV
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// uProcessWatch config block
|
||||||
|
|
||||||
|
ProcessConfig = uProcessWatch
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
summary_wait = 5
|
||||||
|
|
||||||
|
nowatch = uXMS*
|
||||||
|
nowatch = uMAC*
|
||||||
|
nowatch = uPokeDB*
|
||||||
|
nowatch = uQueryDB*
|
||||||
|
nowatch = uTermCommand*
|
||||||
|
watch_all = true
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// pHelmIvP config block
|
||||||
|
|
||||||
|
ProcessConfig = pHelmIvP
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
Behaviors = alder.bhv
|
||||||
|
Verbose = quiet
|
||||||
|
Domain = course:0:359:360
|
||||||
|
Domain = speed:0:4:21
|
||||||
|
|
||||||
|
//IVP_BEHAVIOR_DIR = ../../lib
|
||||||
|
|
||||||
|
ok_skew = any
|
||||||
|
start_in_drive = false
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// pMarinePIDV22 config block
|
||||||
|
|
||||||
|
ProcessConfig = pMarinePIDV22
|
||||||
|
{
|
||||||
|
AppTick = 20
|
||||||
|
CommsTick = 20
|
||||||
|
|
||||||
|
VERBOSE = true
|
||||||
|
DEPTH_CONTROL = false
|
||||||
|
|
||||||
|
// Yaw PID controller
|
||||||
|
YAW_PID_KP = 0.5
|
||||||
|
YAW_PID_KD = 0.0
|
||||||
|
YAW_PID_KI = 0.0
|
||||||
|
YAW_PID_INTEGRAL_LIMIT = 0.07
|
||||||
|
|
||||||
|
// Speed PID controller
|
||||||
|
SPEED_PID_KP = 1.0
|
||||||
|
SPEED_PID_KD = 0.0
|
||||||
|
SPEED_PID_KI = 0.0
|
||||||
|
SPEED_PID_INTEGRAL_LIMIT = 0.07
|
||||||
|
|
||||||
|
//MAXIMUMS
|
||||||
|
MAXRUDDER = 100
|
||||||
|
MAXTHRUST = 100
|
||||||
|
|
||||||
|
// A non-zero SPEED_FACTOR overrides use of SPEED_PID
|
||||||
|
// Will set DESIRED_THRUST = DESIRED_SPEED * SPEED_FACTOR
|
||||||
|
SPEED_FACTOR = 20
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// pMarineViewer config block
|
||||||
|
|
||||||
|
ProcessConfig = pMarineViewer
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
TIFF_FILE = forrest19.tif
|
||||||
|
set_pan_x = -90
|
||||||
|
set_pan_y = -280
|
||||||
|
zoom = 0.65
|
||||||
|
vehicle_shape_scale = 1.5
|
||||||
|
hash_delta = 50
|
||||||
|
hash_shade = 0.4
|
||||||
|
hash_viewable = true
|
||||||
|
|
||||||
|
scope = ODOMETRY_DIST
|
||||||
|
|
||||||
|
// Appcast configuration
|
||||||
|
appcast_height = 75
|
||||||
|
appcast_width = 30
|
||||||
|
appcast_viewable = true
|
||||||
|
appcast_color_scheme = indigo
|
||||||
|
nodes_font_size = medium
|
||||||
|
procs_font_size = medium
|
||||||
|
appcast_font_size = small
|
||||||
|
|
||||||
|
BUTTON_ONE = DEPLOY # DEPLOY=true
|
||||||
|
BUTTON_ONE = MOOS_MANUAL_OVERIDE=false # RETURN=false
|
||||||
|
BUTTON_TWO = RETURN # RETURN=true
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// pNodeReporter config block
|
||||||
|
|
||||||
|
ProcessConfig = pNodeReporter
|
||||||
|
{
|
||||||
|
AppTick = 2
|
||||||
|
CommsTick = 2
|
||||||
|
|
||||||
|
vessel_type = kayak
|
||||||
|
}
|
||||||
54
missions/xrelay/xrelay.moos
Normal file
54
missions/xrelay/xrelay.moos
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
// MOOS file
|
||||||
|
|
||||||
|
ServerHost = localhost
|
||||||
|
ServerPort = 9000
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// Antler configuration block
|
||||||
|
ProcessConfig = ANTLER
|
||||||
|
{
|
||||||
|
MSBetweenLaunches = 200
|
||||||
|
|
||||||
|
Run = MOOSDB @ NewConsole = false
|
||||||
|
Run = pXRelay @ NewConsole = true ~ pXRelay_APPLES
|
||||||
|
Run = pXRelay @ NewConsole = true ~ pXRelay_PEARS
|
||||||
|
Run = uXMS @ NewConsole = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// First pXRelay configuration block
|
||||||
|
|
||||||
|
ProcessConfig = pXRelay_APPLES
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
OUTGOING_VAR = APPLES
|
||||||
|
INCOMING_VAR = PEARS
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// Second pXRelay configuration block
|
||||||
|
|
||||||
|
ProcessConfig = pXRelay_PEARS
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
OUTGOING_VAR = PEARS
|
||||||
|
INCOMING_VAR = APPLES
|
||||||
|
}
|
||||||
|
|
||||||
|
//------------------------------------------
|
||||||
|
// uXMS configuration block
|
||||||
|
|
||||||
|
ProcessConfig = uXMS
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
VAR = PEARS, PEARS_ITER_HZ, PEARS_POST_HZ
|
||||||
|
VAR = APPLES, APPLES_ITER_HZ, APPLES_POST_HZ
|
||||||
|
}
|
||||||
|
|
||||||
5
scripts/README
Normal file
5
scripts/README
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
This directory may contain developer utility scripts.
|
||||||
|
|
||||||
|
The MyGenMOOSApp script is similar to that found in the moos-ivp/trunk/scripts/
|
||||||
|
directory. Users are encouraged to tailor this one to their own needs.
|
||||||
|
|
||||||
25
src/CMakeLists.txt
Normal file
25
src/CMakeLists.txt
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
##############################################################################
|
||||||
|
# FILE: moos-ivp-extend/src/CMakeLists.txt
|
||||||
|
# DATE: 2010/09/07
|
||||||
|
# 2020/05/09 minor mods
|
||||||
|
# DESCRIPTION: CMakeLists.txt file for the moos-ivp-extend source directory
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# Add the libraries in the current directory to the include path
|
||||||
|
#============================================================================
|
||||||
|
FILE(GLOB LOCAL_LIBRARY_DIRS ./lib_*)
|
||||||
|
INCLUDE_DIRECTORIES(${LOCAL_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
#============================================================================
|
||||||
|
# List the subdirectories to build...
|
||||||
|
#============================================================================
|
||||||
|
ADD_SUBDIRECTORY(lib_behaviors-test)
|
||||||
|
ADD_SUBDIRECTORY(pExampleApp)
|
||||||
|
ADD_SUBDIRECTORY(pXRelayTest)
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# END of CMakeLists.txt
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
154
src/lib_behaviors-test/AOF_SimpleWaypoint.cpp
Normal file
154
src/lib_behaviors-test/AOF_SimpleWaypoint.cpp
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin and John Leonard */
|
||||||
|
/* ORGN: NAVSEA Newport RI and MIT Cambridge MA */
|
||||||
|
/* FILE: AOF_SimpleWaypoint.cpp */
|
||||||
|
/* DATE: Feb 22th 2009 */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#pragma warning(disable : 4786)
|
||||||
|
#pragma warning(disable : 4503)
|
||||||
|
#endif
|
||||||
|
#include <math.h>
|
||||||
|
#include "AOF_SimpleWaypoint.h"
|
||||||
|
#include "AngleUtils.h"
|
||||||
|
#include "GeomUtils.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//----------------------------------------------------------
|
||||||
|
// Procedure: Constructor
|
||||||
|
|
||||||
|
AOF_SimpleWaypoint::AOF_SimpleWaypoint(IvPDomain g_domain) : AOF(g_domain)
|
||||||
|
{
|
||||||
|
// Unitialized cache values for later use in evalBox calls
|
||||||
|
m_min_speed = 0;
|
||||||
|
m_max_speed = 0;
|
||||||
|
m_angle_to_wpt = 0;
|
||||||
|
|
||||||
|
// Initialization parameters
|
||||||
|
m_osx = 0; // ownship x-position
|
||||||
|
m_osy = 0; // ownship y-position
|
||||||
|
m_ptx = 0; // waypoint x-position
|
||||||
|
m_pty = 0; // waypoint y-position
|
||||||
|
m_desired_spd = 0;
|
||||||
|
|
||||||
|
// Initialization parameter flags
|
||||||
|
m_osy_set = false;
|
||||||
|
m_osx_set = false;
|
||||||
|
m_pty_set = false;
|
||||||
|
m_ptx_set = false;
|
||||||
|
m_desired_spd_set = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: setParam
|
||||||
|
|
||||||
|
bool AOF_SimpleWaypoint::setParam(const string& param, double param_val)
|
||||||
|
{
|
||||||
|
if(param == "osy") {
|
||||||
|
m_osy = param_val;
|
||||||
|
m_osy_set = true;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if(param == "osx") {
|
||||||
|
m_osx = param_val;
|
||||||
|
m_osx_set = true;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if(param == "pty") {
|
||||||
|
m_pty = param_val;
|
||||||
|
m_pty_set = true;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if(param == "ptx") {
|
||||||
|
m_ptx = param_val;
|
||||||
|
m_ptx_set = true;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if(param == "desired_speed") {
|
||||||
|
m_desired_spd = param_val;
|
||||||
|
m_desired_spd_set = true;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: initialize
|
||||||
|
|
||||||
|
bool AOF_SimpleWaypoint::initialize()
|
||||||
|
{
|
||||||
|
// Check for failure conditions
|
||||||
|
if(!m_osy_set || !m_osx_set || !m_pty_set || !m_ptx_set || !m_desired_spd_set)
|
||||||
|
return(false);
|
||||||
|
if(!m_domain.hasDomain("speed") || !m_domain.hasDomain("course"))
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
// Initialize local variables to cache intermediate calculations
|
||||||
|
m_angle_to_wpt = relAng(m_osx, m_osy, m_ptx, m_pty);;
|
||||||
|
m_min_speed = m_domain.getVarLow("speed");
|
||||||
|
m_max_speed = m_domain.getVarHigh("speed");
|
||||||
|
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: evalPoint
|
||||||
|
// Purpose: Evaluate a candidate point in the decision space
|
||||||
|
|
||||||
|
double AOF_SimpleWaypoint::evalPoint(const vector<double>& point) const
|
||||||
|
{
|
||||||
|
// Determine the course and speed being evaluated
|
||||||
|
double eval_crs = extract("course", point);
|
||||||
|
double eval_spd = extract("speed", point);
|
||||||
|
|
||||||
|
// Calculate the first score, score_roc, based on rate of closure
|
||||||
|
double angle_diff = angle360(eval_crs - m_angle_to_wpt);
|
||||||
|
double rad_diff = degToRadians(angle_diff);
|
||||||
|
double rate_of_closure = cos(rad_diff) * eval_spd;
|
||||||
|
|
||||||
|
double roc_range = 2 * m_max_speed;
|
||||||
|
double roc_diff = (m_desired_spd - rate_of_closure);
|
||||||
|
if(roc_diff < 0)
|
||||||
|
roc_diff *= -0.5; // flip the sign, cut the penalty for being over
|
||||||
|
if(roc_diff > roc_range)
|
||||||
|
roc_diff = roc_range;
|
||||||
|
|
||||||
|
double pct = (roc_diff / roc_range);
|
||||||
|
double score_roc = (1.0 - pct) * 100;
|
||||||
|
|
||||||
|
// Calculate the second score, score_rod, based on rate of detour
|
||||||
|
double angle_180 = angle180(angle_diff);
|
||||||
|
if(angle_180 < 0)
|
||||||
|
angle_180 *= -1;
|
||||||
|
if(eval_spd < 0)
|
||||||
|
eval_spd = 0;
|
||||||
|
double rate_of_detour = (angle_180 * eval_spd);
|
||||||
|
|
||||||
|
double rod_range = (m_max_speed * 180);
|
||||||
|
double rod_pct = (rate_of_detour / rod_range);
|
||||||
|
double score_rod = (1.0 - rod_pct) * 100;
|
||||||
|
|
||||||
|
// Calculate the third score, score_spd, based on ideal speed.
|
||||||
|
double spd_range = m_max_speed - m_desired_spd;
|
||||||
|
if((m_desired_spd - m_min_speed) > spd_range)
|
||||||
|
spd_range = m_desired_spd - m_min_speed;
|
||||||
|
double spd_diff = m_desired_spd - eval_spd;
|
||||||
|
if(spd_diff < 0)
|
||||||
|
spd_diff *= -1;
|
||||||
|
if(spd_diff > spd_range)
|
||||||
|
spd_diff = spd_range;
|
||||||
|
double spd_pct = (spd_diff / spd_range);
|
||||||
|
double score_spd = (1.0 - spd_pct) * 100;
|
||||||
|
|
||||||
|
// CALCULATE THE COMBINED SCORE
|
||||||
|
double combined_score = 0;
|
||||||
|
combined_score += (0.75 * score_roc);
|
||||||
|
combined_score += (0.2 * score_rod);
|
||||||
|
combined_score += (0.05 * score_spd);
|
||||||
|
|
||||||
|
return(combined_score);
|
||||||
|
}
|
||||||
|
|
||||||
46
src/lib_behaviors-test/AOF_SimpleWaypoint.h
Normal file
46
src/lib_behaviors-test/AOF_SimpleWaypoint.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin and John Leonard */
|
||||||
|
/* ORGN: NAVSEA Newport RI and MIT Cambridge MA */
|
||||||
|
/* FILE: AOF_SimpleWaypoint.h */
|
||||||
|
/* DATE: Feb 22th 2009 */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#ifndef AOF_SIMPLE_WAYPOINT_HEADER
|
||||||
|
#define AOF_SIMPLE_WAYPOINT_HEADER
|
||||||
|
|
||||||
|
#include "AOF.h"
|
||||||
|
#include "IvPDomain.h"
|
||||||
|
|
||||||
|
class AOF_SimpleWaypoint: public AOF {
|
||||||
|
public:
|
||||||
|
AOF_SimpleWaypoint(IvPDomain);
|
||||||
|
~AOF_SimpleWaypoint() {};
|
||||||
|
|
||||||
|
public: // virtuals defined
|
||||||
|
double evalPoint(const std::vector<double>&) const;
|
||||||
|
bool setParam(const std::string&, double);
|
||||||
|
bool initialize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// Initialization parameters
|
||||||
|
double m_osx; // Ownship x position at time Tm.
|
||||||
|
double m_osy; // Ownship y position at time Tm.
|
||||||
|
double m_ptx; // x component of next the waypoint.
|
||||||
|
double m_pty; // y component of next the waypoint.
|
||||||
|
double m_desired_spd;
|
||||||
|
|
||||||
|
// Initialization parameter set flags
|
||||||
|
bool m_osx_set;
|
||||||
|
bool m_osy_set;
|
||||||
|
bool m_ptx_set;
|
||||||
|
bool m_pty_set;
|
||||||
|
bool m_desired_spd_set;
|
||||||
|
|
||||||
|
// Cached values for more efficient evalBox calls
|
||||||
|
double m_angle_to_wpt;
|
||||||
|
double m_min_speed;
|
||||||
|
double m_max_speed;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
224
src/lib_behaviors-test/BHV_SimpleWaypoint.cpp
Normal file
224
src/lib_behaviors-test/BHV_SimpleWaypoint.cpp
Normal file
@@ -0,0 +1,224 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: M.Benjamin, H.Schmidt, J. Leonard */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: BHV_SimpleWaypoint.cpp */
|
||||||
|
/* DATE: July 1st 2008 (For purposes of simple illustration) */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <math.h>
|
||||||
|
#include "BHV_SimpleWaypoint.h"
|
||||||
|
#include "MBUtils.h"
|
||||||
|
#include "AngleUtils.h"
|
||||||
|
#include "BuildUtils.h"
|
||||||
|
#include "ZAIC_PEAK.h"
|
||||||
|
#include "OF_Coupler.h"
|
||||||
|
#include "OF_Reflector.h"
|
||||||
|
#include "AOF_SimpleWaypoint.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: Constructor
|
||||||
|
|
||||||
|
BHV_SimpleWaypoint::BHV_SimpleWaypoint(IvPDomain gdomain) :
|
||||||
|
IvPBehavior(gdomain)
|
||||||
|
{
|
||||||
|
IvPBehavior::setParam("name", "simple_waypoint");
|
||||||
|
m_domain = subDomain(m_domain, "course,speed");
|
||||||
|
|
||||||
|
// All distances are in meters, all speed in meters per second
|
||||||
|
// Default values for configuration parameters
|
||||||
|
m_desired_speed = 0;
|
||||||
|
m_arrival_radius = 10;
|
||||||
|
m_ipf_type = "zaic";
|
||||||
|
|
||||||
|
// Default values for behavior state variables
|
||||||
|
m_osx = 0;
|
||||||
|
m_osy = 0;
|
||||||
|
|
||||||
|
addInfoVars("NAV_X, NAV_Y");
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------------
|
||||||
|
// Procedure: setParam - handle behavior configuration parameters
|
||||||
|
|
||||||
|
bool BHV_SimpleWaypoint::setParam(string param, string val)
|
||||||
|
{
|
||||||
|
// Convert the parameter to lower case for more general matching
|
||||||
|
param = tolower(param);
|
||||||
|
|
||||||
|
double double_val = atof(val.c_str());
|
||||||
|
if((param == "ptx") && (isNumber(val))) {
|
||||||
|
m_nextpt.set_vx(double_val);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if((param == "pty") && (isNumber(val))) {
|
||||||
|
m_nextpt.set_vy(double_val);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if((param == "speed") && (double_val > 0) && (isNumber(val))) {
|
||||||
|
m_desired_speed = double_val;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if((param == "radius") && (double_val > 0) && (isNumber(val))) {
|
||||||
|
m_arrival_radius = double_val;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else if(param == "ipf_type") {
|
||||||
|
val = tolower(val);
|
||||||
|
if((val == "zaic") || (val == "reflector")) {
|
||||||
|
m_ipf_type = val;
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: onIdleState
|
||||||
|
|
||||||
|
void BHV_SimpleWaypoint::onIdleState()
|
||||||
|
{
|
||||||
|
postViewPoint(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: postViewPoint
|
||||||
|
|
||||||
|
void BHV_SimpleWaypoint::postViewPoint(bool viewable)
|
||||||
|
{
|
||||||
|
m_nextpt.set_label(m_us_name + "'s next waypoint");
|
||||||
|
|
||||||
|
string point_spec;
|
||||||
|
if(viewable)
|
||||||
|
point_spec = m_nextpt.get_spec("active=true");
|
||||||
|
else
|
||||||
|
point_spec = m_nextpt.get_spec("active=false");
|
||||||
|
postMessage("VIEW_POINT", point_spec);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: onRunState
|
||||||
|
|
||||||
|
IvPFunction *BHV_SimpleWaypoint::onRunState()
|
||||||
|
{
|
||||||
|
// Part 1: Get vehicle position from InfoBuffer and post a
|
||||||
|
// warning if problem is encountered
|
||||||
|
bool ok1, ok2;
|
||||||
|
m_osx = getBufferDoubleVal("NAV_X", ok1);
|
||||||
|
m_osy = getBufferDoubleVal("NAV_Y", ok2);
|
||||||
|
if(!ok1 || !ok2) {
|
||||||
|
postWMessage("No ownship X/Y info in info_buffer.");
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Part 2: Determine if the vehicle has reached the destination
|
||||||
|
// point and if so, declare completion.
|
||||||
|
#ifdef WIN32
|
||||||
|
double dist = _hypot((m_nextpt.x()-m_osx), (m_nextpt.y()-m_osy));
|
||||||
|
#else
|
||||||
|
double dist = hypot((m_nextpt.x()-m_osx), (m_nextpt.y()-m_osy));
|
||||||
|
#endif
|
||||||
|
if(dist <= m_arrival_radius) {
|
||||||
|
setComplete();
|
||||||
|
postViewPoint(false);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Part 3: Post the waypoint as a string for consumption by
|
||||||
|
// a viewer application.
|
||||||
|
postViewPoint(true);
|
||||||
|
|
||||||
|
// Part 4: Build the IvP function with either the ZAIC tool
|
||||||
|
// or the Reflector tool.
|
||||||
|
IvPFunction *ipf = 0;
|
||||||
|
if(m_ipf_type == "zaic")
|
||||||
|
ipf = buildFunctionWithZAIC();
|
||||||
|
else
|
||||||
|
ipf = buildFunctionWithReflector();
|
||||||
|
if(ipf == 0)
|
||||||
|
postWMessage("Problem Creating the IvP Function");
|
||||||
|
|
||||||
|
if(ipf)
|
||||||
|
ipf->setPWT(m_priority_wt);
|
||||||
|
|
||||||
|
return(ipf);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: buildFunctionWithZAIC
|
||||||
|
|
||||||
|
IvPFunction *BHV_SimpleWaypoint::buildFunctionWithZAIC()
|
||||||
|
{
|
||||||
|
ZAIC_PEAK spd_zaic(m_domain, "speed");
|
||||||
|
spd_zaic.setSummit(m_desired_speed);
|
||||||
|
spd_zaic.setPeakWidth(0.5);
|
||||||
|
spd_zaic.setBaseWidth(1.0);
|
||||||
|
spd_zaic.setSummitDelta(0.8);
|
||||||
|
if(spd_zaic.stateOK() == false) {
|
||||||
|
string warnings = "Speed ZAIC problems " + spd_zaic.getWarnings();
|
||||||
|
postWMessage(warnings);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
double rel_ang_to_wpt = relAng(m_osx, m_osy, m_nextpt.x(), m_nextpt.y());
|
||||||
|
ZAIC_PEAK crs_zaic(m_domain, "course");
|
||||||
|
crs_zaic.setSummit(rel_ang_to_wpt);
|
||||||
|
crs_zaic.setPeakWidth(0);
|
||||||
|
crs_zaic.setBaseWidth(180.0);
|
||||||
|
crs_zaic.setSummitDelta(0);
|
||||||
|
crs_zaic.setValueWrap(true);
|
||||||
|
if(crs_zaic.stateOK() == false) {
|
||||||
|
string warnings = "Course ZAIC problems " + crs_zaic.getWarnings();
|
||||||
|
postWMessage(warnings);
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
IvPFunction *spd_ipf = spd_zaic.extractIvPFunction();
|
||||||
|
IvPFunction *crs_ipf = crs_zaic.extractIvPFunction();
|
||||||
|
|
||||||
|
OF_Coupler coupler;
|
||||||
|
IvPFunction *ivp_function = coupler.couple(crs_ipf, spd_ipf, 50, 50);
|
||||||
|
|
||||||
|
return(ivp_function);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------
|
||||||
|
// Procedure: buildFunctionWithReflector
|
||||||
|
|
||||||
|
IvPFunction *BHV_SimpleWaypoint::buildFunctionWithReflector()
|
||||||
|
{
|
||||||
|
IvPFunction *ivp_function;
|
||||||
|
|
||||||
|
bool ok = true;
|
||||||
|
AOF_SimpleWaypoint aof_wpt(m_domain);
|
||||||
|
ok = ok && aof_wpt.setParam("desired_speed", m_desired_speed);
|
||||||
|
ok = ok && aof_wpt.setParam("osx", m_osx);
|
||||||
|
ok = ok && aof_wpt.setParam("osy", m_osy);
|
||||||
|
ok = ok && aof_wpt.setParam("ptx", m_nextpt.x());
|
||||||
|
ok = ok && aof_wpt.setParam("pty", m_nextpt.y());
|
||||||
|
ok = ok && aof_wpt.initialize();
|
||||||
|
if(ok) {
|
||||||
|
OF_Reflector reflector(&aof_wpt);
|
||||||
|
reflector.create(600, 500);
|
||||||
|
ivp_function = reflector.extractIvPFunction();
|
||||||
|
}
|
||||||
|
|
||||||
|
return(ivp_function);
|
||||||
|
}
|
||||||
75
src/lib_behaviors-test/BHV_SimpleWaypoint.h
Normal file
75
src/lib_behaviors-test/BHV_SimpleWaypoint.h
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: M.Benjamin, H.Schmidt, J. Leonard */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: BHV_SimpleWaypoint.ch */
|
||||||
|
/* DATE: July 1st 2008 (For purposes of simple illustration) */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#ifndef BHV_SIMPLE_WAYPOINT_HEADER
|
||||||
|
#define BHV_SIMPLE_WAYPOINT_HEADER
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include "IvPBehavior.h"
|
||||||
|
#include "XYPoint.h"
|
||||||
|
|
||||||
|
class BHV_SimpleWaypoint : public IvPBehavior {
|
||||||
|
public:
|
||||||
|
BHV_SimpleWaypoint(IvPDomain);
|
||||||
|
~BHV_SimpleWaypoint() {};
|
||||||
|
|
||||||
|
bool setParam(std::string, std::string);
|
||||||
|
void onIdleState();
|
||||||
|
IvPFunction* onRunState();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void postViewPoint(bool viewable=true);
|
||||||
|
IvPFunction* buildFunctionWithZAIC();
|
||||||
|
IvPFunction* buildFunctionWithReflector();
|
||||||
|
|
||||||
|
protected: // Configuration parameters
|
||||||
|
double m_arrival_radius;
|
||||||
|
double m_desired_speed;
|
||||||
|
XYPoint m_nextpt;
|
||||||
|
std::string m_ipf_type;
|
||||||
|
|
||||||
|
protected: // State variables
|
||||||
|
double m_osx;
|
||||||
|
double m_osy;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
// Windows needs to explicitly specify functions to export from a dll
|
||||||
|
#define IVP_EXPORT_FUNCTION __declspec(dllexport)
|
||||||
|
#else
|
||||||
|
#define IVP_EXPORT_FUNCTION
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
IVP_EXPORT_FUNCTION IvPBehavior * createBehavior(std::string name, IvPDomain domain)
|
||||||
|
{return new BHV_SimpleWaypoint(domain);}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
47
src/lib_behaviors-test/CMakeLists.txt
Normal file
47
src/lib_behaviors-test/CMakeLists.txt
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#--------------------------------------------------------
|
||||||
|
# The CMakeLists.txt for: lib_behaviors-test
|
||||||
|
# Author(s):
|
||||||
|
#--------------------------------------------------------
|
||||||
|
|
||||||
|
# Set System Specific Libraries
|
||||||
|
if (${WIN32})
|
||||||
|
# Windows Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
)
|
||||||
|
else (${WIN32})
|
||||||
|
# Linux and Apple Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
m )
|
||||||
|
endif (${WIN32})
|
||||||
|
|
||||||
|
|
||||||
|
MACRO(ADD_BHV BHV_NAME)
|
||||||
|
ADD_LIBRARY(${BHV_NAME} SHARED ${BHV_NAME}.cpp)
|
||||||
|
TARGET_LINK_LIBRARIES(${BHV_NAME}
|
||||||
|
helmivp
|
||||||
|
behaviors
|
||||||
|
ivpbuild
|
||||||
|
logic
|
||||||
|
ivpcore
|
||||||
|
bhvutil
|
||||||
|
mbutil
|
||||||
|
geometry
|
||||||
|
${SYSTEM_LIBS} )
|
||||||
|
ENDMACRO(ADD_BHV)
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------
|
||||||
|
# BHV_SimpleWaypoint
|
||||||
|
#--------------------------------------------------------
|
||||||
|
ADD_LIBRARY(BHV_SimpleWaypoint SHARED
|
||||||
|
BHV_SimpleWaypoint.cpp AOF_SimpleWaypoint.cpp)
|
||||||
|
TARGET_LINK_LIBRARIES(BHV_SimpleWaypoint
|
||||||
|
helmivp
|
||||||
|
behaviors
|
||||||
|
ivpbuild
|
||||||
|
logic
|
||||||
|
ivpcore
|
||||||
|
bhvutil
|
||||||
|
mbutil
|
||||||
|
geometry
|
||||||
|
${SYSTEM_LIBS} )
|
||||||
12
src/lib_behaviors-test/README
Normal file
12
src/lib_behaviors-test/README
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
To use the dynamic loading of behaviors, you need to set the following
|
||||||
|
environment variable (in your .bashrc file for bash users, or in your
|
||||||
|
.cshrc file for tcsh users)
|
||||||
|
|
||||||
|
For bash users:
|
||||||
|
export IVP_BEHAVIOR_DIRS=/home/bob/moos-ivp-extend/lib
|
||||||
|
|
||||||
|
For tcsh users:
|
||||||
|
setenv IVP_BEHAVIOR_DIRS '/home/bob/moos-ivp-extend/lib'
|
||||||
|
|
||||||
|
|
||||||
27
src/pExampleApp/CMakeLists.txt
Normal file
27
src/pExampleApp/CMakeLists.txt
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
#--------------------------------------------------------
|
||||||
|
# The CMakeLists.txt for: pExampleApp
|
||||||
|
# Author(s): Mike Benjamin
|
||||||
|
#--------------------------------------------------------
|
||||||
|
|
||||||
|
# Set System Specific Libraries
|
||||||
|
if (${WIN32})
|
||||||
|
# Windows Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
wsock32 )
|
||||||
|
else (${WIN32})
|
||||||
|
# Linux and Apple Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
m
|
||||||
|
pthread )
|
||||||
|
endif (${WIN32})
|
||||||
|
|
||||||
|
|
||||||
|
SET(SRC
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(pExampleApp ${SRC})
|
||||||
|
|
||||||
|
TARGET_LINK_LIBRARIES(pExampleApp
|
||||||
|
${MOOS_LIBRARIES}
|
||||||
|
${SYSTEM_LIBS} )
|
||||||
30
src/pExampleApp/ExampleApp.h
Normal file
30
src/pExampleApp/ExampleApp.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
// This is the CMOOSApp example from the MOOS website documentation
|
||||||
|
// Included here for convenience
|
||||||
|
//
|
||||||
|
// Feb 10th, 2013
|
||||||
|
|
||||||
|
#include "MOOS/libMOOS/App/MOOSApp.h"
|
||||||
|
|
||||||
|
class ExampleApp : public CMOOSApp {
|
||||||
|
|
||||||
|
bool OnNewMail (MOOSMSG_LIST & Mail)
|
||||||
|
{
|
||||||
|
// process it
|
||||||
|
MOOSMSG_LIST::iterator q;
|
||||||
|
for(q=Mail.begin(); q!=Mail.end(); q++) {
|
||||||
|
q->Trace();
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OnConnectToServer () {
|
||||||
|
return(Register("X", 0.0));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Iterate ( ) {
|
||||||
|
std :: vector<unsigned char> X(100) ;
|
||||||
|
Notify("X" ,X) ;
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
25
src/pExampleApp/main.cpp
Normal file
25
src/pExampleApp/main.cpp
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
// This is the CMOOSApp example from the MOOS website documentation
|
||||||
|
// Included here for convenience
|
||||||
|
//
|
||||||
|
// Feb 10th, 2013
|
||||||
|
|
||||||
|
#include "MOOS/libMOOS/App/MOOSApp.h"
|
||||||
|
#include "ExampleApp.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
//here we do some command line parsing ...
|
||||||
|
MOOS::CommandLineParser P(argc, argv);
|
||||||
|
|
||||||
|
//mission file could be first free parameter
|
||||||
|
std::string mission_file = P.GetFreeParameter(0, "Mission.moos");
|
||||||
|
|
||||||
|
//app name can be the second free parameter
|
||||||
|
std::string app_name = P.GetFreeParameter(1, "ExampleApp");
|
||||||
|
|
||||||
|
ExampleApp App;
|
||||||
|
App.Run(app_name, mission_file, argc, argv);
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
30
src/pXRelayTest/CMakeLists.txt
Normal file
30
src/pXRelayTest/CMakeLists.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#--------------------------------------------------------
|
||||||
|
# The CMakeLists.txt for: pXRelayTest
|
||||||
|
# Author(s): Mike Benjamin
|
||||||
|
#--------------------------------------------------------
|
||||||
|
|
||||||
|
# Set System Specific Libraries
|
||||||
|
if (${WIN32})
|
||||||
|
# Windows Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
wsock32 )
|
||||||
|
else (${WIN32})
|
||||||
|
# Linux and Apple Libraries
|
||||||
|
SET(SYSTEM_LIBS
|
||||||
|
m
|
||||||
|
pthread )
|
||||||
|
endif (${WIN32})
|
||||||
|
|
||||||
|
|
||||||
|
SET(SRC
|
||||||
|
Relayer.cpp
|
||||||
|
Relayer_Info.cpp
|
||||||
|
main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
ADD_EXECUTABLE(pXRelayTest ${SRC})
|
||||||
|
|
||||||
|
TARGET_LINK_LIBRARIES(pXRelayTest
|
||||||
|
${MOOS_LIBRARIES}
|
||||||
|
mbutil
|
||||||
|
${SYSTEM_LIBS} )
|
||||||
146
src/pXRelayTest/Relayer.cpp
Normal file
146
src/pXRelayTest/Relayer.cpp
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: Relayer.cpp */
|
||||||
|
/* DATE: June 26th, 2008 */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#include <iterator>
|
||||||
|
#include "Relayer.h"
|
||||||
|
#include "MBUtils.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Constructor
|
||||||
|
|
||||||
|
Relayer::Relayer()
|
||||||
|
{
|
||||||
|
|
||||||
|
m_tally_recd = 0;
|
||||||
|
m_tally_sent = 0;
|
||||||
|
m_iterations = 0;
|
||||||
|
|
||||||
|
m_start_time_postings = 0;
|
||||||
|
m_start_time_iterations = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Procedure: OnNewMail
|
||||||
|
|
||||||
|
bool Relayer::OnNewMail(MOOSMSG_LIST &NewMail)
|
||||||
|
{
|
||||||
|
MOOSMSG_LIST::iterator p;
|
||||||
|
for(p = NewMail.begin(); p!=NewMail.end(); p++) {
|
||||||
|
CMOOSMsg &msg = *p;
|
||||||
|
|
||||||
|
string key = msg.GetKey();
|
||||||
|
|
||||||
|
if(key == m_incoming_var)
|
||||||
|
m_tally_recd++;
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Procedure: OnConnectToServer
|
||||||
|
|
||||||
|
bool Relayer::OnConnectToServer()
|
||||||
|
{
|
||||||
|
RegisterVariables();
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//------------------------------------------------------------
|
||||||
|
// Procedure: RegisterVariables
|
||||||
|
|
||||||
|
void Relayer::RegisterVariables()
|
||||||
|
{
|
||||||
|
if(m_incoming_var != "")
|
||||||
|
Register(m_incoming_var, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Procedure: Iterate()
|
||||||
|
|
||||||
|
bool Relayer::Iterate()
|
||||||
|
{
|
||||||
|
m_iterations++;
|
||||||
|
|
||||||
|
unsigned int i, amt = (m_tally_recd - m_tally_sent);
|
||||||
|
for(i=0; i<amt; i++) {
|
||||||
|
m_tally_sent++;
|
||||||
|
Notify(m_outgoing_var, m_tally_sent);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If this is the first iteration just note the start time, otherwise
|
||||||
|
// note the currently calculated frequency and post it to the DB.
|
||||||
|
if(m_start_time_iterations == 0)
|
||||||
|
m_start_time_iterations = MOOSTime();
|
||||||
|
else {
|
||||||
|
double delta_time = (MOOSTime() - m_start_time_iterations) + 0.01;
|
||||||
|
double frequency = (double)(m_iterations) / delta_time;
|
||||||
|
Notify(m_outgoing_var+"_ITER_HZ", frequency);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// If this is the first time a received msg has been noted, just
|
||||||
|
// note the start time, otherwise calculate and post the frequency.
|
||||||
|
if(amt > 0) {
|
||||||
|
if(m_start_time_postings == 0)
|
||||||
|
m_start_time_postings = MOOSTime();
|
||||||
|
else {
|
||||||
|
double delta_time = (MOOSTime() - m_start_time_postings) + 0.01;
|
||||||
|
double frequency = (double)(m_tally_sent) / delta_time;
|
||||||
|
Notify(m_outgoing_var+"_POST_HZ", frequency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Procedure: OnStartUp()
|
||||||
|
// Note: happens before connection is open
|
||||||
|
|
||||||
|
bool Relayer::OnStartUp()
|
||||||
|
{
|
||||||
|
STRING_LIST sParams;
|
||||||
|
m_MissionReader.GetConfiguration(GetAppName(), sParams);
|
||||||
|
|
||||||
|
STRING_LIST::iterator p;
|
||||||
|
for(p = sParams.begin();p!=sParams.end();p++) {
|
||||||
|
string line = *p;
|
||||||
|
string param = tolower(biteStringX(line, '='));
|
||||||
|
string value = line;
|
||||||
|
|
||||||
|
if(param == "incoming_var")
|
||||||
|
m_incoming_var = value;
|
||||||
|
|
||||||
|
else if(param == "outgoing_var")
|
||||||
|
m_outgoing_var = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
RegisterVariables();
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
|
||||||
55
src/pXRelayTest/Relayer.h
Normal file
55
src/pXRelayTest/Relayer.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: Relayer.h */
|
||||||
|
/* DATE: Jun 26th 2008 */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/****************************************************************/
|
||||||
|
|
||||||
|
#ifndef P_RELAY_VAR_HEADER
|
||||||
|
#define P_RELAY_VAR_HEADER
|
||||||
|
|
||||||
|
#include "MOOS/libMOOS/MOOSLib.h"
|
||||||
|
|
||||||
|
class Relayer : public CMOOSApp
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Relayer();
|
||||||
|
virtual ~Relayer() {};
|
||||||
|
|
||||||
|
bool OnNewMail(MOOSMSG_LIST &NewMail);
|
||||||
|
bool Iterate();
|
||||||
|
bool OnConnectToServer();
|
||||||
|
bool OnStartUp();
|
||||||
|
void RegisterVariables();
|
||||||
|
|
||||||
|
void setIncomingVar(std::string s) {m_incoming_var=s;};
|
||||||
|
void setOutgoingVar(std::string s) {m_outgoing_var=s;};
|
||||||
|
|
||||||
|
protected:
|
||||||
|
unsigned long int m_tally_recd;
|
||||||
|
unsigned long int m_tally_sent;
|
||||||
|
unsigned long int m_iterations;
|
||||||
|
|
||||||
|
std::string m_incoming_var;
|
||||||
|
std::string m_outgoing_var;
|
||||||
|
|
||||||
|
double m_start_time_postings;
|
||||||
|
double m_start_time_iterations;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
125
src/pXRelayTest/Relayer_Info.cpp
Normal file
125
src/pXRelayTest/Relayer_Info.cpp
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: Relayer_Info.cpp */
|
||||||
|
/* DATE: Jan 12th, 2012 */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <iostream>
|
||||||
|
#include "Relayer_Info.h"
|
||||||
|
#include "ColorParse.h"
|
||||||
|
#include "ReleaseInfo.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: showSynopsis
|
||||||
|
|
||||||
|
void showSynopsis()
|
||||||
|
{
|
||||||
|
blk("SYNOPSIS: ");
|
||||||
|
blk("------------------------------------ ");
|
||||||
|
blk(" The purpose of the pXRelay application is to provide a simple ");
|
||||||
|
blk(" example of the MOOS publish-subscribe architecture. It is ");
|
||||||
|
blk(" typically run in conjunction with another instance of the same");
|
||||||
|
blk(" process to send mail back and forth to each other. ");
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: showHelpAndExit
|
||||||
|
|
||||||
|
void showHelpAndExit()
|
||||||
|
{
|
||||||
|
blk(" ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blu("Usage: pXRelayTest file.moos [OPTIONS] ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blk(" ");
|
||||||
|
showSynopsis();
|
||||||
|
blk(" ");
|
||||||
|
blk("Options: ");
|
||||||
|
mag(" --alias","=<ProcessName> ");
|
||||||
|
blk(" Launch pXRelayTest with the given process name rather ");
|
||||||
|
blk(" than pXRelayTest. ");
|
||||||
|
mag(" --example, -e ");
|
||||||
|
blk(" Display example MOOS configuration block. ");
|
||||||
|
mag(" --help, -h ");
|
||||||
|
blk(" Display this help message. ");
|
||||||
|
mag(" --in","=<varname> ");
|
||||||
|
blk(" Use <varname> as the Relay incoming variable ");
|
||||||
|
mag(" --interface, -i ");
|
||||||
|
blk(" Display MOOS publications and subscriptions. ");
|
||||||
|
mag(" --out","=<varname> ");
|
||||||
|
blk(" Use <varname> as the Relay outgoing variable ");
|
||||||
|
blk(" ");
|
||||||
|
blk("Note: If argv[2] does not otherwise match a known option, ");
|
||||||
|
blk(" then it will be interpreted as a run alias. This is ");
|
||||||
|
blk(" to support pAntler launching conventions. ");
|
||||||
|
blk(" ");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: showExampleConfigAndExit
|
||||||
|
|
||||||
|
void showExampleConfigAndExit()
|
||||||
|
{
|
||||||
|
blk(" ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blu("pXRelay Example MOOS Configuration ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blk(" ");
|
||||||
|
blk("ProcessConfig = pXRelay ");
|
||||||
|
blk("{ ");
|
||||||
|
blk(" AppTick = 4 ");
|
||||||
|
blk(" CommsTick = 4 ");
|
||||||
|
blk(" ");
|
||||||
|
blk(" OUTGOING_VAR = APPLES ");
|
||||||
|
blk(" INCOMING_VAR = PEARS ");
|
||||||
|
blk("} ");
|
||||||
|
blk(" ");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//----------------------------------------------------------------
|
||||||
|
// Procedure: showInterfaceAndExit
|
||||||
|
|
||||||
|
void showInterfaceAndExit()
|
||||||
|
{
|
||||||
|
blk(" ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blu("pXRelay INTERFACE ");
|
||||||
|
blu("=============================================================== ");
|
||||||
|
blk(" ");
|
||||||
|
showSynopsis();
|
||||||
|
blk(" ");
|
||||||
|
blk("SUBSCRIPTIONS: ");
|
||||||
|
blk("------------------------------------ ");
|
||||||
|
blk(" Whatever variable is specified by the INCOMING_VAR ");
|
||||||
|
blk(" configuration parameter. ");
|
||||||
|
blk(" ");
|
||||||
|
blk("PUBLICATIONS: ");
|
||||||
|
blk("------------------------------------ ");
|
||||||
|
blk(" Whatever variable is specified by the OUTGOING_VAR ");
|
||||||
|
blk(" configuration parameter. ");
|
||||||
|
blk(" ");
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
31
src/pXRelayTest/Relayer_Info.h
Normal file
31
src/pXRelayTest/Relayer_Info.h
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin, Henrik Schmidt, and John Leonard */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: Relayer_Info.h */
|
||||||
|
/* DATE: Jan 12th 2012 */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#ifndef P_XRELAYER_TEST_INFO_HEADER
|
||||||
|
#define P_XRELAYER_TEST_INFO_HEADER
|
||||||
|
|
||||||
|
void showSynopsis();
|
||||||
|
void showHelpAndExit();
|
||||||
|
void showExampleConfigAndExit();
|
||||||
|
void showInterfaceAndExit();
|
||||||
|
|
||||||
|
#endif
|
||||||
71
src/pXRelayTest/main.cpp
Normal file
71
src/pXRelayTest/main.cpp
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/*****************************************************************/
|
||||||
|
/* NAME: Michael Benjamin */
|
||||||
|
/* ORGN: Dept of Mechanical Eng / CSAIL, MIT Cambridge MA */
|
||||||
|
/* FILE: main.cpp */
|
||||||
|
/* DATE: Jun 26th 2008 */
|
||||||
|
/* */
|
||||||
|
/* This program is free software; you can redistribute it and/or */
|
||||||
|
/* modify it under the terms of the GNU General Public License */
|
||||||
|
/* as published by the Free Software Foundation; either version */
|
||||||
|
/* 2 of the License, or (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be */
|
||||||
|
/* useful, but WITHOUT ANY WARRANTY; without even the implied */
|
||||||
|
/* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR */
|
||||||
|
/* PURPOSE. See the GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public */
|
||||||
|
/* License along with this program; if not, write to the Free */
|
||||||
|
/* Software Foundation, Inc., 59 Temple Place - Suite 330, */
|
||||||
|
/* Boston, MA 02111-1307, USA. */
|
||||||
|
/*****************************************************************/
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <list>
|
||||||
|
#include "Relayer.h"
|
||||||
|
#include "Relayer_Info.h"
|
||||||
|
#include "MBUtils.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
string mission_file;
|
||||||
|
string run_command = argv[0];
|
||||||
|
string incoming_var;
|
||||||
|
string outgoing_var;
|
||||||
|
|
||||||
|
for(int i=1; i<argc; i++) {
|
||||||
|
string argi = argv[i];
|
||||||
|
if((argi=="-e") || (argi=="--example") || (argi=="-example"))
|
||||||
|
showExampleConfigAndExit();
|
||||||
|
else if((argi == "-h") || (argi == "--help") || (argi=="-help"))
|
||||||
|
showHelpAndExit();
|
||||||
|
else if((argi == "-i") || (argi == "--interface"))
|
||||||
|
showInterfaceAndExit();
|
||||||
|
else if(strEnds(argi, ".moos") || strEnds(argi, ".moos++"))
|
||||||
|
mission_file = argv[i];
|
||||||
|
else if(strBegins(argi, "--alias="))
|
||||||
|
run_command = argi.substr(8);
|
||||||
|
else if(strBegins(argi, "--in="))
|
||||||
|
incoming_var = argi.substr(5);
|
||||||
|
else if(strBegins(argi, "--out="))
|
||||||
|
outgoing_var = argi.substr(6);
|
||||||
|
else if(i==2)
|
||||||
|
run_command = argi;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mission_file == "")
|
||||||
|
showHelpAndExit();
|
||||||
|
|
||||||
|
Relayer relayer;
|
||||||
|
if(incoming_var != "")
|
||||||
|
relayer.setIncomingVar(incoming_var);
|
||||||
|
if(outgoing_var != "")
|
||||||
|
relayer.setOutgoingVar(outgoing_var);
|
||||||
|
|
||||||
|
relayer.Run(run_command.c_str(), mission_file.c_str());
|
||||||
|
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
14
src/pXRelayTest/pXRelayTest.moos
Normal file
14
src/pXRelayTest/pXRelayTest.moos
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
// MOOS file
|
||||||
|
|
||||||
|
ServerHost = localhost
|
||||||
|
ServerPort = 9000
|
||||||
|
|
||||||
|
ProcessConfig = pXRelayTest
|
||||||
|
{
|
||||||
|
AppTick = 4
|
||||||
|
CommsTick = 4
|
||||||
|
|
||||||
|
OUTGOING_VAR = APPLES
|
||||||
|
INCOMING_VAR = PEARS
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user