Package: circum
circumCircum is a distributed, multi sensor fusion system for detecting and tracking people. It applies techniques similar to systems developed for autonomous vehicles to detect and track moving objects (DATMO). Circum uses late fusion, meaning that detections are classified per sensor and then fused (associated and deduplicated) and tracked after. Because different sensors provide different capabilities (e.g. point vs volume detection), these properties will be combined in the final tracking output.Circum is intended for art installations wanting to use human presence as an input into an interactive installation.Installpip3installcircumUsageServiceUsage:circum[OPTIONS]Options:-n,--nameTEXTTheservicename[required]-i,--interfaceTEXTTheinterfacetobindto.-p,--portINTEGERTheporttobindto.-e,--endpointTEXTNamesofendpointstoconnectto.Canbespecifiedmultipletimes.Ifnoendpointsarespecified,allavailableendpointswillbeused.--helpShowthismessageandexit.endpointUsage:circum-endpoint[OPTIONS]COMMAND[ARGS]...

Options:--nameTEXTTheservicename--interfaceTEXTTheinterfacetobindto.--portINTEGERTheporttobindto.--poseFLOAT...Theposeofthesensor.Expressedinxyzyaw(Rx)pitch(Ry)roll(Rz)order.Unitsaremetersanddegrees.+Zisthedirectionofsensorview.X&Yfollowtherighthandrule.Ifaposeproviderisinstalled,thiswilloverrideit.--pose-provider[<availableprovidersinstalledfrompluginswillbelistedhere>]Theposeprovidertouseforautomaticallydeterminingthesensorpose.NOTE:thisiscurrentlyunsupported--helpShowthismessageandexit.


Commands:simulator<additionalsensorsinstalledfrompluginswillbelistedhere>To get the help for a particular sensor add --help after the appropriate command:?>circum-endpiontsimulator--help
Usage:circum-endpointsimulator[OPTIONS]Options:--update_intervalFLOATRatetosendupdates.--num_objectsINTEGERNumberofobjectstosimulate--helpShowthismessageandexit.ServiceThe circum service can be started with unique name and either a list of endpoints to connect to or it will find and
connect to all circum endpoints on a network. Once connected to the endpoints, it will use pose and field of view
information from each endpoint to combine tracking data into a single view which it will then transmit to clients
whenever updated.CoordinatesCircum, by convention, uses a right handed coordinate system with y as the vertical axis and +y zenith pointing. Circum,
itself, doesn't enforce or care about this, but, if a given application is deviating from this convention, it is
important to ensure that the endpoints are all using the same coordinate convention or the resulting tracks will be
unusable.DiscoveryThe circum service will advertise itself via zeroconf service discovery. It will advertise under<name>._service._circum._tcp.local.EndpointsEndpoints perform detection and classification and transmit information about the detected objects to the core service.
At the very least, the endpoint must transmit a centroid of a detected person. The core service operates on this. Any
additional information is added into the fused track for clients to consume. Each endpoint is configured with a unique
name.CoordinatesCircum supports automatically updating tracked objects based on the pose of the sensor. This assumes a right handed
sensor coordinate system with +z extending out from the sensor, +y vertical, and +x horizontal when θx,
θy, and θzare all 0. If the sensor has a different coordinate system, it mist be transformed to
this system first.DiscoveryEach endpoint is exposed as a discoverable zeroconf service. They are advertised under<name>._endpoint._circum._tcp.local.SensorsCircum is distributed with a simulator endpoint. Additional endpoint sensor types are installed via plugins.Supported sensors:HC-S04 UltrasoundKinectWalabotSensors in Development:Camera + MLPlanned sensors:IR CameraDiscoveryThe endpoints will advertise under<name>._endpoint._sub._circum._tcp.local.The type of endpoint will be noted in the service propertiesTypeType TagWalabotwalabotFLIR CameraflirKinectkinectCameracamSimulatorsimulatorDemoAfter installing circum and downloading the git repo, run the following in separate terminals (you can substitute your own values for FOO, BAR, 8081, and 8082):circum-endpoint--nameFOO--port8081simulator
circum-service--nameBAR--port8082python3.\examples\demo_client.py--serviceBARReferencesCircum would not have been possible without the following references:R. Omar Chavez-Garcia.Multiple Sensor Fusion for Detection, Classification and Tracking of MovingObjects in Driving Environments.Robotics [cs.RO]. Université de Grenoble, 2014. English.Sensor Fusion and Object Tracking using an Extended Kalman Filter Algorithm — Part 1&Part 2