code: def _param_callback(self, name, value):
          
          print('{0}: {1}'.format(name, value))
  
          # Remove each parameter from the list and close the link when
          # all are fetched
          self._param_check_list.remove(name)
          if len(self._param_check_list) == 0:
              print('Have fetched all parameter values.')
  
              # First remove all the group callbacks
              for g in self._param_groups:
                  self._cf.param.remove_update_callback(group=g,
                                                        cb=self._param_callback)
  
              # Create a new random value [0.00,1.00] for pid_attitude.pitch_kd
              # and set it
              pkd = random.random()
              print('')
              print('Write: pid_attitude.pitch_kd={:.2f}'.format(pkd))
              self._cf.param.add_update_callback(group='pid_attitude',
                                                 name='pitch_kd',
                                                 cb=self._a_pitch_kd_callback)
              # When setting a value the parameter is automatically read back
              # and the registered callbacks will get the updated value
              self._cf.param.set_value('pid_attitude.pitch_kd',
                                       '{:.2f}'.format(pkd))
docs: Generic callback registered for all the groups