WUT Velma robot API
publish_camera_frustum.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 
6 
7 # Copyright (c) 2017, Robot Control and Pattern Recognition Group,
8 # Institute of Control and Computation Engineering
9 # Warsaw University of Technology
10 #
11 # All rights reserved.
12 #
13 # Redistribution and use in source and binary forms, with or without
14 # modification, are permitted provided that the following conditions are met:
15 # * Redistributions of source code must retain the above copyright
16 # notice, this list of conditions and the following disclaimer.
17 # * Redistributions in binary form must reproduce the above copyright
18 # notice, this list of conditions and the following disclaimer in the
19 # documentation and/or other materials provided with the distribution.
20 # * Neither the name of the Warsaw University of Technology nor the
21 # names of its contributors may be used to endorse or promote products
22 # derived from this software without specific prior written permission.
23 #
24 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27 # DISCLAIMED. IN NO EVENT SHALL <COPYright HOLDER> BE LIABLE FOR ANY
28 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
31 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 #
35 # Author: Dawid Seredynski
36 #
37 
38 import roslib; roslib.load_manifest('rcprg_ros_utils')
39 
40 import rospy
41 import math
42 import PyKDL
43 
44 from rcprg_ros_utils import marker_publisher
45 
46 if __name__ == "__main__":
47 
48  rospy.init_node('publish_camera_frustum', anonymous=True)
49 
50  rospy.sleep(0.5)
51 
52  ros_parameter_names = [('horizontal_fov', float), ('aspect_w_h', float),
53  ('min_z', float), ('max_z', float), ('frame_id', str)]
54 
55  params = {}
56  for param_name, param_type in ros_parameter_names:
57  param_value_str = rospy.get_param('~{}'.format(param_name))
58  params[param_name] = (param_type)( param_value_str )
59 
60  pub = marker_publisher.MarkerPublisher('/camera_frustum')
61 
62  dx = math.tan(params['horizontal_fov']/2)
63  dy = dx/params['aspect_w_h']
64  min_z = params['min_z']
65  max_z = params['max_z']
66  frame_id = params['frame_id']
67  while not rospy.is_shutdown():
68  m_id = 0
69  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*min_z, dy*min_z, min_z), PyKDL.Vector(dx*max_z, dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
70  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*min_z, dy*min_z, min_z), PyKDL.Vector(-dx*max_z, dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
71  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*min_z, -dy*min_z, min_z), PyKDL.Vector(-dx*max_z, -dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
72  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*min_z, -dy*min_z, min_z), PyKDL.Vector(dx*max_z, -dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
73 
74  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*min_z, dy*min_z, min_z), PyKDL.Vector(-dx*min_z, dy*min_z, min_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
75  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*min_z, dy*min_z, min_z), PyKDL.Vector(-dx*min_z, -dy*min_z, min_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
76  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*min_z, -dy*min_z, min_z), PyKDL.Vector(dx*min_z, -dy*min_z, min_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
77  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*min_z, -dy*min_z, min_z), PyKDL.Vector(dx*min_z, dy*min_z, min_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
78 
79  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*max_z, dy*max_z, max_z), PyKDL.Vector(-dx*max_z, dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
80  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*max_z, dy*max_z, max_z), PyKDL.Vector(-dx*max_z, -dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
81  m_id = pub.publishVectorMarker(PyKDL.Vector(-dx*max_z, -dy*max_z, max_z), PyKDL.Vector(dx*max_z, -dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
82  m_id = pub.publishVectorMarker(PyKDL.Vector(dx*max_z, -dy*max_z, max_z), PyKDL.Vector(dx*max_z, dy*max_z, max_z), m_id, 1, 0, 0, frame=frame_id, namespace=frame_id, scale=0.01)
83  try:
84  rospy.sleep(0.1)
85  except:
86  break