コード例 #1
0
ファイル: top_sensors.py プロジェクト: n800sau/roborep
    def run(self):
        rospy.init_node('top_sensors', anonymous=True)
        self.pub_imu = rospy.Publisher('imu', Imu, queue_size=10)
        self.pub_mag = rospy.Publisher('mag', MagneticField, queue_size=10)
        data = {}
        last_data_time = time.time()
        while not rospy.is_shutdown():
            line = self.ser.readline().strip()
            if line:
                last_data_time = time.time()
                line = line.split()
                try:
                    if line[0] == 'Time:':
                        if data:
                            # publish
                            try:
                                msg = Imu()
                                msg.header.stamp = rospy.Time.now()
                                msg.header.frame_id = IMU_LINK
                                msg.orientation = Quaternion(*data['Q'])
                                for i in range(len(
                                        msg.orientation_covariance)):
                                    msg.orientation_covariance[i] = 0.1
                                msg.angular_velocity = Vector3(*data['AV'])
                                for i in range(
                                        len(msg.angular_velocity_covariance)):
                                    msg.angular_velocity_covariance[i] = 0.1
                                msg.linear_acceleration = Vector3(*data['AV'])
                                for i in range(
                                        len(msg.linear_acceleration_covariance)
                                ):
                                    msg.linear_acceleration_covariance[i] = 0.1
                                self.pub_imu.publish(msg)
                                msg = MagneticField()
                                msg.header.stamp = rospy.Time.now()
                                msg.header.frame_id = IMU_LINK
                                msg.magnetic_field = Vector3(
                                    *[v / 1000. for v in data['M']])
                                for i in range(
                                        len(msg.magnetic_field_covariance)):
                                    msg.magnetic_field_covariance[i] = 0.1
                                self.pub_mag.publish(msg)


#								rospy.loginfo('top_sensors data published: %s' % data)
                            except Exception, e:
                                rospy.logwarn('Exception while publishing:%s' %
                                              e)
                            data = {}
                    elif line[0] == 'Q:':
                        if not data:
                            data['Q'] = str2float(line[1:])
                    elif line[0] == 'AV:':
                        if data:
                            data['AV'] = str2float(line[1:])
                    elif line[0] == 'LA:':
                        if data:
                            data['LA'] = str2float(line[1:])
                    elif line[0] == 'M:':
                        if data:
                            data['M'] = str2float(line[1:])
                except Exception, e:
                    rospy.logwarn('Exception while parsing serial data:%s' % e)
                    data = {}