Skip to content

Commit 911dd62

Browse files
committed
Make start_ursim.sh support polyscopex
1 parent ce6aec2 commit 911dd62

File tree

1 file changed

+97
-29
lines changed

1 file changed

+97
-29
lines changed

scripts/start_ursim.sh

Lines changed: 97 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ IP_ADDRESS="192.168.56.101"
3434
PORT_FORWARDING="-p 30001-30004:30001-30004 -p 29999:29999"
3535
CONTAINER_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+
3744
help()
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

9196
verlte()
@@ -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

140182
while getopts ":hm:v:p:u:i:f:n:d" option; do
141183
case $option in
@@ -175,44 +217,70 @@ done
175217
validate_model
176218
validate_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+
178237
if [ -n "$PROGRAM_STORAGE_ARG" ]; then
179238
PROGRAM_STORAGE="$PROGRAM_STORAGE_ARG"
180239
fi
181240
if [ -n "$URCAP_STORAGE_ARG" ]; then
182241
URCAP_STORAGE="$URCAP_STORAGE_ARG"
183242
fi
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
205249
fi
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
@@ -225,8 +293,8 @@ exit
225293
"
226294
trap "$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

231299
if [ "$DETACHED" = false ]; then
232300
echo "To exit, press CTRL+C"

0 commit comments

Comments
 (0)