@@ -34,6 +34,13 @@ IP_ADDRESS="192.168.56.101"
3434PORT_FORWARDING=" -p 30001-30004:30001-30004 -p 29999:29999"
3535CONTAINER_NAME=" ursim"
3636
37+ # TODO: Add support for more URSim PolyScopeX versions once released
38+ # The PolyScopeX URSim containers follow the SDK versioning scheme. This maps those to marketing
39+ # versions
40+ # declare -A POLYSCOPE_X_MAP=( ["10.7.0"]="0.12.159"
41+ # ["10.8.0"]="not.there.yet")
42+ declare -A POLYSCOPE_X_MAP=( [" 10.7.0" ]=" 0.12.159" )
43+
3744help ()
3845{
3946 # Display Help
@@ -84,8 +91,6 @@ validate_model()
8491 exit
8592 ;;
8693 esac
87- URCAP_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /urcaps"
88- PROGRAM_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /${ROBOT_MODEL} /programs"
8994}
9095
9196verlte ()
@@ -136,6 +141,43 @@ validate_ursim_version()
136141 exit
137142}
138143
144+ post_setup_cb3 ()
145+ {
146+ echo " Docker URSim is running"
147+ echo -e " \nTo access PolyScope, open the following URL in a web browser."
148+ printf " \n\n\thttp://%s:6080/vnc.html\n\n" " $IP_ADDRESS "
149+ }
150+ post_setup_e-series ()
151+ {
152+ post_setup_cb3
153+ }
154+
155+ post_setup_polyscopex ()
156+ {
157+
158+ echo -ne " Starting URSim. Waiting for UrService to be up..."
159+ curl_cmd=" curl --retry-connrefused -f --write-out %{http_code} --silent --output /dev/null $IP_ADDRESS /universal-robots/urservice/api/v1/urcaps"
160+ status_code=$( eval " $curl_cmd " )
161+
162+ until [ " $status_code " == " 200" ]
163+ do
164+ sleep 1
165+ # echo "still waiting for UrService..."
166+ echo -ne " ."
167+ status_code=$( eval " $curl_cmd " )
168+ done
169+
170+ echo " " ; echo " UrService is up"
171+
172+ # TODO: Once we have a downloadable URCapX, we can use the following code to install it
173+ # urcapx_file="${HOME}/Downloads/external-control-0.1.0.urcapx"
174+ # echo "Installing URCapX $urcapx_file"
175+ # curl --location --request POST --silent --output /dev/null "$IP_ADDRESS/universal-robots/urservice/api/v1/urcaps" --form urcapxFile=@"${urcapx_file}"
176+ # echo "";
177+
178+ echo -e " \nTo access PolyScopeX, open the following URL in a web browser."
179+ printf " \n\n\thttp://%s\n\n" " $IP_ADDRESS "
180+ }
139181
140182while getopts " :hm:v:p:u:i:f:n:d" option; do
141183 case $option in
@@ -175,44 +217,70 @@ done
175217validate_model
176218validate_ursim_version
177219
220+ if [ " $URSIM_VERSION " != " latest" ]; then
221+ verlte " 10.0.0" " $URSIM_VERSION " && ROBOT_SERIES=polyscopex
222+ fi
223+ URCAP_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /urcaps"
224+ PROGRAM_STORAGE=" ${PERSISTENT_BASE} /${ROBOT_SERIES} /${ROBOT_MODEL} /programs"
225+
226+ DOCKER_ARGS=" "
227+
228+ if [ " $ROBOT_SERIES " == " polyscopex" ]; then
229+ if [ -z " ${POLYSCOPE_X_MAP[$URSIM_VERSION]} " ]; then
230+ echo " URSim version $URSIM_VERSION is not supported"
231+ exit
232+ fi
233+ URSIM_VERSION=${POLYSCOPE_X_MAP[$URSIM_VERSION]}
234+ DOCKER_ARGS=" $DOCKER_ARGS --privileged"
235+ fi
236+
178237if [ -n " $PROGRAM_STORAGE_ARG " ]; then
179238 PROGRAM_STORAGE=" $PROGRAM_STORAGE_ARG "
180239fi
181240if [ -n " $URCAP_STORAGE_ARG " ]; then
182241 URCAP_STORAGE=" $URCAP_STORAGE_ARG "
183242fi
184243
185- # Create local storage for programs and URCaps
186- mkdir -p " ${URCAP_STORAGE} "
187- mkdir -p " ${PROGRAM_STORAGE} "
188- URCAP_STORAGE=$( realpath " $URCAP_STORAGE " )
189- PROGRAM_STORAGE=$( realpath " $PROGRAM_STORAGE " )
190-
191- # Download external_control URCap
192- if [[ ! -f " ${URCAP_STORAGE} /externalcontrol-${URCAP_VERSION} .jar" ]]; then
193- curl -L -o " ${URCAP_STORAGE} /externalcontrol-${URCAP_VERSION} .jar" \
194- " https://github.com/UniversalRobots/Universal_Robots_ExternalControl_URCap/releases/download/v${URCAP_VERSION} /externalcontrol-${URCAP_VERSION} .jar"
195- fi
196-
197-
198244# Check whether network already exists
199- docker network inspect ursim_net > /dev/null
200- if [ $? -eq 0 ]; then
201- echo " ursim_net already exists"
202- else
245+ if ! docker network inspect ursim_net & > /dev/null; then
246+ # if [ $? -ne 0 ]; then
203247 echo " Creating ursim_net"
204248 docker network create --subnet=192.168.56.0/24 ursim_net
205249fi
250+ if [ " $ROBOT_SERIES " == " polyscopex" ]; then
251+ mkdir -p " ${PROGRAM_STORAGE} "
252+ PROGRAM_STORAGE=$( realpath " $PROGRAM_STORAGE " )
253+
254+ docker_cmd=" docker run --rm -d \
255+ --net ursim_net --ip $IP_ADDRESS \
256+ -v ${PROGRAM_STORAGE} :/ur/bin/backend/applications \
257+ -e ROBOT_TYPE=${ROBOT_MODEL} \
258+ $PORT_FORWARDING \
259+ $DOCKER_ARGS \
260+ --name $CONTAINER_NAME \
261+ universalrobots/ursim_${ROBOT_SERIES} :$URSIM_VERSION "
262+ else
263+ # Create local storage for programs and URCaps
264+ mkdir -p " ${URCAP_STORAGE} "
265+ mkdir -p " ${PROGRAM_STORAGE} "
266+ URCAP_STORAGE=$( realpath " $URCAP_STORAGE " )
267+ PROGRAM_STORAGE=$( realpath " $PROGRAM_STORAGE " )
206268
207- docker_cmd=" docker run --rm -d --net ursim_net --ip $IP_ADDRESS \
208- -v ${URCAP_STORAGE} :/urcaps \
209- -v ${PROGRAM_STORAGE} :/ursim/programs \
210- -e ROBOT_MODEL=${ROBOT_MODEL} \
211- $PORT_FORWARDING \
212- --name $CONTAINER_NAME \
213- universalrobots/ursim_${ROBOT_SERIES} :$URSIM_VERSION || exit"
269+ # Download external_control URCap
270+ if [[ ! -f " ${URCAP_STORAGE} /externalcontrol-${URCAP_VERSION} .jar" ]]; then
271+ curl -L -o " ${URCAP_STORAGE} /externalcontrol-${URCAP_VERSION} .jar" \
272+ " https://github.com/UniversalRobots/Universal_Robots_ExternalControl_URCap/releases/download/v${URCAP_VERSION} /externalcontrol-${URCAP_VERSION} .jar"
273+ fi
274+ docker_cmd=" docker run --rm -d --net ursim_net --ip $IP_ADDRESS \
275+ -v ${URCAP_STORAGE} :/urcaps \
276+ -v ${PROGRAM_STORAGE} :/ursim/programs \
277+ -e ROBOT_MODEL=${ROBOT_MODEL} \
278+ $PORT_FORWARDING \
279+ --name $CONTAINER_NAME \
280+ universalrobots/ursim_${ROBOT_SERIES} :$URSIM_VERSION "
281+ fi
214282
215- # echo $docker_cmd
283+ # echo " $docker_cmd"
216284$docker_cmd
217285
218286# Stop container when interrupted
225293"
226294trap " $TRAP_CMD " SIGINT SIGTERM
227295
228- echo " Docker URSim is running "
229- printf " \nTo access Polyscope, open the following URL in a web browser.\n\thttp:// $IP_ADDRESS :6080/vnc.html\n\n "
296+
297+ eval " post_setup_ ${ROBOT_SERIES} "
230298
231299if [ " $DETACHED " = false ]; then
232300echo " To exit, press CTRL+C"
0 commit comments