Reflects the "new" multi robot setup
This shell script is run automatically whenever you open a new terminal or tab in a terminal
This means that if you edit it and save it, it still does nothing until you open a new terminal
If you want to apply it without opening a new terminal, do source ~/.bashrc
These lines should be on your laptop as well as your robot, the same way.
ROS_HOSTNAME: the IP address of this computer.
ROS_MASTER: the IP address of whereever ROSCORE is running. We have roscore always running on the little computer by the door. It happens to be called roscore1.cs.brandeis.edu
ROS_NAMESPACE: Indicates a unique name for a specific robot. That way when we send a /cmd_vel it is turned into, e.g. /roba/cmd_vel. This way all the robots can coexist on one ROSCORE. It also means you don't have to run your own ROSCORE anymore.
SSH into the robot
Run the following command to launch ROS on the robot
Did you do bringup on the ROBOT (NOT ON YOUR COMPUTER!
if not, do so!
Did bringup work
if not, check your environment variables
printenv | grep ROS
It should include all your settings and also env variables for the path to ROS
Make sure you run source ~/.bashrc
Can you run rostopic list? rostopic list
If not, check your IP addresses
Check whether the ROSCORE computer is running.
Try pinging roscore1.cs.brandeis.edu
Does it list /x/cmd_vel among them?
If not, check your IP addresses. Also make sure you ran
Can you teleop the robot? roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
if not, try a manual cmd_vel: rostopic pub /rob*/cmd_vel
You may notice that the ros installation process added a few Aliases to your .bashrc file. These serve to make your life easier, and you can add more of your own custom aliases to make your life even easier. Here are a few recommended changes to make:
You'll notice eb uses nano by default. nano is fine, if you enjoy living in the dark ages. To make eb open a different text editor, just replace nano with whatever your favorite installed editor is - code (vscode), atom, vim, emacs, etc. Bonus tip: if you're not already using eb
as a shortcut to edit the .bashrc, start using eb!
Try using this chunk in your bashrc:
NB the snippet of code above uses robc as the current robot, robc can be replaced with any valid robot name Here's what this chunk does: 1. The alias "connect" will ssh to your desired preconfigured robot (saves quite a bit of typing) 1. The variable ROBOT is used to reduce the redundancy of typing the robot name anythime you need to ssh or change your ROS_MASTER_URI 1. The last two lines will automatically obtain your IP address anytime you start a new terminal window Some additional things to note: 1. The connect alias grabs ROBOT when it is called, so it can be defined before ROBOT, but ROS_MASTER_URI grabs ROBOT when it is defined, so ROBOT must be defined first 1. The command export ROBOT=<name>
can temporarily change the value of ROBOT - anything that accesses ROBOT will grab the temporary value (Think about what this means given the last point: connect wil ssh to the temporary robot, but ROS_MASTER_URI will not update)
One of the most common problems is that when you kill a ROS script, the most recent cmd_vel latches and the robot will continue in that manner therefore, it is useful to have some sort of emergency stop procedures. 2 viable and common options: 1. create an alias for rostopic pub
that publishes a blank twist to cmd_vel 1. create an alias that launches teleop - this take longer, but will immediately stop the robot as soon as it is running.
There's obviously still much more that could done to make a more efficient terminal experience. Don't be afraid to become a bash master. Here are some resources to help get started becoming more proficient in bash: Bash Cheatsheet