IMU sensor readings false

I think maybe there is a minor error about IMU sensor of isaacsim2021.2.1 ,
I control the robot rotate at around 1 rad/s and 2 rad/s , the odom shows the angular_vel_z is aournd 1 rad/s and 2 rad/s,it seems normal; but the imu’s angular_vel_z is about the 1/100 odom’s , it 's about 0.01 rad/s and 0.02 rad/s 。

the bug of imu has fixed in isaacsim2021.2.1’s release notes , so i am really confused.
here is my code of publish imu sensor readings and my isaacsim config, maybe maybe I’m using it incorrectly that’s causing the problem! thanks very much!

here is the vidie and screenshot of my demo :

my code of publising imu readings:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# des: publish imu msg in isaacsim scripts editor


import carb
import rospy
import asyncio
from omni.isaac.imu_sensor import _imu_sensor
from sensor_msgs.msg import Imu


class ImuPub:
    def __init__(self):
        self.imu_msg = Imu()
        isaac_imu_topic = "/isaac/imu"
        self.isaac_imu_pub = rospy.Publisher(isaac_imu_topic, Imu, queue_size=5)
        self.pita_usd_path = "/pita/base_footprint"
        self._is = _imu_sensor.acquire_imu_sensor_interface()
        props = _imu_sensor.SensorProperties()
        props.position = carb.Float3(0, 0, 0)
        props.orientation = carb.Float4(0, 0, 0, 1)
        props.sensorPeriod = 1 / 2000
        self._sensor_handle = self._is.add_sensor_on_body(self.pita_usd_path, props)
        self.meters_per_unit = 0.01  # default

    def run(self):
        rospy.init_node("isaac_imu_pub")
        asyncio.ensure_future(self.pub_imu())

    async def pub_imu(self):
        while not rospy.is_shutdown():
            await asyncio.sleep(0.02)
            imu_reading = self._is.get_sensor_readings(self._sensor_handle)
            isaac_imu_msg = Imu()
            isaac_imu_msg.header.frame_id = "base_footprint"
            if len(imu_reading):
                for i in range(len(imu_reading)):
                    isaac_imu_msg.header.stamp = rospy.Time.from_seconds(
                        imu_reading[i]["time"]
                    )
                    isaac_imu_msg.linear_acceleration.x = (
                        imu_reading[i][1] * self.meters_per_unit
                    )
                    isaac_imu_msg.linear_acceleration.y = (
                        imu_reading[i][2] * self.meters_per_unit
                    )
                    isaac_imu_msg.linear_acceleration.z = (
                        imu_reading[i][3] * self.meters_per_unit
                    )
                    isaac_imu_msg.angular_velocity.x = (
                        imu_reading[i][4] * self.meters_per_unit
                    )
                    isaac_imu_msg.angular_velocity.y = (
                        imu_reading[i][5] * self.meters_per_unit
                    )
                    isaac_imu_msg.angular_velocity.z = (
                        imu_reading[i][6] * self.meters_per_unit
                    )
                    self.isaac_imu_pub.publish(isaac_imu_msg)


if __name__ == "__main__":
    imupub = ImuPub()
    imupub.run()

I am also facing the same issue. Can anyone help with this ?

it will be fine next version

Also, can I ask if you have imported your own URDF to the world or not ? And do you know what are the other sources from where I can get USD files for different environment ?

Last question - Can we create our own sensor/camera in Isaac sim ? Suppose I have a time of flight camera. Is there any way to create that and use it in Isaac Sim ?

Thanks in advance and sorry for all these questions. I am new to this.

You multiply angular readings by the meters per unit factor which is wrong. Angles are measured in radians and there’s no relation to the scale of the simulation (a 0.1 m line rotated of 10 degrees will have the same orientation of a 1 m line rotated of the same amount)

@fzg7919 is this still an issue with Isaac Sim 2022.1.0?