The following steps should be run on the mobile base computer:
-
Clone this repository:
git clone https://github.com/jimmyyhwu/tidybot.git
-
Download the Kinova Gen3 Python API (
kortex_api-2.3.0.post34-py3-none-any.whl) from the Kortex repo -
Set up a new Conda environment (this is different from the Conda env on the server):
conda create -n tidybot python=3.9.12 conda activate tidybot conda install numpy==1.23.1 pip install kortex_api-2.3.0.post34-py3-none-any.whl pip install -r requirements.txt
Note: Use the
requirements.txtin this directory. -
Enable access to the egocentric camera:
sudo cp 99-webcam.rules /etc/udev/rules.d/99-webcam.rules sudo udevadm control --reload-rules sudo service udev restart sudo udevadm trigger
-
Get the serial number of the camera using either of the following commands:
lsusb -v -d 046d:0843 | grep iSerial udevadm info -n video0 | grep ID_SERIAL_SHORT
-
Allow members of the
realtimegroup to set real-time priority for processes (such as forkinova.py):sudo cp 99-realtime.conf /etc/security/limits.d/99-realtime.conf sudo addgroup realtime
-
Add the current user to the
realtimegroup:sudo usermod -aG realtime $USERNote that these changes do not take effect until after the current user logs out and logs back in.
-
Modify
constants.pyto reflect your setup. These values may potentially need to be modified:SERVER_HOSTNAMEROBOT_HOSTNAME_PREFIXREDIS_PASSWORDARM_HEADING_COMPENSATIONCAMERA_SERIALS
-
See the
driverdirectory for mobile base driver setup
To set up the egocentric camera, 3D print the following camera mount parts from the stl directory:
The camera mount assembly is secured to the top plate of the mobile base using two M6 socket cap screws.
When fully assembled, the mounted camera looks like this:
![]() |
|---|
See the server README for instructions on calibrating the camera for intrinsics. Please calibrate any new cameras and place the output camera parameters in the camera_params directory.
See the "TidyBot Quickstart" section of the main README for general usage instructions. The following sections describe commands that may be useful for debugging components of the robot.
For debugging issues with the base controller or arm controller, the code automatically loads dummy controllers if there are any issues loading the real ones:
DummyBaseControllerwill be used if the code cannot communicate with the motors (e.g., the motors are off)DummyArmControllerwill be used if the code cannot communicate with the arm (e.g., the arm is turned off)
These dummy controllers are useful for testing out server code without actually having to wait for the robot to physically move. To use them, just run controller.py on the mobile base computer without turning on the motors and/or the arm.
For debugging issues with the arm, the arm API can be used directly:
python kinova.pyFor debugging issues with the egocentric camera, a camera server can be used to stream image frames to a client.
First, on the mobile base computer, launch the camera server:
python camera.pyThen, on the workstation, launch the camera client (robot_camera_client.py) to view the live image feed:
python robot_camera_client.py --robot-num <robot-num>Here is an example of what that might look like:
![]() |
![]() |
|---|


