Skip to content

Commit f7d7a05

Browse files
committed
WIP: More validation
1 parent 1ba5ce0 commit f7d7a05

File tree

1 file changed

+103
-23
lines changed

1 file changed

+103
-23
lines changed

scripts/start_ursim.sh

Lines changed: 103 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ IP_ADDRESS="192.168.56.101"
3434
PORT_FORWARDING_WITH_DASHBOARD="-p 30001-30004:30001-30004 -p 29999:29999"
3535
PORT_FORWARDING_WITHOUT_DASHBOARD="-p 30001-30004:30001-30004"
3636
CONTAINER_NAME="ursim"
37+
TEST_RUN=false
3738

3839
# TODO: Add support for more URSim PolyScopeX versions once released
3940
# The PolyScopeX URSim containers follow the SDK versioning scheme. This maps those to marketing
@@ -65,26 +66,32 @@ help()
6566
echo
6667
}
6768

68-
ROBOT_MODEL=ur5e
69-
ROBOT_SERIES=e-series
69+
#ROBOT_MODEL=ur5e
70+
#ROBOT_SERIES=e-series
7071
URSIM_VERSION=latest
7172
DETACHED=false
7273

74+
verlte()
75+
{
76+
[ "$1" = $(printf "$1\n$2" | sort -V | head -n1) ]
77+
}
7378

74-
validate_model()
79+
# Infer the robot series from a model name, e.g. ur3 -> cb3, ur5e -> e-series
80+
# For Robots potentially bein e-series or polyscopex, this defaults to e-series
81+
# $1 robot model e.g. ur5e
82+
# sets ROBOT_SERIES
83+
get_series_from_model()
7584
{
76-
case $ROBOT_MODEL in
85+
echo "Infering robot series from model"
86+
local robot_model=$1
87+
case $robot_model in
7788
ur3|ur5|ur10)
78-
ROBOT_MODEL=${ROBOT_MODEL^^}
7989
ROBOT_SERIES=cb3
8090
;;
8191
ur3e|ur5e|ur10e|ur16e)
82-
ROBOT_MODEL=${ROBOT_MODEL^^}
83-
ROBOT_MODEL=$(echo ${ROBOT_MODEL:0:$((${#ROBOT_MODEL}-1))})
8492
ROBOT_SERIES=e-series
8593
;;
8694
ur20|ur30)
87-
ROBOT_MODEL=${ROBOT_MODEL^^}
8895
ROBOT_SERIES=e-series
8996
;;
9097
*)
@@ -94,12 +101,46 @@ validate_model()
94101
esac
95102
}
96103

97-
verlte()
104+
# Infer the robot series based on the URSim version
105+
# uses $URSIM_VERSION
106+
# sets ROBOT_SERIES
107+
get_series_from_version()
98108
{
99-
[ "$1" = $(printf "$1\n$2" | sort -V | head -n1) ]
109+
echo "Infering robot series from version"
110+
if [[ "$URSIM_VERSION" == "latest" ]]; then
111+
ROBOT_SERIES=e-series
112+
else
113+
verlte "10.0.0" "$URSIM_VERSION" && ROBOT_SERIES=polyscopex && return
114+
verlte "5.0.0" "$URSIM_VERSION" && ROBOT_SERIES=e-series && return
115+
fi
116+
# If nothing above matched
117+
ROBOT_SERIES=cb3
100118
}
101119

102-
validate_ursim_version()
120+
# Bring the model into a format that is used internally by URSim
121+
# $1 robot model e.g. ur5e
122+
# $2 robot series e.g. e-series
123+
# sets ROBOT_MODEL
124+
strip_robot_model()
125+
{
126+
local robot_model=$1
127+
local robot_series=$2
128+
if [[ "$robot_series" == "cb3" ]]; then
129+
ROBOT_MODEL=${ROBOT_MODEL^^}
130+
else
131+
ROBOT_MODEL=${ROBOT_MODEL^^}
132+
# UR20 and UR30 need no further adjustment
133+
if [[ "$robot_model" = @(ur3e|ur5e|ur10e|ur16e) ]]; then
134+
ROBOT_MODEL=$(echo "${ROBOT_MODEL:0:$((${#ROBOT_MODEL}-1))}")
135+
fi
136+
fi
137+
}
138+
139+
# Make sure that all parameters match together. This checks
140+
# - URSIM_VERSION
141+
# - ROBOT_MODEL
142+
# - ROBOT_SERIES
143+
validate_parameters()
103144
{
104145
local IMAGE_URSIM_VERSION
105146
# Inspect the image's URSim version if the image is locally available. This is especially
@@ -117,27 +158,35 @@ validate_ursim_version()
117158

118159
local MIN_VERSION="0.0"
119160

120-
121161
case $ROBOT_SERIES in
122162
cb3)
123163
verlte "4.0.0" "$IMAGE_URSIM_VERSION" && echo "$IMAGE_URSIM_VERSION is no valid CB3 version!" && exit
124164
verlte "$MIN_CB3" "$IMAGE_URSIM_VERSION" && return 0
125165
MIN_VERSION=$MIN_CB3
126166
;;
127167
e-series)
128-
if [[ $ROBOT_MODEL == "UR20" ]]; then
129-
verlte "$MIN_UR20" "$IMAGE_URSIM_VERSION" && return 0
168+
if [[ $ROBOT_MODEL != @(ur3e|ur5e|ur10e|ur16e|ur20|ur30) ]]; then
169+
echo "$ROBOT_MODEL is no valid e-series model!" && exit
170+
fi
171+
if [[ $ROBOT_MODEL == "ur20" ]]; then
130172
MIN_VERSION=$MIN_UR20
131-
elif [[ $ROBOT_MODEL == "UR30" ]]; then
132-
verlte "$MIN_UR30" "$IMAGE_URSIM_VERSION" && return 0
173+
elif [[ $ROBOT_MODEL == "ur30" ]]; then
133174
MIN_VERSION=$MIN_UR30
134175
else
135-
verlte "$MIN_E_SERIES" "$URSIM_VERSION" && return 0
136176
MIN_VERSION=$MIN_E_SERIES
137177
fi
138178
;;
179+
polyscopex)
180+
if [[ $ROBOT_MODEL != @(ur3e|ur5e|ur10e|ur16e|ur20|ur30) ]]; then
181+
echo "$ROBOT_MODEL is no valid PolyscopeX model!" && exit
182+
else
183+
return 0
184+
fi
185+
;;
139186
esac
140187

188+
verlte "$MIN_VERSION" "$URSIM_VERSION" && return 0
189+
141190
echo "Illegal version given. For $ROBOT_SERIES $ROBOT_MODEL the software version must be greater or equal to $MIN_VERSION. Given version: $IMAGE_URSIM_VERSION."
142191
exit
143192
}
@@ -179,7 +228,7 @@ post_setup_polyscopex()
179228
printf "\n\n\thttp://%s\n\n" "$IP_ADDRESS"
180229
}
181230

182-
while getopts ":hm:v:p:u:i:f:n:d" option; do
231+
while getopts ":hm:v:p:u:i:f:n:dt" option; do
183232
case $option in
184233
h) # display Help
185234
help
@@ -208,18 +257,49 @@ while getopts ":hm:v:p:u:i:f:n:d" option; do
208257
d) # detached mode
209258
DETACHED=true
210259
;;
260+
t) # test run
261+
TEST_RUN=true
262+
;;
211263
\?) # invalid option
212264
echo "Error: Invalid option"
213265
help
214266
exit;;
215267
esac
216268
done
217-
validate_model
218-
validate_ursim_version
219269

220-
if [ "$URSIM_VERSION" != "latest" ]; then
221-
verlte "10.0.0" "$URSIM_VERSION" && ROBOT_SERIES=polyscopex
270+
# If no robot model is given, set a ur5 based on the series
271+
if [ -z "$ROBOT_MODEL" ]; then
272+
echo "No robot model given. Inferring from series"
273+
if [ -z "$ROBOT_SERIES" ]; then
274+
ROBOT_MODEL=ur5e
275+
ROBOT_SERIES=e-series
276+
elif [[ "$ROBOT_SERIES" == "cb3" ]]; then
277+
ROBOT_MODEL=ur5
278+
else
279+
ROBOT_MODEL=ur5e
280+
fi
281+
elif [ "$URSIM_VERSION" == "latest" ]; then
282+
get_series_from_model "$ROBOT_MODEL"
283+
else
284+
get_series_from_version
222285
fi
286+
287+
288+
echo "Parsed parameters:"
289+
echo "ROBOT_MODEL: $ROBOT_MODEL"
290+
echo "ROBOT_SERIES: $ROBOT_SERIES"
291+
echo "URSIM_VERSION: $URSIM_VERSION"
292+
293+
validate_parameters
294+
295+
if [ "$TEST_RUN" = true ]; then
296+
echo "Running in test mode"
297+
export ROBOT_MODEL=$ROBOT_MODEL
298+
export ROBOT_SERIES=$ROBOT_SERIES
299+
export URSIM_VERSION=$URSIM_VERSION
300+
exit
301+
fi
302+
223303
URCAP_STORAGE="${PERSISTENT_BASE}/${ROBOT_SERIES}/urcaps"
224304
PROGRAM_STORAGE="${PERSISTENT_BASE}/${ROBOT_SERIES}/${ROBOT_MODEL}/programs"
225305

@@ -288,7 +368,7 @@ else
288368
universalrobots/ursim_${ROBOT_SERIES}:$URSIM_VERSION"
289369
fi
290370

291-
#echo "$docker_cmd"
371+
echo "$docker_cmd"
292372
$docker_cmd
293373

294374
# Stop container when interrupted

0 commit comments

Comments
 (0)