forked from rachelholladay/franka_ros_interface
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfranka.sh
executable file
·201 lines (156 loc) · 6.79 KB
/
franka.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
#!/bin/bash
# Copyright (c) 2019-2020, Saif Sidhik
# Copyright (c) 2013-2016, Rethink Robotics
# All rights reserved.
# This file is to be used in the *root* of your Catkin workspace.
# This is a convenient script which will set up your ROS environment and
# should be executed with every new instance of a shell in which you plan on
# working with Intera.
# Run as './franka.sh <arg1> <arg2>'
# ------ ARGUMENTS:
# -- arg1:
# - 'master' / 'local' (No <arg2>): The local machine will be the ros master. Run this on the main master pc (connected to the franka controller).
# - 'slave' / 'remote': If IP address is provided as <arg2>, this will make sure that this PC is connected to the ROS Master at that IP. If <arg2> provided, ROS_MASTER_IP set below will be used
# - 'sim': start in simulation environment (to be used with panda_simulator package only)
# -- arg2:
# - <IP of ROS MASTER> (valid only if <arg1> is 'slave'/'remote'): IP address of ROS Master
## ========================================= #
## ===== EDIT THESE VALUES AS REQUIRED ===== #
## ========================================= #
# ----- EDIT THIS TO MATCH THE IP OF THE FRANKA ROBOT CONTROLLER IN THE NETWORK
FRANKA_ROBOT_IP="FRANKA_ROBOT_IP.local"
# ----- EDIT THIS TO MATCH YOUR IP IN THE NETWORK
your_ip=""
# ----- EDIT THIS TO MATCH THE IP OF THE MAIN ROS MASTER PC (CONNECTED TO THE FRANKA CONTROLLER)
ROS_MASTER_IP=""
ros_version="kinetic"
## ========================================= #
## ========================================= #
## ========================================= #
if [ "${1}" == "sim" ]; then
your_ip="127.0.0.1"
fi
if [ "${your_ip}" == "" ]; then
echo -e "\n\t\033[01;31m\033[1mError:\033[00m [franka.sh] \033[01;33m\033[4myour_ip\033[00m variable has to be set in 'franka.sh'\n"
exit 1
fi
if [ "${1}" == "master" ] || [[ "${1}" == "local" ]]; then
if [ "${FRANKA_ROBOT_IP}" == "FRANKA_ROBOT_IP.local" ]; then
echo -e "\n\t\033[01;31m\033[1mError:\033[00m [franka.sh] \033[01;33m\033[4mFRANKA_ROBOT_IP\033[00m variable has to be set to match the IP address of the Franka Robot Controller\n"
exit 1
fi
ROS_MASTER_IP="$your_ip"
IS_MASTER=true
elif [ "${1}" == "slave" ] || [[ "${1}" == "remote" ]]; then
if [[ $# -ge 2 ]]; then
ROS_MASTER_IP="$2"
fi
IS_MASTER=false
elif [ "${1}" == "sim" ]; then
ROS_MASTER_IP="$your_ip"
IS_MASTER="true"
FRANKA_ROBOT_IP="sim"
else
echo -e "\n\t\033[01;31m\033[1mError:\033[00m [franka.sh] Atleast one argument has to be passed
Usage: ./franka_sdk <arg1> <arg2>
------ ARGUMENTS:
-- arg1:
- 'master' / 'local' (No <arg2>): The local machine will be the ros master. Run this on the main master pc (connected to the franka controller).
- 'slave' / 'remote': If IP address is provided as <arg2>, this will make sure that this PC is connected to the ROS Master at that IP. If <arg2> provided, ROS_MASTER_IP set below will be used
- 'sim': Franka robot simulation environment will be used. Real robot will not be controlled.
-- arg2:
- <IP of ROS MASTER> (valid only if <arg1> is 'slave'/'remote'): IP address of ROS Master
"
exit 1
fi
tf=$(mktemp)
trap "rm -f -- '${tf}'" EXIT
topdir=$(basename $(readlink -f $(dirname ${BASH_SOURCE[0]})))
cat <<-EOF > ${tf}
[ -s "\${HOME}"/.bashrc ] && source "\${HOME}"/.bashrc
[ -s "\${HOME}"/.bash_profile ] && source "\${HOME}"/.bash_profile
# verify this script is moved out of franka_sdk folder
if [[ -e "${topdir}/franka_rospy_sdk/package.xml" ]]; then
echo -ne "EXITING - This script must be moved from the franka_rospy_sdk folder \
to the root of your catkin workspace.\n"
exit 1
fi
# check for ros installation
if [ ! -d "/opt/ros" ] || [ ! "$(ls -A /opt/ros)" ]; then
echo "EXITING - No ROS installation found in /opt/ros."
echo "Is ROS installed?"
exit 1
fi
# verify specified ros version is installed
ros_setup="/opt/ros/${ros_version}"
if [ ! -d "\${ros_setup}" ]; then
echo -ne "EXITING - Failed to find ROS \${ros_version} installation \
in \${ros_setup}.\n"
exit 1
fi
# verify the ros setup.sh file exists
if [ ! -s "\${ros_setup}"/setup.sh ]; then
echo -ne "EXITING - Failed to find the ROS environment script: \
"\${ros_setup}"/setup.sh.\n"
exit 1
fi
# verify the user is running this script in the root of the catkin
# workspace and that the workspace has been compiled.
if [ ! -s "devel/setup.bash" ]; then
echo -ne "EXITING - \n1) Please verify that this script is being run \
in the root of your catkin workspace.\n2) Please verify that your workspace \
has been built (source /opt/ros/\${ros_version}/setup.sh; catkin_make).\n\
3) Run this script again upon completion of your workspace build.\n"
exit 1
fi
export FRANKA_ROBOT_IP=$FRANKA_ROBOT_IP
[ -n "${your_ip}" ] && export ROS_IP="${your_ip}"
[ -n "${ROS_MASTER_IP}" ] && \
export ROS_MASTER_URI="http://${ROS_MASTER_IP}:11311"
# source the catkin setup bash script
source devel/setup.bash
if [[ $IS_MASTER == true ]]; then
echo -e "\nROBOT: $FRANKA_ROBOT_IP\n"
else
echo -e "\nROS MASTER: $ROS_MASTER_IP\n"
fi
# setup the bash prompt
export __ROS_PROMPT=\${__ROS_PROMPT:-0}
[ \${__ROS_PROMPT} -eq 0 -a -n "\${PROMPT_COMMAND}" ] && \
export __ORIG_PROMPT_COMMAND=\${PROMPT_COMMAND}
__ros_prompt () {
if [ -n "\${__ORIG_PROMPT_COMMAND}" ]; then
eval \${__ORIG_PROMPT_COMMAND}
fi
if ! echo \${PS1} | grep '\[franka' &>/dev/null; then
if [[ $your_ip == "localhost" ]]; then
export PS1="\[\033[00;33m\][franka <SIM> - Robot@\
${FRANKA_ROBOT_IP}]\[\033[00m\] \${PS1}"
elif [[ $IS_MASTER == true ]]; then
export PS1="\[\033[00;33m\][franka <Master> - Robot@\
${FRANKA_ROBOT_IP}]\[\033[00m\] \${PS1}"
else
export PS1="\[\033[00;33m\][franka <Remote> - Master@\
${ROS_MASTER_IP}]\[\033[00m\] \${PS1}"
fi
fi
}
if [ "\${TERM}" != "dumb" ]; then
export PROMPT_COMMAND=__ros_prompt
__ROS_PROMPT=1
elif ! echo \${PS1} | grep '\[franka' &>/dev/null; then
if [[ $your_ip == "localhost" ]]; then
export PS1="\[\033[00;33m\][franka <SIM> - Robot@\
${FRANKA_ROBOT_IP}]\[\033[00m\] \${PS1}"
elif [[ $IS_MASTER == true ]]; then
export PS1="\[\033[00;33m\][franka <Master> - Robot@\
${FRANKA_ROBOT_IP}]\[\033[00m\] \${PS1}"
else
export PS1="\[\033[00;33m\][franka <Remote> - Master@\
${ROS_MASTER_IP}]\[\033[00m\] \${PS1}"
fi
fi
EOF
${SHELL} --rcfile ${tf}
rm -f -- "${tf}"
trap - EXIT