@@ -34,6 +34,7 @@ IP_ADDRESS="192.168.56.101"
3434PORT_FORWARDING_WITH_DASHBOARD=" -p 30001-30004:30001-30004 -p 29999:29999"
3535PORT_FORWARDING_WITHOUT_DASHBOARD=" -p 30001-30004:30001-30004"
3636CONTAINER_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
7071URSIM_VERSION=latest
7172DETACHED=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
216268done
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
222285fi
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+
223303URCAP_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /urcaps"
224304PROGRAM_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /${ROBOT_MODEL} /programs"
225305
288368 universalrobots/ursim_${ROBOT_SERIES} :$URSIM_VERSION "
289369fi
290370
291- # echo "$docker_cmd"
371+ echo " $docker_cmd "
292372$docker_cmd
293373
294374# Stop container when interrupted
0 commit comments