Package: ctu_bosch_sr450
BOSCH SR450 Robot at CTU/CIIRCPackage to control CTU/CIIRC robot Bosch SR450 via MARS control unit.
This code is based onhttps://github.com/cvut/pyroconbut adds packaging,
documentation, and some testing.Installationpipinstallctu_bosch_sr450Installation for old systems via CondaYou need at least Python 3.7 to use this package. In case your python is old (Ubuntu in
CIIRC labs has old 3.6), install updated version of python e.g. via miniconda:# Install miniconda:
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh

# Create conda environment with newer python and install ctu_bosch_sr450:
conda create -n ctu_robotics python=3.8
conda activate ctu_robotics
pip install ctu_bosch_sr450Usagefromctu_bosch_sr450importRobotBoschrobot=RobotBosch()# set argument tty_dev=None if you are not connected to robot, it will allow you to compute FK and IK offlinerobot.initialize()# initialize connection to the robotrobot.move_to_q([0.1,0.0,0.0,0.0])# move robotrobot.wait_for_motion_stop()robot.close()# close the connectionKinematicsrobot=RobotBosch(tty_dev=None)# initialize object without connection to the robotx,y,z,phi=robot.fk([0,0,0,0])# compute forward kinematicsq=robot.ik([x,y,z,phi])[0]# compute inverse kinematics, get the first solutionCoordinate systemsThe library uses meters and radians for all values.
Variableqis used to denote joint configuration, i.e. the array of joint
angles/joint distance for revolute and prismatic joints, respectively.
Variablesx,y,z, andphiare used to denote position and orientation
of the end-effector in the base frame. The orientation is given as rotation around the
z-axis of the base frame.
The reference base frame is located as shown in the figure below.Joint configurationThe joint configuration is defined as follows:the first joint is revolute and its angle is measured w.r.t. the x-axis of the base
framethe second joint is revolute and is measured w.r.t. the previous linkthe third joint is prismatic and controls the height (i.e. motion in z-axis)the last joint is revolute and measured w.r.t. the x-axis of the base frame (i.e. *not* w.r.t. the previous link)How to control the robotIn case robot does anything unexpected, press the emergency button immediately.Starting the robotpower up the robot with red switch on the Mars control panelcreate RobotBosh() instance and call initialize()you will be asked to press the yellow button (Arm Power) on the Mars control panelrobot will perform homing after which you are able to control it with this libraryFinishing the work with the robotto turn robot of call soft_home() followed by the close() methodsturn red switch offEntering the cageto enter the cage, you need to call release() function, that will power-off the motors
and activate breaksRecovering from errorEmergency stop or cage entryunblock emergency stop button and/or closed the cagepress red button called MotionStop on the Mars control panelpress yellow button called ArmPower on the Mars control panelcontinue with normal operationMotor errorin case green led above motor axis is blinking and red led is on, there is a motor
errorto reset motors call reset_motors() methodHard homeHard home is needed after the control unit power was turned off. It is performed
automatically in the initialize() method. However, it needs to be performed only after
the power was turned off and on again. In case the connection needs to be reestablished,
you can call initialize without homing by setting the argument home to False.