【问题标题】:cant see point marker on rviz ros在rviz ros上看不到点标记
【发布时间】:2022-07-19 13:46:15
【问题描述】:

我的目标是用相机跟随一个绿球,并在视图中显示这个球的运动。为此,我用标记标记了球的中间,但在 rviz 中看不到它。代码或 rviz 没有给出任何错误,我能够可视化 /webcam 主题但标记不显示。可能是什么问题呢?我正在使用ros neotic 谢谢

'''

#!/usr/bin/env python3
import rospy
from sensor_msgs.msg import Image
import cv2
import numpy as np
from cv_bridge import CvBridge, CvBridgeError
import sys

from collections import deque
from imutils.video import VideoStream
from visualization_msgs.msg import Marker, MarkerArray
from geometry_msgs.msg import Point

import gc
import argparse
import time
import imutils


def camdet():
    bridge = CvBridge()
    ap = argparse.ArgumentParser()
    ap.add_argument("-v", "--video", help="Path to the (optional) video file")
    ap.add_argument("-b", "--buffer", default=64, type=int, help="max buffer size")
    args = vars(ap.parse_args())
    greenLower = (29, 86, 6)
    greenUpper = (64, 255, 255)
    pts = deque(maxlen=args["buffer"])

    if not args.get("video", False):
        vs = VideoStream(src=0).start()
    else:
        vs = cv2.VideoCapture(args["video"])

    time.sleep(2.0)

    rospy.init_node("object_detection",anonymous=True)

    while True:
        frame = vs.read()
        frame = frame[1] if args.get("video", False) else frame
        if frame is None:
            break

        frame = imutils.resize(frame, width=600)
        blurred = cv2.GaussianBlur(frame, (11, 11), 0)
        hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)

        mask = cv2.inRange(hsv, greenLower, greenUpper)
        mask = cv2.erode(mask, None, iterations=2)
        mask = cv2.dilate(mask, None, iterations=2)

        cnts = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
        cnts = imutils.grab_contours(cnts)
        center = None
        v = 0
        if len(cnts) > 0:
            c = max(cnts, key=cv2.contourArea)
            ((x, y), radius) = cv2.minEnclosingCircle(c)
            
            
            M = cv2.moments(c)
           
            center = (int(M['m10']/M['m00']), int(M['m01']/M['m00']))


            if radius > 10:
                cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
                cv2.circle(frame, center, 5, (0, 0, 255), -1)
                v += 1
        pts.append(center)
        
              
        marker = Marker()
        marker.header.frame_id = "base_link"
        marker.ns = "marked"
        marker.id = 0
        marker.type = marker.POINTS
        marker.action = marker.ADD
        marker.scale.x = 1
        marker.scale.y = 1
        marker.scale.z = 0.1
        marker.pose.orientation.x = 0
        marker.pose.orientation.y = 0
        marker.pose.orientation.z= 0
        marker.pose.orientation.w = 1


            
        points = [0,0]
        for i in  range(v):
            p = Point()
            p.x = int(M['m10']/M['m00']) 
            p.y = int(M['m01']/M['m00'])

            points.clear()
            points.append(p)
            marker.points = points
            print(marker.points)
            marker.pose.position.x = int(M['m10']/M['m00']) 
            marker.pose.position.y = int(M['m01']/M['m00']) 
        
        marker.color.a = 0.4
        marker.color.r = 0.9
        marker.color.g = 0.1
        marker.color.b = 0.2
    
        marker.lifetime = rospy.Duration()
     
        img_pub = rospy.Publisher('webcam/image_raw', Image, queue_size=10)
        rate = rospy.Rate(10)
        msg = bridge.cv2_to_imgmsg(frame, encoding="bgr8")
        img_pub.publish(msg)
        marker_pub = rospy.Publisher("marker", Marker, queue_size = 100)   
        marker_pub.publish(marker)
        
    
        
        cv2.imshow("Frame", frame)

        

        key = cv2.waitKey(1) & 0xFF

        if key == ord('q'):
            break



    if not args.get("video", False):
        vs.stop()
    else:
        vs.release()

    cv2.destroyAllWindows()
    
 
    
 
if __name__ == '__main__':
    try:
        camdet()
    except rospy.ROSInterruptException:
        pass
        
'''

【问题讨论】:

  • 请记住,Stack Overflow 不是您最喜欢的 Python 论坛,而是所有与编程相关的问题的问答网站。因此,请始终包含您正在编程的语言的标签,这样熟悉该语言的其他用户可以更轻松地找到您的问题。

标签: python object-detection ros markers


【解决方案1】:

Gzd.

你解决了吗,ROS WIKI 说“不要忘记设置 color.a = 1 否则你的标记将不可见!”。

谢谢

【讨论】:

猜你喜欢
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
  • 2023-02-21
相关资源
最近更新 更多