anchor.diff:  
   [.text-center]
   .HEBI Robotics I/O Board
  -image::udp/io-board.jpg[link="../images/udp/io-board.jpg"]
  +image::udp/io-board.jpg[link="../images/udp/io-board.jpg", width="100%"]
   
   Our startup http://hebirobotics.com/[HEBI Robotics] builds a variety of building blocks that enable quick development of custom robotic systems. We mainly focus on actuators, but we've also developed other devices such as the I/O Board shown in the picture above. Each board has 48 pins that serve a variety of functions (analog and digitial I/O, PWM, Encoder input, etc.) that can be accessed remotely via network. We normally use them in conjunction with our actuators to interface with external devices, such as a gripper or pneumatic valve, or to get various sensor input into MATLAB.
   
  
positive.code: 
  [.text-center]
  .Baseline setup using single Switch
  image::udp/setup-baseline.png[link="../images/udp/setup-baseline.png"]
  
  We set the frequency to 100Hz and logged data for ~24 hours. We chose this frequency because it is a common control rate for sending high-level trajectories, and because 10ms is a safe deadline in case there are large outliers. During normal operations we typically used rates between 100-200Hz for updating set targets of controllers that get executed on-board each device (e.g. position/velocity/torque), and rates of up to 1KHz when bypassing local controllers and remotely controlling the output (e.g. PWM). The network would technically support even higher rates, but there are usually other limitations that come in at around 1KHz (e.g. OS scheduler and limited sensor polling rates).
  
  
negative.code: 
  [.text-center]
  .Benchmark setup with additional Switch
  image::udp/setup-switching-cost.png[link="../images/udp/setup-switching-cost.png", width="100%"]
  
  For this benchmark we tested the three following Switches and added them individually to the baseline setup as shown above,
  
  