Plugin description: naocampos
Requires
Interfaces
- NaoHardwareInterface("Nao Hardware") Either from the NaoQi fawkes integrator or from the naosim plugin when using the simulator
- HumanoidMotionInterface("NaoQi Motion") From the NaoQi fawkes integrator
Config values
- /firevision/nao/camera/
- active_camera string Name of the sub-directory of the camera to use
- /firevision/nao/camera/SUBDIR/ (see /firevision/nao/camera/use)
- pitch float [rad] The pitch relative to the horizontal line (hardware depended)
- x_offset float [m] The x-offset from the head pitch servo axis
- z_offset float [m] The z-offset from the head pitch servo axis
- /plugins/naocampos/
- accelerometer_filter_size uint The window size for the accelerometer readings window
- update_interval uint To save computation power the camera position gets only calculated every update_interval loop
- use_accelerometer bool true if the accelerometer should be used to span the ground plane, otherwise it is required that the foot of the supporting leg is flat on the ground
- /plugins/naocampos/nao_link_dimensions/
- foot_height float [m] The dimensions of the hardware (or simulator model)
- hip_y_offset float [m] The dimensions of the hardware (or simulator model)
- hip_z_offset float [m] The dimensions of the hardware (or simulator model)
- neck_z_offset float [m] The dimensions of the hardware (or simulator model)
- thigh_length float [m] The dimensions of the hardware (or simulator model)
- tibia_length float [m] The dimensions of the hardware (or simulator model)
Provides
- ObjectPositionInterface("Nao Camera Position")
- roll relative to the ground
- pitch relative to the ground
- yaw relative to the body (= head_yaw from the NaoHardwareInterface)
- world_z relative to the ground
- might (if needed) also provide filtered accelerometer readings (sliding window, arithmetic mean)
Description
At every loop the current accelerometer reading is added to the accelerometer filter. During the calculation of the camera position the arithmetic mean of the last accelerometer_filter_size readings gets calculated.
Every update_interval loop, the plugin calculates the kinematic model of the Nao using Denavit-Hartenberg-Transformations. The HumanoidMotionInterface is required to get the current supporting leg, the NaoHardwareInterface is required to the the current servo positions and the accelerometer readings.
As we cannot expect that the foot of the supporting leg is flat on the ground, the ground plane is calculated as the norm to the vector of the accelerometer. The camera height is the length of the vector that starts at the camera, follows the falling line and ends at the ground plane.

