예제 #1
0
    def do_test_renamed(self, N):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py', 'renamed_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/renamed_gen%d.bag" % (self.pkg_dir, N)
        outbag = "%s/test/renamed_gen%d.fixed.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)
        self.assertTrue(not False in [m[1] == [] for m in res],
                        'Bag not ready to be migrated')
        res = rosbagmigration.fixbag(mm, inbag, outbag)
        self.assertTrue(res, 'Bag not converted successfully')

        msgs = [msg for msg in rosrecord.logplayer(outbag)]

        self.assertTrue(len(msgs) > 0)

        self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Renamed4',
                         'Type name is wrong')
        self.assertEqual(msgs[0][1].foo,
                         struct.unpack('<d', struct.pack('<d', 2.17))[0])
        self.assertEqual(msgs[0][1].bar, (8, 2, 5, 1))
예제 #2
0
    def do_test_migrated_mixed(self, N):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/migrated_mixed_gen%d.bag" % (self.pkg_dir, N)
        outbag = "%s/test/migrated_mixed_gen%d.fixed.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(not False in [m[1] == [] for m in res],
                        'Bag not ready to be migrated')
        res = rosbagmigration.fixbag(mm, inbag, outbag)
        self.assertTrue(res, 'Bag not converted successfully')

        msgs = [msg for msg in rosrecord.logplayer(outbag)]

        self.assertTrue(len(msgs) > 0)

        self.assertEqual(msgs[0][1].field1.field4.afield2,
                         struct.unpack('<f', struct.pack('<f', 58.2))[0])
        self.assertEqual(msgs[0][1].field1.field4.combo_field3, "aldfkja 17")
        self.assertEqual(msgs[0][1].field1.field4.afield4, 82)

        self.assertEqual(msgs[0][1].field1.field1, 34)
        self.assertEqual(msgs[0][1].field1.field2,
                         struct.unpack('<f', struct.pack('<f', 16.32))[0])
        self.assertEqual(msgs[0][1].field1.field3, "kljene")

        self.assertEqual(msgs[0][1].field2, 59)
예제 #3
0
    def do_test_constants_no_rules(self, N):
        tmp_rule_files = []
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/constants_gen%d.bag" % (self.pkg_dir, N)
        outbag = "%s/test/constants_gen%d.fixed.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(len(res[0][1]) == 1)
        self.assertTrue(not res[0][1][0].valid)
        self.assertEqual(res[0][1][0].old_class._md5sum,
                         '06a34bda7d4ea2950ab952e89ca35d7a')
        self.assertEqual(res[0][1][0].new_class._md5sum,
                         'b45401c4d442c4da7b0a2a105075fa4a')
예제 #4
0
    def do_test_partially_migrated(self, N):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py', 'partially_migrated_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/partially_migrated_gen%d.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(len(res[0][1]) == 1)
        self.assertTrue(not res[0][1][0].valid)
        self.assertEqual(res[0][1][0].old_class._md5sum,
                         '660dfa8591c9e551b8828f9bc79116ae')
        self.assertEqual(res[0][1][0].new_class._md5sum,
                         'b942bf4a41fb2bebc502889fd8981dfe')
예제 #5
0
    def test_subunmigrated(self):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/subunmigrated_gen1.bag" % (self.pkg_dir, )

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(len(res[0][1]) == 1)
        self.assertTrue(not res[0][1][0].valid)
        self.assertEqual(res[0][1][0].old_class._md5sum,
                         '4b12e5ff694b0e2a31b2ea9e0bd900f4')
        self.assertEqual(res[0][1][0].new_class._md5sum,
                         'b5d640967dccef2a24697ec4b8a571ec')
예제 #6
0
def fixbag_batch(inbags):
    mm = rosbagmigration.MessageMigrator()

    for b in inbags:
        print "Trying to migrate: %s" % b
        outbag = b + '.tmp'

        if rosbagmigration.fixbag(mm, b, outbag):
            oldnamebase = b + '.old'
            oldname = oldnamebase
            i = 1
            while os.path.isfile(oldname):
                i = i + 1
                oldname = oldnamebase + str(i)
            os.rename(b, oldname)
            os.rename(outbag, b)
            print " Migration successful.  Original stored as: %s" % oldname

        else:
            os.remove(outbag)
            print " Migration failed."
예제 #7
0
    def do_test_constants_rules(self, N):
        tmp_rule_files = ['constants.bmr']
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/constants_gen%d.bag" % (self.pkg_dir, N)
        outbag = "%s/test/constants_gen%d.fixed.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(not False in [m[1] == [] for m in res],
                        'Bag not ready to be migrated')
        res = rosbagmigration.fixbag(mm, inbag, outbag)
        self.assertTrue(res, 'Bag not converted successfully')

        msgs = [msg for msg in rosrecord.logplayer(outbag)]

        self.assertTrue(len(msgs) > 0)

        self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Constants',
                         'Type name is wrong')
        self.assertEqual(msgs[0][1].value, msgs[0][1].CONSTANT)
예제 #8
0
    def do_test_convergent(self, N):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py', 'renamed_rules.py',
            'simple_migrated_rules.py', 'converged_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/convergent_gen%d.bag" % (self.pkg_dir, N)
        outbag = "%s/test/convergent_gen%d.fixed.bag" % (self.pkg_dir, N)

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(not False in [m[1] == [] for m in res],
                        'Bag not ready to be migrated')
        res = rosbagmigration.fixbag(mm, inbag, outbag)
        self.assertTrue(res, 'Bag not converted successfully')

        msgs = [msg for msg in rosrecord.logplayer(outbag)]

        self.assertTrue(len(msgs) > 0)

        self.assertEqual(msgs[0][1]._type, 'test_rosbagmigration/Converged',
                         'Type name is wrong')
        self.assertEqual(msgs[0][1].field1[0],
                         struct.unpack('<f', struct.pack('<f', 1.2))[0])
        self.assertEqual(msgs[0][1].field1[1],
                         struct.unpack('<f', struct.pack('<f', 3.4))[0])
        self.assertEqual(msgs[0][1].field1[2],
                         struct.unpack('<f', struct.pack('<f', 5.6))[0])
        self.assertEqual(msgs[0][1].field1[3],
                         struct.unpack('<f', struct.pack('<f', 7.8))[0])

        self.assertEqual(msgs[0][1].field2[0].data, 11)
        self.assertEqual(msgs[0][1].field2[1].data, 22)
        self.assertEqual(msgs[0][1].field2[2].data, 33)
        self.assertEqual(msgs[0][1].field2[3].data, 44)
예제 #9
0
    def test_addsub(self):
        tmp_rule_files = [
            'migrated_explicit_rules.py', 'migrated_mixed_rules.py',
            'migrated_addsub_rules.py'
        ]
        rule_files = ["%s/test/%s" % (self.pkg_dir, r) for r in tmp_rule_files]

        inbag = "%s/test/migrated_addsub_gen1.bag" % (self.pkg_dir, )
        outbag = "%s/test/migrated_addsub_gen1.fixed.bag" % (self.pkg_dir, )

        mm = rosbagmigration.MessageMigrator(rule_files, False)
        res = rosbagmigration.checkbag(mm, inbag)

        self.assertTrue(not False in [m[1] == [] for m in res],
                        'Bag not ready to be migrated')
        res = rosbagmigration.fixbag(mm, inbag, outbag)
        self.assertTrue(res, 'Bag not converted successfully')

        msgs = [msg for msg in rosrecord.logplayer(outbag)]

        self.assertTrue(len(msgs) > 0)

        self.assertEqual(msgs[0][1].field1.field1, 42)
        self.assertEqual(msgs[0][1].field2.field1, 42)
예제 #10
0
  sk = math.sin(z)
  cc = ci*ck
  cs = ci*sk
  sc = si*ck
  ss = si*sk

  quaternion = [0.0,0.0,0.0,0.0]

  quaternion[0] = cj*sc - sj*cs
  quaternion[1] = cj*ss + sj*cc
  quaternion[2] = cj*cs - sj*sc
  quaternion[3] = cj*cc + sj*ss

  return quaternion

migrator = rosbagmigration.MessageMigrator()

identity6x6 = [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0] + 6*[0] + [1.0]


def repack(x):
  return struct.unpack('<f',struct.pack('<f',x))[0]

class TestCommonMsgsMigration(unittest.TestCase):


# (*) Acceleration.saved
# (*) AngularAcceleration.saved
# (*) AngularVelocity.saved
# (*) BatteryState.saved
# (*) ChannelFloat32.saved
예제 #11
0
파일: makerule.py 프로젝트: daju1-ros/ros
    type_match = pat.match(type_line)
    if type_match is None:
      print >> sys.stderr, "Full definition file malformed.  First line should be: '[my_package/my_msg]:'"
      sys.exit()

    old_type = type_match.groups()[0]
    old_full_text = f.read()
    f.close()

    old_class = roslib.genpy.generate_dynamic(old_type,old_full_text)[old_type]

    if old_class is None:
      print >> sys.stderr, "Could not generate class from full definition file."
      sys.exit()

    mm = rosbagmigration.MessageMigrator(args[2:]+append_rule,not options.noplugins)

    migrations = rosbagmigration.checkmessages(mm, [old_class])

    if migrations == []:
      print "Saved definition is up to date"
      exit(0)
    else:
      print "The following migrations need to occur:"
      for m in migrations:
        all_rules.extend(m[1])

        print_trans(m[0][0].old_class, m[0][-1].new_class, 0)
        if len(m[1]) > 0:
          print "    %d rules missing:"%(len(m[1]))
          for r in m[1]:
예제 #12
0
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# Revision $Id$

PKG = 'rosbagmigration'
import roslib

roslib.load_manifest(PKG)

import sys
import rosbagmigration

if __name__ == '__main__':
    if len(sys.argv) >= 3:
        if sys.argv[2].split('.')[-1] == "bmr":
            print >> sys.stderr, "Second argument should be a bag, not a rule file."
            exit(1)
        mm = rosbagmigration.MessageMigrator(sys.argv[3:])
        if rosbagmigration.fixbag(mm, sys.argv[1], sys.argv[2]):
            print "Bag migrated successfully."
        else:
            print "Bag could not be migrated"
    else:
        print "usage: fixbag.py <inbag> <outbag> [rulefile1, rulefile2, ...]"