== Install ROS Indigo on desktop computer == Perform these install steps on the computer responsible for human input and visualization. === Some assumptions about your Ubuntu Install === These instructions make the following assumptions about your Ubuntu 14.04LTS install. These are not hard and fast rules, however, the instructions assume these things. When asked during the install you should select the following: * username : '''si''' * computer name : '''SIDEV1''' * password : '''Welcome00''' * The SSH client and server are installed. * If not run the following commands: {{{ sudo apt-get update sudo apt-get install openssh-client sudo apt-get install openssh-server }}} <<Include(Robots/RMPv3/indigo/core_ros_computer_setup)>> == Environment setup == Edit the local bash environment to add a few useful aliases {{{ gedit ~/.bashrc }}} Add the following lines to the end of the file each provides a few shortcuts: {{{ source /opt/ros/indigo/setup.bash export LIBGL_ALWAYS_SOFTWARE=1 alias sws='source ./devel/setup.bash' alias clean_backups='find ./ -name '*~' | xargs rm' alias clean_pyc='find ./ -name '*.pyc' | xargs rm' alias clean_rosbuild='rm -rf build devel install' #change SIBOT1 to whatever you onboard PC name is export ROBOT_PC_NAME=SIBOT1 export ROS_MASTER_URI=http://$ROBOT_PC_NAME:11311 # This is the IP of the remote desktop it set eth0 to whatever NIC your using to connect to the platform # It grabs whatever IP is associated with that NIC export ROS_IP=$(ip -4 address show eth0 | grep 'inet' | sed 's/.*inet \([0-9\.]\+\).*/\1/') #change SIBOT1 to whatever you onboard PC name is alias s1='ssh -X sibot@SIBOT1' }}} Now, make sure you close all terminals and open a new one to make the changes effective. == Setup Workspace == Create a workspace in your home directory. {{{ mkdir -p ~/segway_remote_ws/src cd ~/segway_remote_ws/src catkin_init_workspace cd .. catkin_make }}} Download and install ROS software packages {{{ cd ~/segway_remote_ws/src git clone https://github.com/StanleyInnovation/segway_v3.git git clone https://github.com/StanleyInnovation/segway_v3_desktop.git git clone https://github.com/StanleyInnovation/segway_v3_simulator.git git clone https://github.com/StanleyInnovation/segway_v3_network.git cd .. catkin_make }}} == Network Setup == You need to set the network up for the connection to the robot PC. This is an outline and is intended to be a guide. Please make sure you have completed the [[Robots/RMPv3/indigo/core_robot_computer_setup|Robot Setup]] and that the system is powered on with the networking setup. If you purchased a Navigator package with integrated PC from Stanley Innovation, this will already be done for you. === Setup Wireless Router === To connect with the platform these instructions assume you will be using a wireless router. Instructions for our recommended wireless router are here [[Robots/RMPv3/indigo/wireless_setup|Wireless Router]] === Local ROS Networking Configuration === The file that contains the relevant networking is {{{ ~/segway_remote_ws/src/segway_v3_network/segway_network_config.bash }}} This file is setup by default for the ROS master. In this case, the PC on the robot is the master. So we need to change: {{{ export ROBOT_NETWORK=wlan0 }}} to the network device associated with your wireless NIC and {{{ export ROS_MASTER_IP=$ROS_IP }}} to {{{ export ROS_MASTER_IP=SIBOT1 }}} The contents of your file should now look like: {{{ # Set this to whatever physical port you are using to communicate externally # (eg. eth0, eth1, wlan0,...etc) export ROBOT_NETWORK=wlan0 export ROS_IP=$(ip -4 address show $ROBOT_NETWORK | grep 'inet' | sed 's/.*inet \([0-9\.]\+\).*/\1/') # Set this to the IP address of the ROS master if it is this computer just # use ROS_IP defined above; if it is say the remote computer it would be 10.66.171.4 export ROS_MASTER_IP=SIBOT1 export ROS_MASTER_URI=http://$ROS_MASTER_IP:11311/ }}} === Configure networking on desktop computer === * Connect to the wireless network. If you purchased a Navigator package from Stanley Innovation, the SSID is {{{ SIBOT_XXYYZZ }}} where XX is the day, YY is the month, and ZZ is the year that the router was configured. * The password is: {{{ Welcome00 }}} * You can either use a static IP or just use the DHCP that was setup on the wireless router * DHCP is typically best * Make sure you can ping the wireless router {{{ ping 10.66.171.1 }}} * And now make sure you can ping the Robot PC {{{ ping 10.66.171.4 }}} == Setup Robot PC Name Resolution == * We need to add the robot pc to our known hosts list so we can resolve it by name: {{{ sudo gedit /etc/hosts }}} * Add the following line: {{{ 10.66.171.4 SIBOT1 }}} * Save and close == Make sure you can ping the robot == From the terminal {{{ ping sibot1 }}} == Setup an SHH connection == You need to be able to SSH into the robot PC here are some basic instructions These are a quick review of the defaults because they affect this section directly: * Robot PC user name: '''sibot''' * Robot PC name: '''SIBOT1''' * Robot PC IP address: '''10.66.171.4''' * Remote Desktop user name: '''si''' * Remote Desktop PC name: '''SIDEV1''' * password for both users: '''Welcome00''' * ssh port (standard): '''22''' === Setup your SSH Keys === Open a terminal and create the RSA key pair: {{{ ssh-keygen -t rsa }}} Once you have entered the Gen Key command, you will get a few more questions: {{{ Enter file in which to save the key (/home/si/.ssh/id_rsa): }}} You can press enter here, saving the file to the user home (in this case, my example user is called si). {{{ Enter passphrase (empty for no passphrase): }}} It's up to you whether you want to use a passphrase. The robot network generally isn't connected to public networks. Entering a passphrase does have its benefits: the security of a key, no matter how encrypted, still depends on the fact that it is not visible to anyone else. Should a passphrase-protected private key fall into an unauthorized users possession, they will be unable to log in to its associated accounts until they figure out the passphrase, buying the hacked user some extra time. The only downside, of course, to having a passphrase, is then having to type it in each time you use the Key Pair. The entire key generation process looks like this: {{{ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/si/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/si/.ssh/id_rsa. Your public key has been saved in /home/si/.ssh/id_rsa.pub. The key fingerprint is: 4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 si@sidev1 The key's randomart image is: +--[ RSA 2048]----+ | .oo. | | . o.E | | + . o | | . = = . | | = S = . | | o + = + | | . o + o . | | . o | | | +-----------------+ }}} === Copy the public key === Once the key pair is generated, it's time to place the public key on the robot PC. You can copy the public key into the new machine's authorized_keys file with the ssh-copy-id command. From the terminal: {{{ ssh-copy-id sibot@SIBOT1 }}} You should see something like this: {{{ The authenticity of host '12.34.56.78 (12.34.56.78)' can't be established. RSA key fingerprint is b1:2d:33:67:ce:35:4d:5f:f3:a8:cd:c0:c4:48:86:12. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.66.171.4' (RSA) to the list of known hosts. sibot@SIBOT1's password: }}} Now enter the password you chose for the robot PC and you should see: {{{ Now try logging into the machine, with "ssh 'sibot@SIBOT1'", and check in: ~/.ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. }}} You should now be able to ssh into the robot PC. Test it to make sure. From the terminal: {{{ s1 }}} At this point you should be able to successfully establish a connection with the robot computer. If not stop and troubleshoot the networking and the ssh connection. You can now close the ssh connection with: {{{ exit }}} == Setup chrony == * If you are going to be running ROS nodes on a remote computer it is a good idea to setup chrony to synchronize time between the machines * The onboard robot PC should ideally run the server * Specific directions for setting up chrony can be found online