|
5 | 5 | Provides a service to store ROS message objects in a mongodb database in JSON. |
6 | 6 | """ |
7 | 7 |
|
| 8 | +import genpy |
8 | 9 | import rospy |
9 | 10 | import mongodb_store_msgs.srv as dc_srv |
10 | 11 | import mongodb_store.util as dc_util |
|
15 | 16 | from mongodb_store_msgs.msg import StringPair, StringPairList, Insert |
16 | 17 | from bson.objectid import ObjectId |
17 | 18 | from datetime import * |
| 19 | +from tf2_msgs.msg import TFMessage |
| 20 | + |
18 | 21 |
|
19 | 22 | MongoClient = dc_util.import_MongoClient() |
20 | 23 |
|
| 24 | + |
21 | 25 | class MessageStore(object): |
22 | 26 | def __init__(self, replicate_on_write=False): |
23 | 27 |
|
@@ -116,8 +120,21 @@ def insert_ros_srv(self, req): |
116 | 120 |
|
117 | 121 |
|
118 | 122 | # try: |
119 | | - meta['inserted_at'] = datetime.utcfromtimestamp(rospy.get_rostime().to_sec()) |
| 123 | + stamp = rospy.get_rostime() |
| 124 | + meta['inserted_at'] = datetime.utcfromtimestamp(stamp.to_sec()) |
120 | 125 | meta['inserted_by'] = req._connection_header['callerid'] |
| 126 | + if hasattr(obj, "header") and hasattr(obj.header, "stamp") and\ |
| 127 | + isinstance(obj.header.stamp, genpy.Time): |
| 128 | + stamp = obj.header.stamp |
| 129 | + elif isinstance(obj, TFMessage): |
| 130 | + if obj.transforms: |
| 131 | + transforms = sorted(obj.transforms, |
| 132 | + key=lambda m: m.header.stamp, reverse=True) |
| 133 | + stamp = transforms[0].header.stamp |
| 134 | + |
| 135 | + meta['published_at'] = datetime.utcfromtimestamp(stamp.to_sec()) |
| 136 | + meta['timestamp'] = stamp.to_nsec() |
| 137 | + |
121 | 138 | obj_id = dc_util.store_message(collection, obj, meta) |
122 | 139 |
|
123 | 140 |
|
|
0 commit comments