ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version
    #!/usr/bin/env python

import roslib
import sys
import rospy
import cv2
import math, time
import numpy as np

from std_msgs.msg import String
from sensor_msgs.msg import Image
from geometry_msgs.msg import Point
from cv_bridge import CvBridge, CvBridgeError


class image_converter_depth :
    def is_detected(self):
            return(time.time() - self._time_detected < 1.0)



    def __init__(self):

        self._t0 = time.time()
        self.obj_point = Point()

        self.blob_x         = 0.0
        self.blob_y         = 0.0
        self._time_detected = 0.0

        self.blob_sub = rospy.Subsciber("blob/point_blob",Point, self.update_blob)
        rospy.loginfo("Subsciber to blob point set")
        self.image_pub = rospy.Publisher("Depth_image",Image)
        rospy.loginfo("Publisher with circle in  depth image ")
        self.obj_pub = rospy.Publisher("blob/obj_point",Point)
        self.bridege = CVBridge()
        self.image_sub = rospy.Subsciber("/kinect2/sd/image_depth",Image,self.callback)
        rospy.loginfo("Subsciber sd to depth image ")
    def update_blob(self,message):
        self.blob_x = message.x
        self.blob_y = message.y
        self._time_detected = time.time()

    def callback(self,data):
        try:
            cv_image=self.bridge.image_to_cv2(data,"mono16")
        except CVBridegeError as e :
            print(e)
            (rows,cols,channels)=cv_image.shape
            if ((int(rows/2))<int(self.blob_x)<(1920-int(rows/2))):
                if (int(cols/2)<int(self.blob_y)<1080-int(cols/2)):
                    x_depth = self.blob_x-(960-int(rows/2))
                    y_depth = self.blob_y-(540-int(cols/2))
                    self.obj_point.z = cv_image[x_depth,y_depth]
                    self.obj_pub.publish(self.obj_point)
    try:
        self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image,"mono16"))
    except CVBridegeError as e :
        print(e)



def main (args):
    ic = image_converter_depth()
    rospy.init("Get_Obj_Pos", anononymus=True)
    try:
        rospy.spin()
    except KeyboardInterrupt:
        print("Shutting down")
    cv2.destroyAllWindows()

if __name__ == '__main__':
    main(sys.argv)

but I have this error

rosrun Get_Obj_Pos Get_Pos.py 
  File "/home/finokkio/catkin_ws/src/Get_Obj_Pos/src/Get_Pos.py", line 41
    self.blob_y = message.y
                          ^
IndentationError: unindent does not match any outer indentation level