BioloidInfo Namespace Reference
Declares configuration of generic bioloid/dynamixel based robots, such as number of joints, LEDs, etc.
More...
Functions |
const Capabilities | capabilities (TargetName, NumReferenceFrames, outputNames, NumButtons, buttonNames, NumSensors, sensorNames, PIDJointOffset, NumPIDJoints, LEDOffset, NumLEDs, NumOutputs) |
Variables |
const char *const | TargetName = "Bioloid" |
| the name of the model, to be used for logging and remote GUIs
|
const unsigned int | FrameTime = 32 |
| time between frames in the motion system (milliseconds)
|
const unsigned int | NumFrames = 1 |
| the number of frames per buffer (don't forget also double buffered)
|
const unsigned int | SoundBufferTime = 32 |
| the number of milliseconds per sound buffer... I'm not sure if this can be changed
|
const char *const | outputNames [NumReferenceFrames+1] |
| Names for each of the outputs.
|
const Capabilities | capabilities |
| allocation declared in RobotInfo.cc
|
const float | DefaultPIDs [NumPIDJoints][3] |
| Dynamixel servos don't use PID control. Instead, these values indicate compliance slope (P), punch (add to P*error), compliance margin (min error to start applying torque) (see ServoParam_t).
|
const float | MaxOutputSpeed [NumOutputs] |
| These values are our recommended maximum joint velocities, in rad/sec.
|
const float | outputRanges [NumOutputs][2] |
| This table holds the software limits of each of the outputs, first index is the output offset, second index is MinMaxRange_t (i.e. MinRange or MaxRange).
|
const float | mechanicalLimits [NumOutputs][2] |
| This table holds the mechanical limits of each of the outputs, first index is the output offset, second index is MinMaxRange_t (i.e. MinRange or MaxRange).
|
|
|
const unsigned | NumWheels = 0 |
| The number of joints per leg.
|
const unsigned | FingerJointsPerArm = 0 |
| The number of joints per leg.
|
const unsigned | JointsPerArm = 0 |
| The number of joints per leg.
|
const unsigned | NumArms = 0 |
| The number of joints per leg.
|
const unsigned | NumArmJoints = JointsPerArm*NumArms |
| The number of joints per leg.
|
const unsigned | JointsPerLeg = 0 |
| The number of joints per leg.
|
const unsigned | NumLegs = 0 |
| The number of legs.
|
const unsigned | NumLegJoints = JointsPerLeg*NumLegs |
| the TOTAL number of joints on ALL legs
|
const unsigned | NumHeadJoints = 0 |
| The number of joints in the pantilt.
|
const unsigned | NumTailJoints = 0 |
| The number of joints assigned to the tail.
|
const unsigned | NumMouthJoints = 0 |
| the number of joints that control the mouth
|
const unsigned | NumEarJoints = 0 |
| The number of joints which control the ears (NOT per ear, is total).
|
const unsigned | NumButtons = 0 |
| the number of buttons that are available
|
const unsigned | NumSensors = 2 |
| the number of sensors available (voltage and temperature)
|
const unsigned | NumFacePanelLEDs = 0 |
| The number of face panel LEDs.
|
const unsigned | NumLEDs = 18 |
| The number of LEDs which can be controlled (one per dynamixel servo).
|
const unsigned | NumPIDJoints = 18 + NumWheels + NumArmJoints + NumLegJoints+NumHeadJoints+NumTailJoints+NumMouthJoints |
| The number of joints per leg.
|
const unsigned | NumOutputs = NumWheels + NumPIDJoints + NumLEDs |
| servo pins
|
const unsigned | NumReferenceFrames = NumOutputs+1 |
| Since we don't know what the user built, we don't actually know any of the kinematics...
|
Output Offsets |
Corresponds to entries in ERS7Info::PrimitiveName, defined at the end of this file
|
enum | WheelOffset_t { LWheelOffset = WheelOffset,
RWheelOffset
} |
| The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
More...
|
enum | LEDOffset_t |
| The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
More...
|
typedef unsigned int | LEDBitMask_t |
const unsigned | PIDJointOffset = 0 |
| The beginning of the PID Joints.
|
const unsigned | WheelOffset = PIDJointOffset |
| The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
|
const unsigned | LEDOffset = PIDJointOffset + NumPIDJoints |
| the offset of LEDs in WorldState::outputs and MotionCommand functions, see LedOffset_t for specific offsets
|
const unsigned | BaseFrameOffset = NumOutputs |
| Use with kinematics to refer to base reference frame.
|
const LEDBitMask_t | FaceLEDMask = 0 |
| LEDs for the face panel (all FaceLEDPanelMask<<(0:NumFacePanelLEDs-1) entries).
|
const LEDBitMask_t | AllLEDMask = (LEDBitMask_t)~0 |
| selects all of the leds
|
Input Offsets |
The order in which inputs should be stored
|
enum | ButtonOffset_t |
| holds offsets to different buttons in WorldState::buttons[]
More...
|
enum | SensorOffset_t { PowerThermoOffset,
PowerVoltageOffset
} |
| holds offset to different sensor values in WorldState::sensors[]
More...
|
const char *const | buttonNames [NumButtons+1] = { NULL } |
| Provides a string name for each button.
|
const char *const | sensorNames [NumSensors+1] |
| Provides a string name for each sensor.
|
Detailed Description
Declares configuration of generic bioloid/dynamixel based robots, such as number of joints, LEDs, etc.
Typedef Documentation
So you can be clear when you're refering to a LED bitmask
Definition at line 92 of file BioloidInfo.h.
Enumeration Type Documentation
holds offsets to different buttons in WorldState::buttons[]
Should be a straight mapping to the ButtonSourceIDs
Note that the chest (power) button is not a normal button. It kills power to the motors at a hardware level, and isn't sensed in the normal way. If you want to know when it is pressed (and you are about to shut down) see PowerSrcID::PauseSID.
- See also:
- WorldState::buttons
-
ButtonSourceID_t
Definition at line 118 of file BioloidInfo.h.
The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
Definition at line 90 of file BioloidInfo.h.
The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
- Enumerator:
LWheelOffset |
|
RWheelOffset |
|
Definition at line 83 of file BioloidInfo.h.
Function Documentation
const Capabilities BioloidInfo::capabilities |
( |
TargetName |
, |
|
|
NumReferenceFrames |
, |
|
|
outputNames |
, |
|
|
NumButtons |
, |
|
|
buttonNames |
, |
|
|
NumSensors |
, |
|
|
sensorNames |
, |
|
|
PIDJointOffset |
, |
|
|
NumPIDJoints |
, |
|
|
LEDOffset |
, |
|
|
NumLEDs |
, |
|
|
NumOutputs |
| |
|
) |
| | |
Variable Documentation
const Capabilities BioloidInfo::capabilities(TargetName, NumReferenceFrames, outputNames, NumButtons, buttonNames, NumSensors, sensorNames, PIDJointOffset, NumPIDJoints, LEDOffset, NumLEDs, NumOutputs) |
allocation declared in RobotInfo.cc
Definition at line 37 of file DynamicInfo.cc.
Referenced by TorqueCalibrate::TakeMeasurementControl::activate(), PostureMC::defaultMaxSpeed(), HeadPointerMC::defaultMaxSpeed(), CameraBehavior::doStart(), EmergencyStopMC::EmergencyStopMC(), EmergencyStopMC::freezeJoints(), plist::OutputSelector::get(), PostureEngine::loadBuffer(), PostureEngine::loadLine(), plist::OutputSelector::loadXML(), ArmMC::moveOffsetToPoint(), ArmMC::moveOffsetToPointWithOrientation(), plist::OutputSelector::operator=(), HeadController::runCommand(), RunSequenceControl< SequenceSize >::selectedFile(), LoadPostureControl::selectedFile(), plist::OutputSelector::set(), BatteryMonitorBehavior::setFlipper(), HeadPointerMC::setJoints(), plist::OutputSelector::setRange(), Grasper::CloseTheGripper::setup(), Grasper::OpenTheGripper::setup(), Controller::takeLine(), EmergencyStopMC::trigger(), TailWagMC::updateOutputs(), and XWalkMC::updateOutputsWalking().
Initial value: {
{32,32,0}, {32,32,0}, {32,32,0}, {32,32,0},
{32,32,0}, {32,32,0}, {32,32,0}, {32,32,0},
{32,32,0}, {32,32,0}, {32,32,0}, {32,32,0},
{32,32,0}, {32,32,0}, {32,32,0}, {32,32,0},
{32,32,0}, {32,32,0},
}
Dynamixel servos don't use PID control. Instead, these values indicate compliance slope (P), punch (add to P*error), compliance margin (min error to start applying torque) (see ServoParam_t).
I believe the torque calculation goes something like: torque = (error<compliance) ? 0 : punch + P*error Dynamixel servos allow different values to be supplied for CW vs. CCW motion, but we just use the same value for each
Definition at line 190 of file BioloidInfo.h.
Referenced by ArmMC::clearGripperPulse(), PIDMC::setAllPowerLevel(), PIDMC::setJointPowerLevel(), PIDMC::setRangePowerLevel(), TorqueCalibrate::TakeMeasurementControl::transition(), ArmMC::updateOutputs(), and WorldState::WorldState().
time between frames in the motion system (milliseconds)
Definition at line 30 of file BioloidInfo.h.
Referenced by WaypointEngine::computeNewVelocity(), PostureMC::defaultMaxSpeed(), HeadPointerMC::defaultMaxSpeed(), BatteryMonitorBehavior::doEvent(), PostureMC::getMaxSpeed(), HeadPointerMC::getMaxSpeed(), ArmMC::getMaxSpeed(), MotionManager::getOutputs(), RecordMotionNode::preStart(), PostureMC::setMaxSpeed(), HeadPointerMC::setMaxSpeed(), ArmMC::setMaxSpeed(), LedEngine::updateLEDFrames(), LedEngine::updateLEDs(), TailWagMC::updateOutputs(), SineMC::updateOutputs(), MotionSequenceMC< MAXMOVE >::updateOutputs(), and EmergencyStopMC::updateOutputs().
the offset of LEDs in WorldState::outputs and MotionCommand functions, see LedOffset_t for specific offsets
Definition at line 79 of file BioloidInfo.h.
Referenced by PostureEditor::activate(), Controller::deactivate(), LedEngine::displayNumber(), Controller::doStop(), EmergencyStopMC::EmergencyStopMC(), EmergencyStopMC::freezeJoints(), LedEngine::getSetting(), LedEngine::getValue(), PostureEditor::processEvent(), RunSequenceControl< SequenceSize >::selectedFile(), LoadPostureControl::selectedFile(), FlashIPAddrBehavior::setupSequence(), LedEngine::updateLEDs(), LedMC::updateOutputs(), and EmergencyStopMC::updateOutputs().
Initial value: {
0.4f,0.4f,0.4f,0.4f,
0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,
0.4f,0.4f,0.4f,0.4f,
0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,0.4f,0.4f, 0.4f,0.4f,
}
These values are our recommended maximum joint velocities, in rad/sec.
a value <= 0 means infinite speed (e.g. LEDs)
These limits are not enforced by the framework. They are simply available for you to use as you see fit. HeadPointerMC and PostureMC are primary examples of included classes which do respect these values (although they can be overridden)
These values were obtained from the administrators of the Sony OPEN-R BBS
Definition at line 207 of file BioloidInfo.h.
Referenced by PostureMC::defaultMaxSpeed().
Initial value: {
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1},
}
This table holds the mechanical limits of each of the outputs, first index is the output offset, second index is MinMaxRange_t (i.e. MinRange or MaxRange).
Same as outputRanges, don't know actual values because they were never specified by Sony
Definition at line 250 of file BioloidInfo.h.
The number of joints per leg.
Definition at line 40 of file BioloidInfo.h.
Referenced by ArmController::ArmController(), ArmController::connect(), ArmMC::defaultMaxSpeed(), ArmController::doEvent(), Grasper::PathPlanToRest::doStart(), ArmController::doStart(), ArmMC::ensureValidJoint(), ArmMC::freezeMotion(), ArmMC::isAlive(), ArmMC::isDirty(), Grasper::SetJoint::moveJoint(), ArmMC::moveOffsetToPoint(), ArmMC::moveOffsetToPointWithOrientation(), ArmMC::noMaxSpeed(), HandEyeGripper::OpenClose(), ArmController::relax(), ArmMC::setDirty(), ArmController::setJoint(), ArmMC::setMaxSpeed(), ArmMC::setWeight(), ArmMC::takeSnapshot(), ArmController::unrelax(), and ArmMC::updateOutputs().
The number of joints which control the ears (NOT per ear, is total).
Definition at line 48 of file BioloidInfo.h.
The number of face panel LEDs.
Definition at line 51 of file BioloidInfo.h.
the number of frames per buffer (don't forget also double buffered)
Definition at line 31 of file BioloidInfo.h.
Referenced by WaypointEngine::computeNewVelocity(), BatteryMonitorBehavior::doEvent(), MotionManager::getOutputs(), MotionManager::motionReport(), MotionManager::OutputState::OutputState(), RecordMotionNode::preStart(), MotionManager::setOutput(), LedMC::setWeights(), LedEngine::updateLEDs(), TailWagMC::updateOutputs(), SineMC::updateOutputs(), PostureMC::updateOutputs(), MotionSequenceMC< MAXMOVE >::updateOutputs(), HeadPointerMC::updateOutputs(), EmergencyStopMC::updateOutputs(), and ArmMC::updateOutputs().
The number of joints in the pantilt.
Definition at line 45 of file BioloidInfo.h.
Referenced by HeadPointerMC::ensureValidJoint(), HeadPointerMC::freezeMotion(), HeadPointerMC::isAlive(), HeadPointerMC::lookAtPoint(), HeadPointerMC::lookInDirection(), HeadPointerMC::noMaxSpeed(), DualCoding::Lookout::scanAlongLine(), DualCoding::Lookout::scanAlongPolygon(), DualCoding::Lookout::searchAt(), HeadPointerMC::setDirty(), HeadPointerMC::setWeight(), HeadPointerMC::takeSnapshot(), DualCoding::Lookout::triggerSearchMotionSequence(), and HeadPointerMC::updateOutputs().
The number of LEDs which can be controlled (one per dynamixel servo).
Definition at line 57 of file BioloidInfo.h.
Referenced by PostureEditor::activate(), LedEngine::cflash(), LedEngine::clear(), LedEngine::cycle(), Controller::deactivate(), LedEngine::displayNumber(), LedEngine::displayPercent(), CameraBehavior::doEvent(), Controller::doStop(), EmergencyStopMC::EmergencyStopMC(), LedEngine::extendFlash(), LedEngine::flash(), EmergencyStopMC::freezeJoints(), MotionManager::getOutputs(), LedEngine::invert(), LedEngine::LedEngine(), PostureEditor::processEvent(), LedEngine::recalcFlashEnd(), RunSequenceControl< SequenceSize >::selectedFile(), LoadPostureControl::selectedFile(), LedEngine::set(), FlashIPAddrBehavior::setupSequence(), LedMC::setWeights(), LedEngine::updateLEDFrames(), LedEngine::updateLEDs(), LedMC::updateOutputs(), and EmergencyStopMC::updateOutputs().
The number of legs.
Definition at line 43 of file BioloidInfo.h.
Referenced by GaitedFootstepMC::advanceStep(), Kinematics::calculateGroundPlane(), GaitedFootsteps::expand(), Kinematics::findUnusedLeg(), XWalkParameters::getMaxAVel(), XWalkParameters::init(), XWalkMC::isDirty(), XWalkParameters::minPeriod(), XWalkParameters::nominalPeriod(), XWalkParameters::SinusoidalParameters::operator()(), GaitedFootsteps::setGait(), XWalkMC::setTargetVelocity(), and GaitedFootstepMC::updateOutputs().
the number of joints that control the mouth
Definition at line 47 of file BioloidInfo.h.
servo pins
the total number of outputs
Definition at line 61 of file BioloidInfo.h.
Referenced by PostureEngine::avgdiff(), PostureEngine::clear(), MotionSequenceMC< MAXMOVE >::clear(), MotionSequenceEngine::compress(), PostureMC::defaultMaxSpeed(), PostureEngine::diff(), WorldStateSerializerBehavior::doEvent(), WorldStateSerializerBehavior::doStart(), EmergencyStopMC::freezeJoints(), PostureEngine::getBinSize(), MotionSequenceEngine::getBinSize(), Kinematics::getInterestPoint(), KinematicJoint::getJointJacobian(), MotionSequenceEngine::getOutputIndex(), MotionSequenceEngine::getPose(), PostureMC::isAlive(), MotionSequenceEngine::loadBuffer(), PostureEngine::maxdiff(), MotionManager::MotionManager(), MotionManager::motionReport(), MotionSequenceEngine::MotionSequenceEngine(), ArmMC::moveOffsetToPoint(), ArmMC::moveOffsetToPointWithOrientation(), PostureMC::noMaxSpeed(), PostureEngine::operator=(), MotionSequenceEngine::overlayMotion(), PostureEditor::PostureEditor(), PostureEngine::PostureEngine(), SensorObserverControl::processEvent(), PostureEditor::processEvent(), WorldState::read(), RemoteState::RemoteState(), MotionSequenceEngine::resume(), PostureEngine::saveBuffer(), MotionSequenceEngine::saveBuffer(), XWalkMC::sendLoadPredictions(), SensorObserverControl::SensorObserverControl(), PostureEngine::setAverage(), PostureEngine::setCombine(), PostureMC::setDirty(), MotionSequenceEngine::setExplicitPose(), MotionManager::setOutput(), PostureEngine::setOverlay(), MotionSequenceEngine::setPose(), MotionSequenceEngine::setTime(), PostureEngine::setUnderlay(), PostureMC::setWeights(), PostureEngine::setWeights(), SineMC::SineMC(), XWalkMC::solveIK(), GaitedFootstepMC::solveIK(), PostureEngine::solveLink(), PostureEngine::solveLinkOrientation(), PostureEngine::solveLinkPosition(), XWalkMC::start(), XWalkMC::stop(), SineMC::syncAll(), PostureEngine::takeSnapshot(), PostureEngine::update(), Kinematics::update(), XWalkMC::updateOutputs(), SineMC::updateOutputs(), RemoteControllerMC::updateOutputs(), PostureMC::updateOutputs(), MotionSequenceMC< MAXMOVE >::updateOutputs(), EmergencyStopMC::updateOutputs(), XWalkMC::updateOutputsInitial(), PostureEditor::updatePose(), SensorObserverControl::updateRT(), and WorldState::WorldState().
The number of joints per leg.
Definition at line 58 of file BioloidInfo.h.
Referenced by WorldState::applyCalibration(), WorldStateSerializerBehavior::doEvent(), RecordMotionNode::doEvent(), WorldStateSerializerBehavior::doStart(), EmergencyStopMC::EmergencyStopMC(), EmergencyStopMC::freezeJoints(), PostureEngine::getBinSize(), MotionManager::getOutputs(), TorqueCalibrate::init(), PIDMC::isPID(), PostureEngine::loadLine(), PIDMC::PIDMC(), RecordMotionNode::preStart(), PIDNode::preStart(), SensorObserverControl::processEvent(), WorldState::read(), PostureEditor::refresh(), PostureEngine::saveBuffer(), SensorObserverControl::SensorObserverControl(), PIDMC::setAllPowerLevel(), PIDMC::updateOutputs(), EmergencyStopMC::updateOutputs(), SensorObserverControl::updateRT(), and WorldState::WorldState().
The number of joints assigned to the tail.
Definition at line 46 of file BioloidInfo.h.
Names for each of the outputs.
Definition at line 139 of file BioloidInfo.h.
Referenced by ArmController::connect(), MoCapLogger::dump(), PostureEngine::getBinSize(), MotionSequenceEngine::getBinSize(), Kinematics::getInterestPoint(), MoCapEvent::getOrientation(), MotionSequenceEngine::getOutputIndex(), MotionManager::getOutputs(), MoCapEvent::getPosition(), MotionManager::motionReport(), OutputConfig< plist::Primitive< float > >::OutputConfig(), PostureEditor::PostureEditor(), PostureEngine::saveBuffer(), MotionSequenceEngine::saveBuffer(), OutputConfig< T >::saveXML(), SensorObserverControl::SensorObserverControl(), and SensorObserverControl::updateRT().
Initial value: {
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{RAD(-150),RAD(150)}, {RAD(-150),RAD(150)},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1}, {0,1}, {0,1},
{0,1}, {0,1},
}
This table holds the software limits of each of the outputs, first index is the output offset, second index is MinMaxRange_t (i.e. MinRange or MaxRange).
Definition at line 228 of file BioloidInfo.h.
Referenced by Grasper::checkGoalCandidate(), HeadPointerMC::clipAngularRange(), ArmMC::clipAngularRange(), ArmController::connect(), ArmController::doEvent(), ArmMC::openGripper(), ArmController::pointPicked(), HeadController::runCommand(), ArmController::setJoint(), Grasper::CloseTheGripper::setup(), Grasper::OpenTheGripper::setup(), and SineMC::SineMC().
The beginning of the PID Joints.
Definition at line 76 of file BioloidInfo.h.
Referenced by WorldState::applyCalibration(), ArmMC::clearGripperPulse(), RecordMotionNode::doEvent(), MotionManager::getOutputs(), PIDMC::getPID(), TorqueCalibrate::init(), PIDMC::isPID(), PostureEngine::loadLine(), PIDMC::PIDMC(), RecordMotionNode::preStart(), PIDNode::preStart(), TorqueCalibrate::TakeMeasurementControl::processEvent(), WorldState::read(), PostureEditor::refresh(), SensorObserverControl::SensorObserverControl(), PIDMC::setJointPowerLevel(), PIDMC::setPID(), PIDMC::setRangePowerLevel(), PIDMC::updateOutputs(), EmergencyStopMC::updateOutputs(), and ArmMC::updateOutputs().
the number of milliseconds per sound buffer... I'm not sure if this can be changed
Definition at line 32 of file BioloidInfo.h.
The offsets of the individual LEDs -- except we don't have any idea what to 'name' the servos in a reconfigurable kit, so this is empty (just add numeric offsets).
Definition at line 77 of file BioloidInfo.h.
Referenced by EmergencyStopMC::freezeJoints().
|