Sensor and actuator interfaces, Gokart software
The repository was developed with the following objectives in mind
- interface sensors without loss of precision or temporal resolution
- interface actuators of gokart using a protocol that is specific to the MicroAutoBox implementation
The code in the repository operates a heavy and fast robot that may endanger living creatures. We follow best practices and coding standards to protect from avoidable errors. See development_guidelines
- interfaces to lidars Velodyne VLP-16, HDL-32E, Quanergy Mark8, HOKUYO URG-04LX-UG01
- interfaces to event based camera Davis240C with lossless compression by 4x
- lidar based localization
- simultaneous localization and mapping for event-based vision systems inspired by Weikersdorfer/Hoffmann/Conradt, reliable waypoint extraction and following
- offline processing of log data
Source file size distribution
We use LCM
for message interchange.
All messages are encoded using a single type BinaryBlob
.
The byte order of the binary data is little endian
since the encoding is native on most architectures.
Priority | Module | Purpose | Rimo | Steer | Linmot | Misc |
---|---|---|---|---|---|---|
Hardware | SteerBatteryCharger | prevent overcharging of battery | X | |||
Hardware | LinmotFireFighter | prevent brake hardware damage | X | |||
Emergency | LinmotCoolingModule | no acceleration while temperature of linmot critical | X | |||
Emergency | MiscEmergencyModule | no acceleration with steering battery low | X | |||
Emergency | SteerEmergencyModule | no acceleration with uncalibrated steering | X | |||
Emergency | Vlp16ClearanceModule | no acceleration towards a close obstacle | X | |||
Emergency | EmergencyBrakeProvider | brake maneuver based on obstacle in path | X | |||
Emergency | LinmotTakeoverModule | switch linmot to passive when driver pushes brake pedal | X | |||
Emergency | DeadManSwitchModule | brake if driver doesn't use joystick and gokart is above certain speed | X | |||
Calibration | SteerCalibrationProvider | execute steering calibration procedure, duration ~5[s] | X | |||
Calibration | LinmotCalibrationProvider | execute calibration of brake, duration ~4[s] | X | |||
Calibration | MiscIgnitionProvider | ACK of communication problem to microautobox by human operator, duration 0.3[s] | X | |||
Manual | RimoTorqueJoystickModule | torque control by joystick | X | |||
Manual | SteerJoystickModule | steering control by joystick | X | |||
Manual | LinmotJoystickModule | braking by joystick | X | |||
Testing | RimoComponent | interaction with motors in GUI | X | |||
Testing | SteerComponent | interaction with steering in GUI | X | |||
Testing | LinmotComponent | interaction with brake in GUI | X | |||
Testing | MiscComponent | interaction with misc in GUI | X | |||
Safety | LinmotSafetyModule | no acceleration with brake disabled | X | |||
Autonomous | PurePursuitRimo | control of speed during pure pursuit trajectory following | X | |||
Autonomous | PurePursuitSteer | steering during pure pursuit | X | |||
Fallback | RimoPutFallback | zero torque on motors | X | |||
Fallback | SteerPutFallback | zero torque on steering column | X | |||
Fallback | LinmotPutFallback | maintain operation in home position | X | |||
Fallback | MiscPutFallback | normal operation, all LEDs off | X |
- point cloud visualization and localization with lidar video
- 3D-point cloud visualization: see video
distance as 360[deg] panorama
intensity as 360[deg] panorama
- 3D-point cloud visualization: see video
our code builds upon the urg_library-1.2.0
Rolling shutter mode
Global shutter mode
2.5[ms] |
5[ms] |
Events only
1[ms] |
2.5[ms] |
5[ms] |
AEDAT 2.0, and AEDAT 3.1
- parsing and visualization
- conversion to text+png format as used by the Robotics and Perception Group at UZH
- loss-less compression of DVS events by the factor of 2
- compression of raw APS data by factor 8 (where the ADC values are reduced from 10 bit to 8 bit)
Quote from Luca/iniLabs:
- Two parameters that are intended to control framerate:
APS.Exposure
andAPS.FrameDelay
APS.RowSettle
is used to tell the ADC how many cycles to delay before reading a pixel value, and due to the ADC we're using, it takes at least three cycles for the value of the current pixel to be output by the ADC, so an absolute minimum value there is 3. Better 5-8, to allow the value to settle. Indeed changing this affects the framerate, as it directly changes how much time you spend reading a pixel, but anything lower than 3 gets you the wrong pixel, and usually under 5-6 gives you degraded image quality.
We observed that in global shutter mode, during signal image capture the stream of events is suppressed. Whereas, in rolling shutter mode the events are more evenly distributed.
Due to the rapid development of the code base, retina
is not yet available as a maven artifact.
Instead, download the project and run mvn install
on your machine.
Subsequently, you can use the project on your machine as
<dependency>
<groupId>ch.ethz.idsc</groupId>
<artifactId>retina</artifactId>
<version>0.0.1</version>
</dependency>