35 roslib.load_manifest(
'dense_laser_assembler')
42 from roslib
import rostime
50 def __init__(self, req_callback, max_mech_len, max_laser_done_len, max_laser_wait_len) :
94 oldest_mech_time = self.
_mech_q[0].header.stamp
95 newest_mech_time = self.
_mech_q[-1].header.stamp
102 scan_interval = [ (x.header.stamp,
104 x.header.stamp+rostime.Duration().from_seconds(len(x.ranges)*x.time_increment))
107 laser_pending_q = [x
for i,x
in enumerate(self.
_laser_wait_q)
108 if scan_interval[i][1] < newest_mech_time
and 109 scan_interval[i][0] > oldest_mech_time]
112 if scan_interval[i][1] >= newest_mech_time]
133 scan_end = scan_msg.header.stamp + rostime.Duration().from_seconds(len(scan_msg.ranges)*scan_msg.time_increment)
134 mech_before = [x
for x
in mech_q
if x.header.stamp < scan_msg.header.stamp][-1]
135 mech_after = [x
for x
in mech_q
if x.header.stamp > scan_end][0]
138 ind = [x.name
for x
in mech_before.joint_states].index(
'laser_tilt_mount_joint')
139 pos_before = mech_before.joint_states[ind].position
140 time_before= mech_before.header.stamp
143 ind = [x.name
for x
in mech_after.joint_states].index(
'laser_tilt_mount_joint')
144 pos_after = mech_after.joint_states[ind].position
145 time_after= mech_after.header.stamp
147 elapsed = (time_after - time_before).to_seconds()
153 key_rays = [0, len(scan_msg.ranges)-1]
154 time_during = [ scan_msg.header.stamp
155 + rostime.Duration().from_seconds(scan_msg.time_increment*x)
157 time_normalized = [ (x - time_before).to_seconds()/elapsed
for x
in time_during]
158 if any( [x > 1
for x
in time_normalized])
or any( [x < 0
for x
in time_normalized] ) :
159 print(
'Error computing normalized time')
160 pos_during = [ pos_before * (1-x) + pos_after * x
for x
in time_normalized ]
163 elem.pos = pos_during
171 if x.scan.header.stamp <= end
and 172 x.scan.header.stamp >= start]
182 latest_time = rostime.Time().from_seconds(0.0)
def __init__(self, req_callback, max_mech_len, max_laser_done_len, max_laser_wait_len)
def get_latest_done_scan_time(self)
def get_dense_cloud(self, start, end)
def process_interval_reqs(self)
def _process_pending(self, scan_msg, mech_q)
def add_mech_state(self, msg)
def add_interval_req(self, start, end)