integrating ROS2

asked 2023-07-21 15:54:13 -0500

zahidr gravatar image

I am working on a pan and tilt project using Humble on Raspberry pi 4 & Raspbian. I have managed to successfully migrate https://bitbucket.org/theconstructcor... from ROS1 to ROS2.

Now I am trying adapt to this code and integrate ROS2 to work with the /pan_and_tilt_server.py KeyboardPanTilt.py https://core-electronics.com.au/guide...

Can you please have a look and let me know if there is a chance it may work or are any obvious errors caused by misunderstanding(s) of ROS2 concepts.

Thanks Zahid

import rclpy from rclpy.node import Node

from tutorial_interfaces.msg import PanAndTilt

importing required libraries

import curses import os import time import picamera

class KeyBoardPressPanTilt(Node):

def __init__(self):
    super().__init__('KeyBoard_Press_PanTilt')
    self.publisher_ = self.create_publisher(PanAndTilt, 'pan_and_tilt', 10)
    # Initialise camera
    self.camera = picamera.PiCamera()
    self.camera.resolution = (1024, 768)
    self.camera.start_preview(fullscreen=False, window = (100,20,640,480))

    # flipping the camera for so its not upside down
    self.camera.vflip = True
    self.camera.hflip = True

def ProcessActiveKeyBoardPress(self):

            # Process active key presses:
            # -- Letter p will take a picture and store file name image[picNum].jpg,
            #     where [number] increments over a picture taking session.
            # -- Arrow keys will control the Pan Tilt Camera (deltaPan/deltaTilt Degree angles)
            # -- Letter q will quit the application,       
    a = 0.0
    b = 0.0 

    # initialise pan and tilt positions and process increments driven by arrow keys
    # set start up serrvo positions
    msg = PanAndTilt()
    msg.pan = a
    msg.tilt = b
    self.publisher_.publish(msg)


    # Set up key mappings and curses for arrow key responses
    screen = curses.initscr() # get the curses screen window
    curses.noecho()           # turn off input echoing
    curses.cbreak()           # respond to keys immediately (don't wait for enter)
    screen.keypad(True)       # map arrow keys to special values

            # set arrow key delta
    deltaPan=1.0
    deltaTilt=1.0

    picNum = 1  # Initialise picture number


    try:
        while True:
            char = self.screen.getch()
            if char == ord('q'):
                #if q is pressed quit
                break
            if char == ord('p'):
                #if p is pressed take a photo!
                self.camera.capture('image%s.jpg' % self.picNum)
                picNum = picNum   1
                screen.addstr(0, 0, 'picture taken! ')
            elif char == curses.KEY_RIGHT:
                screen.addstr(0, 0, 'right ')
                if (b - deltaTilt ) > -90:
                    b = b - deltaTilt
               msg.pan = b
               self.publisher_.publish(msg)
               time.sleep(0.005)
            elif char == curses.KEY_LEFT:
                screen.addstr(0, 0, 'left ')
                if (b   deltaTilt) < 90:
                    b = b   deltaTilt
               msg.pan = b
               self.publisher_.publish(msg)
               time.sleep(0.005)
            elif char == curses.KEY_DOWN:
                screen.addstr(0, 0, 'down ')
                if (a   deltaPan) < 90:
                    a = a   deltaPan
                msg.tilt = a
                self.publisher_.publish(msg)    
                time.sleep(0.005)
            elif char == curses.KEY_UP:
                screen.addstr(0, 0, 'up ')
                if (a - deltaPan) > -90:    
                    a = a - deltaPan
                msg.tilt = a
                self.publisher_.publish(msg)        
                time.sleep(0.005)

    finally:
        # shut down cleanly
        curses.nocbreak(); screen.keypad(0); curses.echo()
        curses.endwin()

def main(args=None): rclpy.init(args=args)

node = KeyBoardPressPanTilt()
node.get_logger().info("Starting KeyBoard Press node, shut down with CTRL-C")
rclpy.spin(node)
ProcessActiveKeyBoardPress()
node ...
(more)
edit retag flag offensive close merge delete