This sensor emulates an Inertial Measurement Unit (IMU), measuring the angular velocity and linear acceleration including acceleration due to gravity. For the magnetic field part, refer to the documentation of Magnetometer.
If the robot has a physics controller, the velocities are directly read from it’s properties localAngularVelocity and worldLinearVelocity. Otherwise the velocities are calculated by simple differentiation. Linear acceleration is always computed by differentiation of the linear velocity. The measurements are given in the IMU coordinate system, so the location and rotation of the IMU with respect to the robot is taken into account.
You can set these properties in your scripts with <component>.properties(<property1>=..., <property2>=...).
Kind of computation, can be one of [‘Velocity’, ‘Position’]. Only robot with dynamic and Velocity control can choose Velocity computation. Default choice is Velocity for robot with physics, and Position for others
This sensor exports these datafields at each simulation step:
number of seconds in simulated time
rates in IMU x, y, z axes (in radian . sec ^ -1)
acceleration in IMU x, y, z axes (in m . sec ^ -2)
magnetic field along x, y, z axes (in nT)
Returns the properties of a component.
a dictionary of the current component’s properties
Returns the current data stored in the sensor.
a dictionary of the current sensor’s data
Modify one property on a component
Returns the configurations of a component (parsed from the properties).
a dictionary of the current component’s configurations
The following examples show how to use this component in a Builder script:
from morse.builder import * # adds a default robot (the MORSE mascott!) robot = Morsy() # creates a new instance of the sensor imu = IMU() # place your component at the correct location imu.translate(<x>, <y>, <z>) imu.rotate(<rx>, <ry>, <rz>) robot.append(imu) # define one or several communication interface, like 'socket' imu.add_interface(<interface>) env = Environment('empty')