Das Verwenden der Kamera mit ROS ist erschreckend einfach:
Voraussetzungen
Man benötigt die ROS Library usb_cam (https://index.ros.org/p/usb_cam/github-ros-drivers-usb_cam/), die mit dem Befehl:
sudo apt install ros-<ros-distribution>-usb-cam
installiert werden muss.
Des weiteren muss noch opencv installiert sein:
pip install opencv-contrib-python
Und Los
Und schon kann es losgehen.
Starte den Master Controller mit:
roscore
Danach starte die Kamera auf dem Robot:
rosrun usb_cam usb_cam_node _pixel_format:=yuyv
Es muss keine USB Kamera sein. Die Raspberry Pi CSI Kamera geht natürlich auch.
Starte auf einem weiteren Rechner:
rosrun image_view image_view image:= /usb_cam/image_raw
Hier wird dann das Bild empfangen, welches die Roboter Kamera aufzeichnet:
Natürlich kann man nun noch etwas mit opencv und Python spielen.
Wichtig: Das Python Script muss als ausführbar markiert sein und es muss in der ersten Zeile den Interpreter (Python) angeben:
Beispiel Python Module
#!/usr/bin/env python
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge, CvBridgeError
import sys
bridge = CvBridge()
def image_callback(ros_image):
# print('got an image')
global bridge
#convert ros_image into an opencv-compatible image
try:
cv_image = bridge.imgmsg_to_cv2(ros_image, "bgr8")
except CvBridgeError as e:
print(e)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(cv_image,'Webcam with ROS & OpenCV!',(10,350), font, 1,(255,255,255),2,cv2.LINE_AA)
cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2GRAY) # Graustufen Bild
cv2.imshow("Image window", cv_image)
cv2.waitKey(3)
def main(args):
rospy.init_node('image_converter', anonymous=True)
image_sub = rospy.Subscriber("/usb_cam/image_raw",Image, image_callback)
try:
rospy.spin()
except KeyboardInterrupt:
print("Ende")
cv2.destroyAllWindows()
if __name__ == '__main__':
main(sys.argv)
Das Python Module startet man mit:
rosrun <packagename> <python_script_name>.py