From d0723bf756a3a565ae3a3a91d2e6ef886ec8f02a Mon Sep 17 00:00:00 2001 From: Garima-tl <130911547+Garima-tl@users.noreply.github.com> Date: Mon, 5 Jun 2023 00:10:01 +0530 Subject: [PATCH 1/2] submission of garima,220396 --- src/.vscode/c_cpp_properties.json | 20 + src/.vscode/settings.json | 8 + .../.vscode/c_cpp_properties.json | 20 + src/image_processes/.vscode/settings.json | 12 + .../image_processes/__init__.py | 0 .../image_processes/import cv2.py | 38 ++ .../image_processes/sample.jpg | Bin 0 -> 96419 bytes .../image_processes/webcam_display.py | 176 ++++++++ .../image_processes/webcam_publisher.py | 223 ++++++++++ .../image_processes/webcam_subscriber.py | 250 +++++++++++ src/image_processes/package.xml | 26 ++ src/image_processes/resource/image_processes | 0 src/image_processes/setup.cfg | 4 + src/image_processes/setup.py | 28 ++ src/image_processes/test/test_copyright.py | 25 ++ src/image_processes/test/test_flake8.py | 25 ++ src/image_processes/test/test_pep257.py | 23 + src/install/.colcon_install_layout | 1 + src/install/COLCON_IGNORE | 0 src/install/_local_setup_util_ps1.py | 404 ++++++++++++++++++ src/install/_local_setup_util_sh.py | 404 ++++++++++++++++++ .../resource_index/packages/image_processes | 0 .../colcon-core/packages/image_processes | 1 + .../share/image_processes/hook/pythonpath.dsv | 1 + .../share/image_processes/hook/pythonpath.ps1 | 3 + .../share/image_processes/hook/pythonpath.sh | 3 + .../share/image_processes/package.bash | 31 ++ .../share/image_processes/package.dsv | 3 + .../share/image_processes/package.ps1 | 115 +++++ .../share/image_processes/package.sh | 86 ++++ .../share/image_processes/package.xml | 26 ++ .../share/image_processes/package.zsh | 42 ++ src/install/local_setup.bash | 107 +++++ src/install/local_setup.ps1 | 55 +++ src/install/local_setup.sh | 137 ++++++ src/install/local_setup.zsh | 120 ++++++ .../resource_index/packages/robot_controller | 0 .../colcon-core/packages/robot_controller | 1 + .../hook/ament_prefix_path.dsv | 1 + .../hook/ament_prefix_path.ps1 | 3 + .../hook/ament_prefix_path.sh | 3 + .../robot_controller/hook/pythonpath.dsv | 1 + .../robot_controller/hook/pythonpath.ps1 | 3 + .../share/robot_controller/hook/pythonpath.sh | 3 + .../share/robot_controller/package.bash | 31 ++ .../share/robot_controller/package.dsv | 6 + .../share/robot_controller/package.ps1 | 116 +++++ .../share/robot_controller/package.sh | 87 ++++ .../share/robot_controller/package.xml | 20 + .../share/robot_controller/package.zsh | 42 ++ src/install/setup.bash | 34 ++ src/install/setup.ps1 | 30 ++ src/install/setup.sh | 49 +++ src/install/setup.zsh | 34 ++ src/log/COLCON_IGNORE | 0 src/log/build_2023-05-25_14-03-54/events.log | 45 ++ .../build_2023-05-25_14-03-54/logger_all.log | 112 +++++ .../robot_controller/command.log | 2 + .../robot_controller/stderr.log | 2 + .../robot_controller/stdout.log | 31 ++ .../robot_controller/stdout_stderr.log | 33 ++ .../robot_controller/streams.log | 35 ++ src/log/build_2023-05-26_02-31-12/events.log | 35 ++ .../build_2023-05-26_02-31-12/logger_all.log | 112 +++++ .../robot_controller/command.log | 2 + .../robot_controller/stderr.log | 0 .../robot_controller/stdout.log | 22 + .../robot_controller/stdout_stderr.log | 22 + .../robot_controller/streams.log | 24 ++ src/log/build_2023-05-26_07-26-29/events.log | 50 +++ .../image_processes/command.log | 2 + .../image_processes/stderr.log | 0 .../image_processes/stdout.log | 37 ++ .../image_processes/stdout_stderr.log | 37 ++ .../image_processes/streams.log | 39 ++ .../build_2023-05-26_07-26-29/logger_all.log | 116 +++++ src/log/latest | 1 + src/log/latest_build | 1 + 78 files changed, 3641 insertions(+) create mode 100644 src/.vscode/c_cpp_properties.json create mode 100644 src/.vscode/settings.json create mode 100644 src/image_processes/.vscode/c_cpp_properties.json create mode 100644 src/image_processes/.vscode/settings.json create mode 100644 src/image_processes/image_processes/__init__.py create mode 100644 src/image_processes/image_processes/import cv2.py create mode 100644 src/image_processes/image_processes/sample.jpg create mode 100755 src/image_processes/image_processes/webcam_display.py create mode 100755 src/image_processes/image_processes/webcam_publisher.py create mode 100755 src/image_processes/image_processes/webcam_subscriber.py create mode 100644 src/image_processes/package.xml create mode 100644 src/image_processes/resource/image_processes create mode 100644 src/image_processes/setup.cfg create mode 100644 src/image_processes/setup.py create mode 100644 src/image_processes/test/test_copyright.py create mode 100644 src/image_processes/test/test_flake8.py create mode 100644 src/image_processes/test/test_pep257.py create mode 100644 src/install/.colcon_install_layout create mode 100644 src/install/COLCON_IGNORE create mode 100644 src/install/_local_setup_util_ps1.py create mode 100644 src/install/_local_setup_util_sh.py create mode 100644 src/install/image_processes/share/ament_index/resource_index/packages/image_processes create mode 100644 src/install/image_processes/share/colcon-core/packages/image_processes create mode 100644 src/install/image_processes/share/image_processes/hook/pythonpath.dsv create mode 100644 src/install/image_processes/share/image_processes/hook/pythonpath.ps1 create mode 100644 src/install/image_processes/share/image_processes/hook/pythonpath.sh create mode 100644 src/install/image_processes/share/image_processes/package.bash create mode 100644 src/install/image_processes/share/image_processes/package.dsv create mode 100644 src/install/image_processes/share/image_processes/package.ps1 create mode 100644 src/install/image_processes/share/image_processes/package.sh create mode 100644 src/install/image_processes/share/image_processes/package.xml create mode 100644 src/install/image_processes/share/image_processes/package.zsh create mode 100644 src/install/local_setup.bash create mode 100644 src/install/local_setup.ps1 create mode 100644 src/install/local_setup.sh create mode 100644 src/install/local_setup.zsh create mode 100644 src/install/robot_controller/share/ament_index/resource_index/packages/robot_controller create mode 100644 src/install/robot_controller/share/colcon-core/packages/robot_controller create mode 100644 src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv create mode 100644 src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1 create mode 100644 src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh create mode 100644 src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv create mode 100644 src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1 create mode 100644 src/install/robot_controller/share/robot_controller/hook/pythonpath.sh create mode 100644 src/install/robot_controller/share/robot_controller/package.bash create mode 100644 src/install/robot_controller/share/robot_controller/package.dsv create mode 100644 src/install/robot_controller/share/robot_controller/package.ps1 create mode 100644 src/install/robot_controller/share/robot_controller/package.sh create mode 100644 src/install/robot_controller/share/robot_controller/package.xml create mode 100644 src/install/robot_controller/share/robot_controller/package.zsh create mode 100644 src/install/setup.bash create mode 100644 src/install/setup.ps1 create mode 100644 src/install/setup.sh create mode 100644 src/install/setup.zsh create mode 100644 src/log/COLCON_IGNORE create mode 100644 src/log/build_2023-05-25_14-03-54/events.log create mode 100644 src/log/build_2023-05-25_14-03-54/logger_all.log create mode 100644 src/log/build_2023-05-25_14-03-54/robot_controller/command.log create mode 100644 src/log/build_2023-05-25_14-03-54/robot_controller/stderr.log create mode 100644 src/log/build_2023-05-25_14-03-54/robot_controller/stdout.log create mode 100644 src/log/build_2023-05-25_14-03-54/robot_controller/stdout_stderr.log create mode 100644 src/log/build_2023-05-25_14-03-54/robot_controller/streams.log create mode 100644 src/log/build_2023-05-26_02-31-12/events.log create mode 100644 src/log/build_2023-05-26_02-31-12/logger_all.log create mode 100644 src/log/build_2023-05-26_02-31-12/robot_controller/command.log create mode 100644 src/log/build_2023-05-26_02-31-12/robot_controller/stderr.log create mode 100644 src/log/build_2023-05-26_02-31-12/robot_controller/stdout.log create mode 100644 src/log/build_2023-05-26_02-31-12/robot_controller/stdout_stderr.log create mode 100644 src/log/build_2023-05-26_02-31-12/robot_controller/streams.log create mode 100644 src/log/build_2023-05-26_07-26-29/events.log create mode 100644 src/log/build_2023-05-26_07-26-29/image_processes/command.log create mode 100644 src/log/build_2023-05-26_07-26-29/image_processes/stderr.log create mode 100644 src/log/build_2023-05-26_07-26-29/image_processes/stdout.log create mode 100644 src/log/build_2023-05-26_07-26-29/image_processes/stdout_stderr.log create mode 100644 src/log/build_2023-05-26_07-26-29/image_processes/streams.log create mode 100644 src/log/build_2023-05-26_07-26-29/logger_all.log create mode 120000 src/log/latest create mode 120000 src/log/latest_build diff --git a/src/.vscode/c_cpp_properties.json b/src/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..bb2edc9 --- /dev/null +++ b/src/.vscode/c_cpp_properties.json @@ -0,0 +1,20 @@ +{ + "configurations": [ + { + "browse": { + "databaseFilename": "${default}", + "limitSymbolsToIncludedHeaders": false + }, + "includePath": [ + "/opt/ros/rolling/include/**", + "/usr/include/**" + ], + "name": "ROS", + "intelliSenseMode": "gcc-x64", + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu11", + "cppStandard": "c++14" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 0000000..7cfa496 --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "python.autoComplete.extraPaths": [ + "/opt/ros/rolling/lib/python3.10/site-packages" + ], + "python.analysis.extraPaths": [ + "/opt/ros/rolling/lib/python3.10/site-packages" + ] +} \ No newline at end of file diff --git a/src/image_processes/.vscode/c_cpp_properties.json b/src/image_processes/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..bb2edc9 --- /dev/null +++ b/src/image_processes/.vscode/c_cpp_properties.json @@ -0,0 +1,20 @@ +{ + "configurations": [ + { + "browse": { + "databaseFilename": "${default}", + "limitSymbolsToIncludedHeaders": false + }, + "includePath": [ + "/opt/ros/rolling/include/**", + "/usr/include/**" + ], + "name": "ROS", + "intelliSenseMode": "gcc-x64", + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu11", + "cppStandard": "c++14" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/src/image_processes/.vscode/settings.json b/src/image_processes/.vscode/settings.json new file mode 100644 index 0000000..f429ee4 --- /dev/null +++ b/src/image_processes/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "python.autoComplete.extraPaths": [ + "/home/garima/first_ws/install/robot_controller/lib/python3.10/site-packages", + "/home/garima/first_ws/install/image_processes/lib/python3.10/site-packages", + "/opt/ros/rolling/lib/python3.10/site-packages" + ], + "python.analysis.extraPaths": [ + "/home/garima/first_ws/install/robot_controller/lib/python3.10/site-packages", + "/home/garima/first_ws/install/image_processes/lib/python3.10/site-packages", + "/opt/ros/rolling/lib/python3.10/site-packages" + ] +} \ No newline at end of file diff --git a/src/image_processes/image_processes/__init__.py b/src/image_processes/image_processes/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/image_processes/image_processes/import cv2.py b/src/image_processes/image_processes/import cv2.py new file mode 100644 index 0000000..099106c --- /dev/null +++ b/src/image_processes/image_processes/import cv2.py @@ -0,0 +1,38 @@ +import cv2 +import pygame +import pygame.camera +pygame.camera.init() +camlist = pygame.camera.list_cameras() +if camlist : + cam=pygame.camera.Camera(camlist[0],(640,480)) + cam.start() + image = cam.get_image() + pygame.image.save(image,"filename.jpg") +else: + print("no") + +cam = cv2.VideoCapture(0) + +cv2.namedWindow("test") + +img_counter = 0 + +while True: + ret, frame = cam.read() + if not ret: + print("failed to grab frame") + break + cv2.imshow("test", frame) + + k = cv2.waitKey(1) + if k%256 == 27: + # ESC pressed + print("Escape hit, closing...") + break + elif k%256 == 32: + # SPACE pressed + img_name = "opencv_frame_{}.png".format(img_counter) + cv2.imwrite(img_name, frame) + print("{} written!".format(img_name)) + img_counter += 1 +cam.release() \ No newline at end of file diff --git a/src/image_processes/image_processes/sample.jpg b/src/image_processes/image_processes/sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..914ad1ee27dde15c0c477995d3029823914143ce GIT binary patch literal 96419 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 a0LKnYQyWbTwx4UZgB=@M2sixS!v6tAoKEln literal 0 HcmV?d00001 diff --git a/src/image_processes/image_processes/webcam_display.py b/src/image_processes/image_processes/webcam_display.py new file mode 100755 index 0000000..cd2a2df --- /dev/null +++ b/src/image_processes/image_processes/webcam_display.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +'''import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +import cv2 +from cv_bridge import CvBridge + +class node3(Node): + def __init__(self): + super().__init__('webcam_display') + self.subscription_ = self.create_subscription( + Image, + 'webcam_cropped', + self.display_image, + 10 + ) + self.bridge = CvBridge() + + def display_image(self, msg): + frame = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + cv2.imshow('Webcam Cropped', frame) + cv2.waitKey(1) + +def main(args=None): + rclpy.init(args=args) + webcam_display = node3() + rclpy.spin(webcam_display) + webcam_display.destroy_node() + rclpy.shutdown() + cv2.destroyAllWindows() + +if __name__ == '__main__': + main()''' + +'''import rospy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +def node3(): + rospy,init_node('node3',anonymous = True) + rospy.Subscriber('Webcam_cropped',Image,show_image_callback) + + rospy.spin() + +def show_image_callback(image_frame): + cv_bridge = CvBridge() + cv_image = cv_bridge.imgmsg_to_cv2(image_frame,desired_encoding='bgr8') + cv2.imshow('Webcam_cropped',cv_image) + cv2.waitkey(1) + +if __name__ = '__main__': + try: + node3() + except rospy.ROSInterruptException: + pass +''' + +'''import rclpy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +def node3(): + rclpy.init() + node = rclpy.create_node('node3') + + cv_bridge = CvBridge() + + def show_image_callback(image_frame): + cv_image = cv_bridge.imgmsg_to_cv2(image_frame, desired_encoding='bgr8') + cv2.imshow('Webcam_cropped', cv_image) + cv2.waitKey(1) + + subscription = node.create_subscription(Image, 'Webcam_cropped', show_image_callback, 10) + + rclpy.spin(node) + + node.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + try: + node3() + except KeyboardInterrupt: + pass + ''' + +#!/usr/bin/env python3 +#!/usr/bin/env python3 + +'''import os +import sys +import cv2 +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge + +class ImageViewer(Node): + def __init__(self): + super().__init__('image_viewer') + self.subscription = self.create_subscription( + Image, + 'webcam_cropped', + self.image_callback, + 10 + ) + self.subscription # prevent unused variable warning + self.bridge = CvBridge() + + def image_callback(self, msg): + try: + # Convert the ROS Image message to an OpenCV image + image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + except Exception as e: + self.get_logger().error('Failed to convert image: {}'.format(e)) + return + + # Display the image in a window + cv2.imshow('Webcam Cropped', image) + cv2.waitKey(1) + +def main(args=None): + rclpy.init(args=args) + image_viewer = ImageViewer() + rclpy.spin(image_viewer) + cv2.destroyAllWindows() + rclpy.shutdown() + +if __name__ == '__main__': + main() +''' + +#!/usr/bin/env python + +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +class ImageViewer(Node): + def __init__(self): + super().__init__('image_viewer') + self.subscription = self.create_subscription( + Image, + 'cropped_img', + self.image_callback, + 10 + ) + self.bridge = CvBridge() + + def image_callback(self, msg): + # Convert the ROS Image message to a CV image + cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + + # Display the image + cv2.imshow('Cropped Image', cv_image) + cv2.waitKey(1) + +def main(args=None): + rclpy.init(args=args) + image_viewer = ImageViewer() + try: + rclpy.spin(image_viewer) + except KeyboardInterrupt: + pass + + # Destroy the OpenCV windows and clean up + cv2.destroyAllWindows() + image_viewer.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() diff --git a/src/image_processes/image_processes/webcam_publisher.py b/src/image_processes/image_processes/webcam_publisher.py new file mode 100755 index 0000000..ccdbe3c --- /dev/null +++ b/src/image_processes/image_processes/webcam_publisher.py @@ -0,0 +1,223 @@ +#!/usr/bin/env python3 +'''from cv2 import IMWRITE_JPEG_OPTIMIZE, destroyWindow, imshow, imwrite, waitKey +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + + +class WebcamPublisher(Node): + def __init__(self): + super().__init__('webcam_publisher') + self.publisher_ = self.create_publisher(Image, 'webcam_img', 10) + self.timer_ = self.create_timer(0.1, self.publish_frame) + self.cv_bridge = CvBridge() + self.capture = cv2.VideoCapture(0) + + def publish_frame(self): + ret, frame = self.capture.read() + if ret: + # Convert the frame to a ROS2 Image message + msg = self.cv_bridge.cv2_to_imgmsg(frame) + + # Publish the image frame + self.publisher_.publish(msg) + + + + + +def main(args=None): + rclpy.init(args=args) + webcam_publisher = WebcamPublisher() + rclpy.spin(webcam_publisher) + webcam_publisher.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() + + ''' +'''import rospy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +def node1(): + rospy.init('node1',anonymous=True) + Srate = rospy.Rate(10) + pub = rospy.Publisher('Webcam_img',Image,queue_size=10) + bridge = CvBridge() + + while not rospy.is_shoutdown(): + image_frame = capture_image_from_webcam() + + ros_image = bridge.cv2_to_imgmsg(image_frame,encoding='bgr8') + + pub.publish(ros_image) + rate.sleep() + +def capture_image_from_webcam(): + cap=cv2.VideoCapture(0) + cv2.waitKey(0) + + if not cap.isOpened(): + print("failed to open the webcam") + return None + ret, frame = cap.read() + + cap.release() + + if not ret: + print("Failed to capture frame from the webcam") + return None + return frame + +if __name__ == '__main__': + try: + node1() + except rospy.ROSInterruptException: + pass + + + + + +import rclpy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +def node1(): + rclpy.init() + node = rclpy.create_node('node1') + rate = node.create_rate(10) + + publisher = node.create_publisher(Image, 'Webcam_img', 10) + bridge = CvBridge() + + while rclpy.ok(): + image_frame = capture_image_from_webcam() + + ros_image = bridge.cv2_to_imgmsg(image_frame, encoding='bgr8') + + publisher.publish(ros_image) + rate.sleep() + + node.destroy_node() + rclpy.shutdown() + +def capture_image_from_webcam(): + cap = cv2.VideoCapture(0) + cv2.waitKey(0) + + if not cap.isOpened(): + print("Failed to open the webcam") + return None + ret, frame = cap.read() + + cap.release() + + if not ret: + print("Failed to capture frame from the webcam") + return None + return frame + +if __name__ == '__main__': + try: + node1() + except KeyboardInterrupt: + pass +''' + +'''import os +import sys +import cv2 +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Video +from cv_bridge import CvBridge + +class ImagePublisher(Node): + def __init__(self): + super().__init__('image_publisher') + self.publisher_ = self.create_publisher(Video, 'webcam_img', 10) + self.bridge = CvBridge() + + def publish_image(self): + # Path to the image file + image_file = '/home/garima/first_ws/src/image_processes/image_processes/sample.jpg' + + # Load the image using OpenCV + image = cv2.imread(image_file) + if image is None: + self.get_logger().error('Failed to load image from file: {}'.format(image_file)) + sys.exit(1) + + # Convert the image to a ROS Image message + img_msg = self.bridge.cv2_to_imgmsg(image, encoding="bgr8") + + while True: + # Publish the image message + self.publisher_.publish(img_msg) + self.get_logger().info('Image published to webcam_img topic') + + # Sleep for a while before publishing the next image + #we rclpy.sleep(1.0) # 1 second + +def main(args=None): + rclpy.init(args=args) + image_publisher = ImagePublisher() + image_publisher.publish_image() + rclpy.shutdown() + +if __name__ == '__main__': + main() +''' + +#!/usr/bin/env python + +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +class VideoPublisher(Node): + def __init__(self): + super().__init__('video_publisher') + self.publisher_ = self.create_publisher(Image, 'webcam_img', 10) + timer_period = 0.1 # seconds + self.timer = self.create_timer(timer_period, self.timer_callback) + self.bridge = CvBridge() + self.video = cv2.VideoCapture('/home/garima/Downloads/sample.mp4') + + def timer_callback(self): + ret, frame = self.video.read() + if not ret: + # If the video is over, loop back to the beginning + self.video.set(cv2.CAP_PROP_POS_FRAMES, 0) + ret, frame = self.video.read() + if not ret: + # If the video still cannot be read, stop publishing + self.get_logger().info('Video cannot be read') + self.timer.cancel() + return + + # Convert the frame to a ROS Image message + image_msg = self.bridge.cv2_to_imgmsg(frame, encoding='bgr8') + + # Publish the image message + self.publisher_.publish(image_msg) + self.get_logger().info('Published image') + +def main(args=None): + rclpy.init(args=args) + video_publisher = VideoPublisher() + rclpy.spin(video_publisher) + video_publisher.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() diff --git a/src/image_processes/image_processes/webcam_subscriber.py b/src/image_processes/image_processes/webcam_subscriber.py new file mode 100755 index 0000000..45a1b1b --- /dev/null +++ b/src/image_processes/image_processes/webcam_subscriber.py @@ -0,0 +1,250 @@ +#!/usr/bin/env python3 +'''import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +import cv2 +from cv_bridge import CvBridge + +class node2(Node): + def __init__(self): + super().__init__('webcam_subscriber') + self.subscription_ = self.create_subscription( + Image, + 'Webcam_img', + self.process_image, + 10 + ) + self.publisher_ = self.create_publisher(Image, 'webcam_cropped', 10) + self.bridge = CvBridge() + + def process_image(self, msg): + frame = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + height, width, _ = frame.shape + crop_width = int(width * 0.3) + crop_height = int(height * 0.3) + cropped_frame = frame[crop_height:-crop_height, crop_width:-crop_width] + + cropped_msg = self.bridge.cv2_to_imgmsg(cropped_frame, encoding='bgr8') + self.publisher_.publish(cropped_msg) + +def main(args=None): + rclpy.init(args=args) + webcam_subscriber = node2() + rclpy.spin(webcam_subscriber) + webcam_subscriber.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() + ''' + +'''import rospy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 +pub = rospy.Publisher('Webcam_cropped',Image ,queue_size=10) +def node2(): + rospy.init_node('node2',anonymous=True) + rate = rospy.Rate(10) + + rospy.Subscriber('Webcam_img',Image,process_image_callback) + + while not rospy.is_shoutdown(): + rate.sleep() + +def process_image_callback(image_frame): + cv_bridge = CvBridge() + cv_image = cv_bridge.imgmsg_to_cv2(image_frame,desired_encoding='bgr8') + + height,width = cv_image.shape[:2] + new_width = int(width*0.7) + new_height = int(height*0.7) + start_x = int((width-new_width)/2) + start_y = int((height-new_height)/2) + cropped_image - cv_bridge[start_y:start_y + new_height , start_x = start_x + new_width] + image_frame = cv_bridge.cv2_to_imgmsg(cropped_image,encoding = 'bgr8') + + pub.publish(image_frame) + if __name__ = '__main__': + try: + node2() + + + except rospy.ROSInterruptException: + pass''' + +'''import rclpy +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 + +def node2(): + rclpy.init() + node = rclpy.create_node('node2') + rate = node.create_rate(10) + + publisher = node.create_publisher(Image, 'Webcam_cropped', 10) + cv_bridge = CvBridge() + + def process_image_callback(image_frame): + cv_image = cv_bridge.imgmsg_to_cv2(image_frame, desired_encoding='bgr8') + + height, width = cv_image.shape[:2] + new_width = int(width * 0.7) + new_height = int(height * 0.7) + start_x = int((width - new_width) / 2) + start_y = int((height - new_height) / 2) + cropped_image = cv_image[start_y:start_y + new_height, start_x:start_x + new_width] + cropped_image_frame = cv_bridge.cv2_to_imgmsg(cropped_image, encoding='bgr8') + + publisher.publish(cropped_image_frame) + + subscription = node.create_subscription(Image, 'Webcam_img', process_image_callback, 10) + + while rclpy.ok(): + rclpy.spin_once(node) + rate.sleep() + + node.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + try: + node2() + except KeyboardInterrupt: + pass +''' +#!/usr/bin/env python3 + +'''import os +import sys +import cv2 +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge + +class ImageSubscriber(Node): + def __init__(self): + super().__init__('image_subscriber') + self.subscription = self.create_subscription( + Image, + 'webcam_img', + self.image_callback, + 10 + ) + self.subscription # prevent unused variable warning + self.publisher_ = self.create_publisher(Image, 'webcam_cropped', 10) + self.bridge = CvBridge() + + def image_callback(self, msg): + try: + # Convert the ROS Image message to an OpenCV image + image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + except Exception as e: + self.get_logger().error('Failed to convert image: {}'.format(e)) + return + + # Crop the image by 30% + height, width, _ = image.shape + crop_width = int(width * 0.3) + crop_height = int(height * 0.3) + cropped_image = image[crop_height:height-crop_height, crop_width:width-crop_width] + + try: + # Convert the cropped image back to a ROS Image message + cropped_msg = self.bridge.cv2_to_imgmsg(cropped_image, encoding='bgr8') + except Exception as e: + self.get_logger().error('Failed to convert cropped image: {}'.format(e)) + return + + # Publish the cropped image on the "webcam_cropped" topic + self.publisher_.publish(cropped_msg) + self.get_logger().info('Cropped image published to webcam_cropped topic') + +def main(args=None): + rclpy.init(args=args) + image_subscriber = ImageSubscriber() + rclpy.spin(image_subscriber) + rclpy.shutdown() + +if __name__ == '__main__': + main() + +''' + + + + + #!/usr/bin/env python + +import rclpy +from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 +import os + +class ImageCropper(Node): + def __init__(self): + super().__init__('image_cropper') + self.subscription = self.create_subscription( + Image, + 'webcam_img', + self.image_callback, + 10 + ) + self.publisher_ = self.create_publisher(Image, 'cropped_img', 10) + self.bridge = CvBridge() + self.screen_width = 800 # Specify the desired screen width + self.screen_height = 600 # Specify the desired screen height + self.crop_width = 100 # Specify the desired crop width in pixels + self.crop_height = 100 # Specify the desired crop height in pixels + + def image_callback(self, msg): + # Convert the ROS Image message to a CV image + cv_image = self.bridge.imgmsg_to_cv2(msg, desired_encoding='bgr8') + + # Get the original image dimensions + height, width, _ = cv_image.shape + + # Calculate the crop coordinates + x = int((width - self.crop_width) / 2) + y = int((height - self.crop_height) / 2) + + # Crop the image + cropped_image = cv_image[y:y+self.crop_height, x:x+self.crop_width] + + # Resize the cropped image to fit within the screen dimensions while preserving aspect ratio + aspect_ratio = float(self.screen_width) / self.screen_height + cropped_image = self.resize_image(cropped_image, self.screen_width, int(self.screen_width / aspect_ratio)) + + # Convert the resized image back to a ROS Image message + cropped_msg = self.bridge.cv2_to_imgmsg(cropped_image, encoding='bgr8') + + # Publish the cropped image + self.publisher_.publish(cropped_msg) + self.get_logger().info('Published cropped image') + + def resize_image(self, image, width, height): + # Resize the image while preserving aspect ratio + image_height, image_width, _ = image.shape + if image_width / image_height > width / height: + new_height = height + new_width = int(image_width * height / image_height) + else: + new_width = width + new_height = int(image_height * width / image_width) + resized_image = cv2.resize(image, (new_width, new_height)) + return resized_image + +def main(args=None): + rclpy.init(args=args) + os.environ['QT_QPA_PLATFORM'] = 'wayland' # Set the QT_QPA_PLATFORM to 'wayland' + image_cropper = ImageCropper() + rclpy.spin(image_cropper) + image_cropper.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + main() diff --git a/src/image_processes/package.xml b/src/image_processes/package.xml new file mode 100644 index 0000000..f931324 --- /dev/null +++ b/src/image_processes/package.xml @@ -0,0 +1,26 @@ + + + + image_processes + 0.0.0 + TODO: Package description + garima + TODO: License declaration + + +rclpy.node +sensor_msgs.msg +cv_bridge + + + rclpy + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/image_processes/resource/image_processes b/src/image_processes/resource/image_processes new file mode 100644 index 0000000..e69de29 diff --git a/src/image_processes/setup.cfg b/src/image_processes/setup.cfg new file mode 100644 index 0000000..3645f60 --- /dev/null +++ b/src/image_processes/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/image_processes +[install] +install_scripts=$base/lib/image_processes diff --git a/src/image_processes/setup.py b/src/image_processes/setup.py new file mode 100644 index 0000000..6a17277 --- /dev/null +++ b/src/image_processes/setup.py @@ -0,0 +1,28 @@ +from setuptools import find_packages, setup + +package_name = 'image_processes' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='garima', + maintainer_email='garima@todo.todo', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + "webcam_publisher = image_processes.webcam_publisher:main", + "webcam_subscriber = image_processes.webcam_subscriber:main", + "webcam_display = image_processes.webcam_display:main", + ], + }, +) diff --git a/src/image_processes/test/test_copyright.py b/src/image_processes/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/image_processes/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/image_processes/test/test_flake8.py b/src/image_processes/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/image_processes/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/image_processes/test/test_pep257.py b/src/image_processes/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/image_processes/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/install/.colcon_install_layout b/src/install/.colcon_install_layout new file mode 100644 index 0000000..3aad533 --- /dev/null +++ b/src/install/.colcon_install_layout @@ -0,0 +1 @@ +isolated diff --git a/src/install/COLCON_IGNORE b/src/install/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/src/install/_local_setup_util_ps1.py b/src/install/_local_setup_util_ps1.py new file mode 100644 index 0000000..98348ee --- /dev/null +++ b/src/install/_local_setup_util_ps1.py @@ -0,0 +1,404 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'Set-Item -Path "Env:{name}" -Value "{value}"' +FORMAT_STR_USE_ENV_VAR = '$env:{name}' +FORMAT_STR_INVOKE_SCRIPT = '_colcon_prefix_powershell_source_script "{script_path}"' +FORMAT_STR_REMOVE_LEADING_SEPARATOR = '' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = '' + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/src/install/_local_setup_util_sh.py b/src/install/_local_setup_util_sh.py new file mode 100644 index 0000000..35c017b --- /dev/null +++ b/src/install/_local_setup_util_sh.py @@ -0,0 +1,404 @@ +# Copyright 2016-2019 Dirk Thomas +# Licensed under the Apache License, Version 2.0 + +import argparse +from collections import OrderedDict +import os +from pathlib import Path +import sys + + +FORMAT_STR_COMMENT_LINE = '# {comment}' +FORMAT_STR_SET_ENV_VAR = 'export {name}="{value}"' +FORMAT_STR_USE_ENV_VAR = '${name}' +FORMAT_STR_INVOKE_SCRIPT = 'COLCON_CURRENT_PREFIX="{prefix}" _colcon_prefix_sh_source_script "{script_path}"' +FORMAT_STR_REMOVE_LEADING_SEPARATOR = 'if [ "$(echo -n ${name} | head -c 1)" = ":" ]; then export {name}=${{{name}#?}} ; fi' +FORMAT_STR_REMOVE_TRAILING_SEPARATOR = 'if [ "$(echo -n ${name} | tail -c 1)" = ":" ]; then export {name}=${{{name}%?}} ; fi' + +DSV_TYPE_APPEND_NON_DUPLICATE = 'append-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE = 'prepend-non-duplicate' +DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS = 'prepend-non-duplicate-if-exists' +DSV_TYPE_SET = 'set' +DSV_TYPE_SET_IF_UNSET = 'set-if-unset' +DSV_TYPE_SOURCE = 'source' + + +def main(argv=sys.argv[1:]): # noqa: D103 + parser = argparse.ArgumentParser( + description='Output shell commands for the packages in topological ' + 'order') + parser.add_argument( + 'primary_extension', + help='The file extension of the primary shell') + parser.add_argument( + 'additional_extension', nargs='?', + help='The additional file extension to be considered') + parser.add_argument( + '--merged-install', action='store_true', + help='All install prefixes are merged into a single location') + args = parser.parse_args(argv) + + packages = get_packages(Path(__file__).parent, args.merged_install) + + ordered_packages = order_packages(packages) + for pkg_name in ordered_packages: + if _include_comments(): + print( + FORMAT_STR_COMMENT_LINE.format_map( + {'comment': 'Package: ' + pkg_name})) + prefix = os.path.abspath(os.path.dirname(__file__)) + if not args.merged_install: + prefix = os.path.join(prefix, pkg_name) + for line in get_commands( + pkg_name, prefix, args.primary_extension, + args.additional_extension + ): + print(line) + + for line in _remove_ending_separators(): + print(line) + + +def get_packages(prefix_path, merged_install): + """ + Find packages based on colcon-specific files created during installation. + + :param Path prefix_path: The install prefix path of all packages + :param bool merged_install: The flag if the packages are all installed + directly in the prefix or if each package is installed in a subdirectory + named after the package + :returns: A mapping from the package name to the set of runtime + dependencies + :rtype: dict + """ + packages = {} + # since importing colcon_core isn't feasible here the following constant + # must match colcon_core.location.get_relative_package_index_path() + subdirectory = 'share/colcon-core/packages' + if merged_install: + # return if workspace is empty + if not (prefix_path / subdirectory).is_dir(): + return packages + # find all files in the subdirectory + for p in (prefix_path / subdirectory).iterdir(): + if not p.is_file(): + continue + if p.name.startswith('.'): + continue + add_package_runtime_dependencies(p, packages) + else: + # for each subdirectory look for the package specific file + for p in prefix_path.iterdir(): + if not p.is_dir(): + continue + if p.name.startswith('.'): + continue + p = p / subdirectory / p.name + if p.is_file(): + add_package_runtime_dependencies(p, packages) + + # remove unknown dependencies + pkg_names = set(packages.keys()) + for k in packages.keys(): + packages[k] = {d for d in packages[k] if d in pkg_names} + + return packages + + +def add_package_runtime_dependencies(path, packages): + """ + Check the path and if it exists extract the packages runtime dependencies. + + :param Path path: The resource file containing the runtime dependencies + :param dict packages: A mapping from package names to the sets of runtime + dependencies to add to + """ + content = path.read_text() + dependencies = set(content.split(os.pathsep) if content else []) + packages[path.name] = dependencies + + +def order_packages(packages): + """ + Order packages topologically. + + :param dict packages: A mapping from package name to the set of runtime + dependencies + :returns: The package names + :rtype: list + """ + # select packages with no dependencies in alphabetical order + to_be_ordered = list(packages.keys()) + ordered = [] + while to_be_ordered: + pkg_names_without_deps = [ + name for name in to_be_ordered if not packages[name]] + if not pkg_names_without_deps: + reduce_cycle_set(packages) + raise RuntimeError( + 'Circular dependency between: ' + ', '.join(sorted(packages))) + pkg_names_without_deps.sort() + pkg_name = pkg_names_without_deps[0] + to_be_ordered.remove(pkg_name) + ordered.append(pkg_name) + # remove item from dependency lists + for k in list(packages.keys()): + if pkg_name in packages[k]: + packages[k].remove(pkg_name) + return ordered + + +def reduce_cycle_set(packages): + """ + Reduce the set of packages to the ones part of the circular dependency. + + :param dict packages: A mapping from package name to the set of runtime + dependencies which is modified in place + """ + last_depended = None + while len(packages) > 0: + # get all remaining dependencies + depended = set() + for pkg_name, dependencies in packages.items(): + depended = depended.union(dependencies) + # remove all packages which are not dependent on + for name in list(packages.keys()): + if name not in depended: + del packages[name] + if last_depended: + # if remaining packages haven't changed return them + if last_depended == depended: + return packages.keys() + # otherwise reduce again + last_depended = depended + + +def _include_comments(): + # skipping comment lines when COLCON_TRACE is not set speeds up the + # processing especially on Windows + return bool(os.environ.get('COLCON_TRACE')) + + +def get_commands(pkg_name, prefix, primary_extension, additional_extension): + commands = [] + package_dsv_path = os.path.join(prefix, 'share', pkg_name, 'package.dsv') + if os.path.exists(package_dsv_path): + commands += process_dsv_file( + package_dsv_path, prefix, primary_extension, additional_extension) + return commands + + +def process_dsv_file( + dsv_path, prefix, primary_extension=None, additional_extension=None +): + commands = [] + if _include_comments(): + commands.append(FORMAT_STR_COMMENT_LINE.format_map({'comment': dsv_path})) + with open(dsv_path, 'r') as h: + content = h.read() + lines = content.splitlines() + + basenames = OrderedDict() + for i, line in enumerate(lines): + # skip over empty or whitespace-only lines + if not line.strip(): + continue + try: + type_, remainder = line.split(';', 1) + except ValueError: + raise RuntimeError( + "Line %d in '%s' doesn't contain a semicolon separating the " + 'type from the arguments' % (i + 1, dsv_path)) + if type_ != DSV_TYPE_SOURCE: + # handle non-source lines + try: + commands += handle_dsv_types_except_source( + type_, remainder, prefix) + except RuntimeError as e: + raise RuntimeError( + "Line %d in '%s' %s" % (i + 1, dsv_path, e)) from e + else: + # group remaining source lines by basename + path_without_ext, ext = os.path.splitext(remainder) + if path_without_ext not in basenames: + basenames[path_without_ext] = set() + assert ext.startswith('.') + ext = ext[1:] + if ext in (primary_extension, additional_extension): + basenames[path_without_ext].add(ext) + + # add the dsv extension to each basename if the file exists + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if os.path.exists(basename + '.dsv'): + extensions.add('dsv') + + for basename, extensions in basenames.items(): + if not os.path.isabs(basename): + basename = os.path.join(prefix, basename) + if 'dsv' in extensions: + # process dsv files recursively + commands += process_dsv_file( + basename + '.dsv', prefix, primary_extension=primary_extension, + additional_extension=additional_extension) + elif primary_extension in extensions and len(extensions) == 1: + # source primary-only files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + primary_extension})] + elif additional_extension in extensions: + # source non-primary files + commands += [ + FORMAT_STR_INVOKE_SCRIPT.format_map({ + 'prefix': prefix, + 'script_path': basename + '.' + additional_extension})] + + return commands + + +def handle_dsv_types_except_source(type_, remainder, prefix): + commands = [] + if type_ in (DSV_TYPE_SET, DSV_TYPE_SET_IF_UNSET): + try: + env_name, value = remainder.split(';', 1) + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the value') + try_prefixed_value = os.path.join(prefix, value) if value else prefix + if os.path.exists(try_prefixed_value): + value = try_prefixed_value + if type_ == DSV_TYPE_SET: + commands += _set(env_name, value) + elif type_ == DSV_TYPE_SET_IF_UNSET: + commands += _set_if_unset(env_name, value) + else: + assert False + elif type_ in ( + DSV_TYPE_APPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE, + DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS + ): + try: + env_name_and_values = remainder.split(';') + except ValueError: + raise RuntimeError( + "doesn't contain a semicolon separating the environment name " + 'from the values') + env_name = env_name_and_values[0] + values = env_name_and_values[1:] + for value in values: + if not value: + value = prefix + elif not os.path.isabs(value): + value = os.path.join(prefix, value) + if ( + type_ == DSV_TYPE_PREPEND_NON_DUPLICATE_IF_EXISTS and + not os.path.exists(value) + ): + comment = f'skip extending {env_name} with not existing ' \ + f'path: {value}' + if _include_comments(): + commands.append( + FORMAT_STR_COMMENT_LINE.format_map({'comment': comment})) + elif type_ == DSV_TYPE_APPEND_NON_DUPLICATE: + commands += _append_unique_value(env_name, value) + else: + commands += _prepend_unique_value(env_name, value) + else: + raise RuntimeError( + 'contains an unknown environment hook type: ' + type_) + return commands + + +env_state = {} + + +def _append_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # append even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional leading separator + extend = FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + os.pathsep + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': extend + value}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +def _prepend_unique_value(name, value): + global env_state + if name not in env_state: + if os.environ.get(name): + env_state[name] = set(os.environ[name].split(os.pathsep)) + else: + env_state[name] = set() + # prepend even if the variable has not been set yet, in case a shell script sets the + # same variable without the knowledge of this Python script. + # later _remove_ending_separators() will cleanup any unintentional trailing separator + extend = os.pathsep + FORMAT_STR_USE_ENV_VAR.format_map({'name': name}) + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value + extend}) + if value not in env_state[name]: + env_state[name].add(value) + else: + if not _include_comments(): + return [] + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +# generate commands for removing prepended underscores +def _remove_ending_separators(): + # do nothing if the shell extension does not implement the logic + if FORMAT_STR_REMOVE_TRAILING_SEPARATOR is None: + return [] + + global env_state + commands = [] + for name in env_state: + # skip variables that already had values before this script started prepending + if name in os.environ: + continue + commands += [ + FORMAT_STR_REMOVE_LEADING_SEPARATOR.format_map({'name': name}), + FORMAT_STR_REMOVE_TRAILING_SEPARATOR.format_map({'name': name})] + return commands + + +def _set(name, value): + global env_state + env_state[name] = value + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + return [line] + + +def _set_if_unset(name, value): + global env_state + line = FORMAT_STR_SET_ENV_VAR.format_map( + {'name': name, 'value': value}) + if env_state.get(name, os.environ.get(name)): + line = FORMAT_STR_COMMENT_LINE.format_map({'comment': line}) + return [line] + + +if __name__ == '__main__': # pragma: no cover + try: + rc = main() + except RuntimeError as e: + print(str(e), file=sys.stderr) + rc = 1 + sys.exit(rc) diff --git a/src/install/image_processes/share/ament_index/resource_index/packages/image_processes b/src/install/image_processes/share/ament_index/resource_index/packages/image_processes new file mode 100644 index 0000000..e69de29 diff --git a/src/install/image_processes/share/colcon-core/packages/image_processes b/src/install/image_processes/share/colcon-core/packages/image_processes new file mode 100644 index 0000000..8b6d003 --- /dev/null +++ b/src/install/image_processes/share/colcon-core/packages/image_processes @@ -0,0 +1 @@ +setuptools \ No newline at end of file diff --git a/src/install/image_processes/share/image_processes/hook/pythonpath.dsv b/src/install/image_processes/share/image_processes/hook/pythonpath.dsv new file mode 100644 index 0000000..257067d --- /dev/null +++ b/src/install/image_processes/share/image_processes/hook/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.10/site-packages diff --git a/src/install/image_processes/share/image_processes/hook/pythonpath.ps1 b/src/install/image_processes/share/image_processes/hook/pythonpath.ps1 new file mode 100644 index 0000000..caffe83 --- /dev/null +++ b/src/install/image_processes/share/image_processes/hook/pythonpath.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.10/site-packages" diff --git a/src/install/image_processes/share/image_processes/hook/pythonpath.sh b/src/install/image_processes/share/image_processes/hook/pythonpath.sh new file mode 100644 index 0000000..660c348 --- /dev/null +++ b/src/install/image_processes/share/image_processes/hook/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.10/site-packages" diff --git a/src/install/image_processes/share/image_processes/package.bash b/src/install/image_processes/share/image_processes/package.bash new file mode 100644 index 0000000..76ecd21 --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.bash @@ -0,0 +1,31 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/image_processes/package.sh" + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/src/install/image_processes/share/image_processes/package.dsv b/src/install/image_processes/share/image_processes/package.dsv new file mode 100644 index 0000000..d970ced --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.dsv @@ -0,0 +1,3 @@ +source;share/image_processes/hook/pythonpath.ps1 +source;share/image_processes/hook/pythonpath.dsv +source;share/image_processes/hook/pythonpath.sh diff --git a/src/install/image_processes/share/image_processes/package.ps1 b/src/install/image_processes/share/image_processes/package.ps1 new file mode 100644 index 0000000..d5223ee --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.ps1 @@ -0,0 +1,115 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/image_processes/hook/pythonpath.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/src/install/image_processes/share/image_processes/package.sh b/src/install/image_processes/share/image_processes/package.sh new file mode 100644 index 0000000..4e4910b --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.sh @@ -0,0 +1,86 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/garima/first_ws/src/install/image_processes" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/image_processes/hook/pythonpath.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/src/install/image_processes/share/image_processes/package.xml b/src/install/image_processes/share/image_processes/package.xml new file mode 100644 index 0000000..4f2e226 --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.xml @@ -0,0 +1,26 @@ + + + + image_processes + 0.0.0 + TODO: Package description + garima + TODO: License declaration + +rclpy +rclpy.node +sensor_msgs.msg +cv_bridge + + + rclpy + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/install/image_processes/share/image_processes/package.zsh b/src/install/image_processes/share/image_processes/package.zsh new file mode 100644 index 0000000..61969cd --- /dev/null +++ b/src/install/image_processes/share/image_processes/package.zsh @@ -0,0 +1,42 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/image_processes/package.sh" +unset convert_zsh_to_array + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/src/install/local_setup.bash b/src/install/local_setup.bash new file mode 100644 index 0000000..efd5f8c --- /dev/null +++ b/src/install/local_setup.bash @@ -0,0 +1,107 @@ +# generated from colcon_bash/shell/template/prefix.bash.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +else + _colcon_prefix_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_bash_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_bash_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS="$_colcon_prefix_bash_prepend_unique_value_IFS" + unset _colcon_prefix_bash_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_bash_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_bash_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_bash_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh bash)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "Execute generated script:" + echo "<<<" + echo "${_colcon_ordered_commands}" + echo ">>>" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_bash_COLCON_CURRENT_PREFIX diff --git a/src/install/local_setup.ps1 b/src/install/local_setup.ps1 new file mode 100644 index 0000000..6f68c8d --- /dev/null +++ b/src/install/local_setup.ps1 @@ -0,0 +1,55 @@ +# generated from colcon_powershell/shell/template/prefix.ps1.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# check environment variable for custom Python executable +if ($env:COLCON_PYTHON_EXECUTABLE) { + if (!(Test-Path "$env:COLCON_PYTHON_EXECUTABLE" -PathType Leaf)) { + echo "error: COLCON_PYTHON_EXECUTABLE '$env:COLCON_PYTHON_EXECUTABLE' doesn't exist" + exit 1 + } + $_colcon_python_executable="$env:COLCON_PYTHON_EXECUTABLE" +} else { + # use the Python executable known at configure time + $_colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if (!(Test-Path "$_colcon_python_executable" -PathType Leaf)) { + if (!(Get-Command "python3" -ErrorAction SilentlyContinue)) { + echo "error: unable to find python3 executable" + exit 1 + } + $_colcon_python_executable="python3" + } +} + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_powershell_source_script { + param ( + $_colcon_prefix_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_powershell_source_script_param'" + } + . "$_colcon_prefix_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_powershell_source_script_param'" + } +} + +# get all commands in topological order +$_colcon_ordered_commands = & "$_colcon_python_executable" "$(Split-Path $PSCommandPath -Parent)/_local_setup_util_ps1.py" ps1 + +# execute all commands in topological order +if ($env:COLCON_TRACE) { + echo "Execute generated script:" + echo "<<<" + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Write-Output + echo ">>>" +} +if ($_colcon_ordered_commands) { + $_colcon_ordered_commands.Split([Environment]::NewLine, [StringSplitOptions]::RemoveEmptyEntries) | Invoke-Expression +} diff --git a/src/install/local_setup.sh b/src/install/local_setup.sh new file mode 100644 index 0000000..233da7c --- /dev/null +++ b/src/install/local_setup.sh @@ -0,0 +1,137 @@ +# generated from colcon_core/shell/template/prefix.sh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_sh_COLCON_CURRENT_PREFIX="/home/garima/first_ws/src/install" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX + return 1 + fi +else + _colcon_prefix_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_sh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_sh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + _contained_value="" + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + _contained_value=1 + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + if [ -z "$_contained_value" ]; then + if [ -n "$COLCON_TRACE" ]; then + if [ "$_all_values" = "$_value" ]; then + echo "export $_listname=$_value" + else + echo "export $_listname=$_value:\$$_listname" + fi + fi + fi + unset _contained_value + # restore the field separator + IFS="$_colcon_prefix_sh_prepend_unique_value_IFS" + unset _colcon_prefix_sh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_sh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_sh_prepend_unique_value + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_sh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "_colcon_prefix_sh_source_script() { + if [ -f \"\$1\" ]; then + if [ -n \"\$COLCON_TRACE\" ]; then + echo \"# . \\\"\$1\\\"\" + fi + . \"\$1\" + else + echo \"not found: \\\"\$1\\\"\" 1>&2 + fi + }" + echo "# Execute generated script:" + echo "# <<<" + echo "${_colcon_ordered_commands}" + echo "# >>>" + echo "unset _colcon_prefix_sh_source_script" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_sh_COLCON_CURRENT_PREFIX diff --git a/src/install/local_setup.zsh b/src/install/local_setup.zsh new file mode 100644 index 0000000..f7a8d90 --- /dev/null +++ b/src/install/local_setup.zsh @@ -0,0 +1,120 @@ +# generated from colcon_zsh/shell/template/prefix.zsh.em + +# This script extends the environment with all packages contained in this +# prefix path. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +else + _colcon_prefix_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +_colcon_prefix_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prefix_zsh_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prefix_zsh_prepend_unique_value_IFS="$IFS" + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set + _colcon_prefix_zsh_convert_to_array _values + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS="$_colcon_prefix_zsh_prepend_unique_value_IFS" + unset _colcon_prefix_zsh_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# add this prefix to the COLCON_PREFIX_PATH +_colcon_prefix_zsh_prepend_unique_value COLCON_PREFIX_PATH "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX" +unset _colcon_prefix_zsh_prepend_unique_value +unset _colcon_prefix_zsh_convert_to_array + +# check environment variable for custom Python executable +if [ -n "$COLCON_PYTHON_EXECUTABLE" ]; then + if [ ! -f "$COLCON_PYTHON_EXECUTABLE" ]; then + echo "error: COLCON_PYTHON_EXECUTABLE '$COLCON_PYTHON_EXECUTABLE' doesn't exist" + return 1 + fi + _colcon_python_executable="$COLCON_PYTHON_EXECUTABLE" +else + # try the Python executable known at configure time + _colcon_python_executable="/usr/bin/python3" + # if it doesn't exist try a fall back + if [ ! -f "$_colcon_python_executable" ]; then + if ! /usr/bin/env python3 --version > /dev/null 2> /dev/null; then + echo "error: unable to find python3 executable" + return 1 + fi + _colcon_python_executable=`/usr/bin/env python3 -c "import sys; print(sys.executable)"` + fi +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# get all commands in topological order +_colcon_ordered_commands="$($_colcon_python_executable "$_colcon_prefix_zsh_COLCON_CURRENT_PREFIX/_local_setup_util_sh.py" sh zsh)" +unset _colcon_python_executable +if [ -n "$COLCON_TRACE" ]; then + echo "Execute generated script:" + echo "<<<" + echo "${_colcon_ordered_commands}" + echo ">>>" +fi +eval "${_colcon_ordered_commands}" +unset _colcon_ordered_commands + +unset _colcon_prefix_sh_source_script + +unset _colcon_prefix_zsh_COLCON_CURRENT_PREFIX diff --git a/src/install/robot_controller/share/ament_index/resource_index/packages/robot_controller b/src/install/robot_controller/share/ament_index/resource_index/packages/robot_controller new file mode 100644 index 0000000..e69de29 diff --git a/src/install/robot_controller/share/colcon-core/packages/robot_controller b/src/install/robot_controller/share/colcon-core/packages/robot_controller new file mode 100644 index 0000000..aff3120 --- /dev/null +++ b/src/install/robot_controller/share/colcon-core/packages/robot_controller @@ -0,0 +1 @@ +rclpy \ No newline at end of file diff --git a/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv new file mode 100644 index 0000000..79d4c95 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;AMENT_PREFIX_PATH; diff --git a/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1 b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1 new file mode 100644 index 0000000..26b9997 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value AMENT_PREFIX_PATH "$env:COLCON_CURRENT_PREFIX" diff --git a/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh new file mode 100644 index 0000000..f3041f6 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value AMENT_PREFIX_PATH "$COLCON_CURRENT_PREFIX" diff --git a/src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv b/src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv new file mode 100644 index 0000000..257067d --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv @@ -0,0 +1 @@ +prepend-non-duplicate;PYTHONPATH;lib/python3.10/site-packages diff --git a/src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1 b/src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1 new file mode 100644 index 0000000..caffe83 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1 @@ -0,0 +1,3 @@ +# generated from colcon_powershell/shell/template/hook_prepend_value.ps1.em + +colcon_prepend_unique_value PYTHONPATH "$env:COLCON_CURRENT_PREFIX\lib/python3.10/site-packages" diff --git a/src/install/robot_controller/share/robot_controller/hook/pythonpath.sh b/src/install/robot_controller/share/robot_controller/hook/pythonpath.sh new file mode 100644 index 0000000..660c348 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/hook/pythonpath.sh @@ -0,0 +1,3 @@ +# generated from colcon_core/shell/template/hook_prepend_value.sh.em + +_colcon_prepend_unique_value PYTHONPATH "$COLCON_CURRENT_PREFIX/lib/python3.10/site-packages" diff --git a/src/install/robot_controller/share/robot_controller/package.bash b/src/install/robot_controller/share/robot_controller/package.bash new file mode 100644 index 0000000..981020b --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.bash @@ -0,0 +1,31 @@ +# generated from colcon_bash/shell/template/package.bash.em + +# This script extends the environment for this package. + +# a bash script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_bash_COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`/../.." > /dev/null && pwd)" +else + _colcon_package_bash_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh script of this package +_colcon_package_bash_source_script "$_colcon_package_bash_COLCON_CURRENT_PREFIX/share/robot_controller/package.sh" + +unset _colcon_package_bash_source_script +unset _colcon_package_bash_COLCON_CURRENT_PREFIX diff --git a/src/install/robot_controller/share/robot_controller/package.dsv b/src/install/robot_controller/share/robot_controller/package.dsv new file mode 100644 index 0000000..59a10b1 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.dsv @@ -0,0 +1,6 @@ +source;share/robot_controller/hook/pythonpath.ps1 +source;share/robot_controller/hook/pythonpath.dsv +source;share/robot_controller/hook/pythonpath.sh +source;share/robot_controller/hook/ament_prefix_path.ps1 +source;share/robot_controller/hook/ament_prefix_path.dsv +source;share/robot_controller/hook/ament_prefix_path.sh diff --git a/src/install/robot_controller/share/robot_controller/package.ps1 b/src/install/robot_controller/share/robot_controller/package.ps1 new file mode 100644 index 0000000..61ed3aa --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.ps1 @@ -0,0 +1,116 @@ +# generated from colcon_powershell/shell/template/package.ps1.em + +# function to append a value to a variable +# which uses colons as separators +# duplicates as well as leading separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_append_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + $_duplicate="" + # start with no values + $_all_values="" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -eq $_value) { + $_duplicate="1" + } + if ($_all_values) { + $_all_values="${_all_values};$_" + } else { + $_all_values="$_" + } + } + } + } + # append only non-duplicates + if (!$_duplicate) { + # avoid leading separator + if ($_all_values) { + $_all_values="${_all_values};${_value}" + } else { + $_all_values="${_value}" + } + } + + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +function colcon_prepend_unique_value { + param ( + $_listname, + $_value + ) + + # get values from variable + if (Test-Path Env:$_listname) { + $_values=(Get-Item env:$_listname).Value + } else { + $_values="" + } + # start with the new value + $_all_values="$_value" + # iterate over existing values in the variable + if ($_values) { + $_values.Split(";") | ForEach { + # not an empty string + if ($_) { + # not a duplicate of _value + if ($_ -ne $_value) { + # keep non-duplicate values + $_all_values="${_all_values};$_" + } + } + } + } + # export the updated variable + Set-Item env:\$_listname -Value "$_all_values" +} + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +function colcon_package_source_powershell_script { + param ( + $_colcon_package_source_powershell_script + ) + # source script with conditional trace output + if (Test-Path $_colcon_package_source_powershell_script) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_package_source_powershell_script'" + } + . "$_colcon_package_source_powershell_script" + } else { + Write-Error "not found: '$_colcon_package_source_powershell_script'" + } +} + + +# a powershell script is able to determine its own path +# the prefix is two levels up from the package specific share directory +$env:COLCON_CURRENT_PREFIX=(Get-Item $PSCommandPath).Directory.Parent.Parent.FullName + +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/robot_controller/hook/pythonpath.ps1" +colcon_package_source_powershell_script "$env:COLCON_CURRENT_PREFIX\share/robot_controller/hook/ament_prefix_path.ps1" + +Remove-Item Env:\COLCON_CURRENT_PREFIX diff --git a/src/install/robot_controller/share/robot_controller/package.sh b/src/install/robot_controller/share/robot_controller/package.sh new file mode 100644 index 0000000..14cf793 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.sh @@ -0,0 +1,87 @@ +# generated from colcon_core/shell/template/package.sh.em + +# This script extends the environment for this package. + +# function to prepend a value to a variable +# which uses colons as separators +# duplicates as well as trailing separators are avoided +# first argument: the name of the result variable +# second argument: the value to be prepended +_colcon_prepend_unique_value() { + # arguments + _listname="$1" + _value="$2" + + # get values from variable + eval _values=\"\$$_listname\" + # backup the field separator + _colcon_prepend_unique_value_IFS=$IFS + IFS=":" + # start with the new value + _all_values="$_value" + # workaround SH_WORD_SPLIT not being set in zsh + if [ "$(command -v colcon_zsh_convert_to_array)" ]; then + colcon_zsh_convert_to_array _values + fi + # iterate over existing values in the variable + for _item in $_values; do + # ignore empty strings + if [ -z "$_item" ]; then + continue + fi + # ignore duplicates of _value + if [ "$_item" = "$_value" ]; then + continue + fi + # keep non-duplicate values + _all_values="$_all_values:$_item" + done + unset _item + # restore the field separator + IFS=$_colcon_prepend_unique_value_IFS + unset _colcon_prepend_unique_value_IFS + # export the updated variable + eval export $_listname=\"$_all_values\" + unset _all_values + unset _values + + unset _value + unset _listname +} + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_package_sh_COLCON_CURRENT_PREFIX="/home/garima/first_ws/src/install/robot_controller" +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + if [ ! -d "$_colcon_package_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_package_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_package_sh_COLCON_CURRENT_PREFIX + return 1 + fi + COLCON_CURRENT_PREFIX="$_colcon_package_sh_COLCON_CURRENT_PREFIX" +fi +unset _colcon_package_sh_COLCON_CURRENT_PREFIX + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source sh hooks +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/robot_controller/hook/pythonpath.sh" +_colcon_package_sh_source_script "$COLCON_CURRENT_PREFIX/share/robot_controller/hook/ament_prefix_path.sh" + +unset _colcon_package_sh_source_script +unset COLCON_CURRENT_PREFIX + +# do not unset _colcon_prepend_unique_value since it might be used by non-primary shell hooks diff --git a/src/install/robot_controller/share/robot_controller/package.xml b/src/install/robot_controller/share/robot_controller/package.xml new file mode 100644 index 0000000..6014da1 --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.xml @@ -0,0 +1,20 @@ + + + + robot_controller + 0.0.0 + TODO: Package description + garima + TODO: License declaration + + rclpy + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/install/robot_controller/share/robot_controller/package.zsh b/src/install/robot_controller/share/robot_controller/package.zsh new file mode 100644 index 0000000..c3416bc --- /dev/null +++ b/src/install/robot_controller/share/robot_controller/package.zsh @@ -0,0 +1,42 @@ +# generated from colcon_zsh/shell/template/package.zsh.em + +# This script extends the environment for this package. + +# a zsh script is able to determine its own path if necessary +if [ -z "$COLCON_CURRENT_PREFIX" ]; then + # the prefix is two levels up from the package specific share directory + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`/../.." > /dev/null && pwd)" +else + _colcon_package_zsh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +# additional arguments: arguments to the script +_colcon_package_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$@" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# function to convert array-like strings into arrays +# to workaround SH_WORD_SPLIT not being set +colcon_zsh_convert_to_array() { + local _listname=$1 + local _dollar="$" + local _split="{=" + local _to_array="(\"$_dollar$_split$_listname}\")" + eval $_listname=$_to_array +} + +# source sh script of this package +_colcon_package_zsh_source_script "$_colcon_package_zsh_COLCON_CURRENT_PREFIX/share/robot_controller/package.sh" +unset convert_zsh_to_array + +unset _colcon_package_zsh_source_script +unset _colcon_package_zsh_COLCON_CURRENT_PREFIX diff --git a/src/install/setup.bash b/src/install/setup.bash new file mode 100644 index 0000000..82353e4 --- /dev/null +++ b/src/install/setup.bash @@ -0,0 +1,34 @@ +# generated from colcon_bash/shell/template/prefix_chain.bash.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_bash_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/rolling" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/home/garima/first_ws/install" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)" +_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_bash_source_script diff --git a/src/install/setup.ps1 b/src/install/setup.ps1 new file mode 100644 index 0000000..39449c2 --- /dev/null +++ b/src/install/setup.ps1 @@ -0,0 +1,30 @@ +# generated from colcon_powershell/shell/template/prefix_chain.ps1.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +function _colcon_prefix_chain_powershell_source_script { + param ( + $_colcon_prefix_chain_powershell_source_script_param + ) + # source script with conditional trace output + if (Test-Path $_colcon_prefix_chain_powershell_source_script_param) { + if ($env:COLCON_TRACE) { + echo ". '$_colcon_prefix_chain_powershell_source_script_param'" + } + . "$_colcon_prefix_chain_powershell_source_script_param" + } else { + Write-Error "not found: '$_colcon_prefix_chain_powershell_source_script_param'" + } +} + +# source chained prefixes +_colcon_prefix_chain_powershell_source_script "/opt/ros/rolling\local_setup.ps1" +_colcon_prefix_chain_powershell_source_script "/home/garima/first_ws/install\local_setup.ps1" + +# source this prefix +$env:COLCON_CURRENT_PREFIX=(Split-Path $PSCommandPath -Parent) +_colcon_prefix_chain_powershell_source_script "$env:COLCON_CURRENT_PREFIX\local_setup.ps1" diff --git a/src/install/setup.sh b/src/install/setup.sh new file mode 100644 index 0000000..955715e --- /dev/null +++ b/src/install/setup.sh @@ -0,0 +1,49 @@ +# generated from colcon_core/shell/template/prefix_chain.sh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# since a plain shell script can't determine its own path when being sourced +# either use the provided COLCON_CURRENT_PREFIX +# or fall back to the build time prefix (if it exists) +_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX=/home/garima/first_ws/src/install +if [ ! -z "$COLCON_CURRENT_PREFIX" ]; then + _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX="$COLCON_CURRENT_PREFIX" +elif [ ! -d "$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" ]; then + echo "The build time path \"$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX\" doesn't exist. Either source a script for a different shell or set the environment variable \"COLCON_CURRENT_PREFIX\" explicitly." 1>&2 + unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX + return 1 +fi + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_sh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo "# . \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/rolling" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="/home/garima/first_ws/install" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids relying on the build time prefix of the sourced script +COLCON_CURRENT_PREFIX="$_colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX" +_colcon_prefix_chain_sh_source_script "$COLCON_CURRENT_PREFIX/local_setup.sh" + +unset _colcon_prefix_chain_sh_COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_sh_source_script +unset COLCON_CURRENT_PREFIX diff --git a/src/install/setup.zsh b/src/install/setup.zsh new file mode 100644 index 0000000..7bfb8cd --- /dev/null +++ b/src/install/setup.zsh @@ -0,0 +1,34 @@ +# generated from colcon_zsh/shell/template/prefix_chain.zsh.em + +# This script extends the environment with the environment of other prefix +# paths which were sourced when this file was generated as well as all packages +# contained in this prefix path. + +# function to source another script with conditional trace output +# first argument: the path of the script +_colcon_prefix_chain_zsh_source_script() { + if [ -f "$1" ]; then + if [ -n "$COLCON_TRACE" ]; then + echo ". \"$1\"" + fi + . "$1" + else + echo "not found: \"$1\"" 1>&2 + fi +} + +# source chained prefixes +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/opt/ros/rolling" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="/home/garima/first_ws/install" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +# source this prefix +# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script +COLCON_CURRENT_PREFIX="$(builtin cd -q "`dirname "${(%):-%N}"`" > /dev/null && pwd)" +_colcon_prefix_chain_zsh_source_script "$COLCON_CURRENT_PREFIX/local_setup.zsh" + +unset COLCON_CURRENT_PREFIX +unset _colcon_prefix_chain_zsh_source_script diff --git a/src/log/COLCON_IGNORE b/src/log/COLCON_IGNORE new file mode 100644 index 0000000..e69de29 diff --git a/src/log/build_2023-05-25_14-03-54/events.log b/src/log/build_2023-05-25_14-03-54/events.log new file mode 100644 index 0000000..b7d564b --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/events.log @@ -0,0 +1,45 @@ +[0.000000] (-) TimerEvent: {} +[0.000110] (robot_controller) JobQueued: {'identifier': 'robot_controller', 'dependencies': OrderedDict()} +[0.000166] (robot_controller) JobStarted: {'identifier': 'robot_controller'} +[0.099295] (-) TimerEvent: {} +[0.199537] (-) TimerEvent: {} +[0.299768] (-) TimerEvent: {} +[0.374792] (robot_controller) Command: {'cmd': ['/usr/bin/python3', 'setup.py', 'egg_info', '--egg-base', '../build/robot_controller', 'build', '--build-base', '/home/garima/first_ws/src/build/robot_controller/build', 'install', '--record', '/home/garima/first_ws/src/build/robot_controller/install.log', '--single-version-externally-managed'], 'cwd': '/home/garima/first_ws/src/robot_controller', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'garima', 'XDG_SESSION_TYPE': 'wayland', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/rolling/opt/rviz_ogre_vendor/lib:/opt/ros/rolling/lib/x86_64-linux-gnu:/opt/ros/rolling/lib', 'HOME': '/home/garima', 'OLDPWD': '/home/garima/first_ws/src/robot_controller', 'DESKTOP_SESSION': 'ubuntu', 'ROS_PYTHON_VERSION': '3', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'GTK_MODULES': 'gail:atk-bridge', 'SYSTEMD_EXEC_PID': '1658', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLORTERM': 'truecolor', 'IM_CONFIG_PHASE': '1', 'WAYLAND_DISPLAY': 'wayland-0', 'ROS_DISTRO': 'rolling', 'LOGNAME': 'garima', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'USERNAME': 'garima', 'TERM': 'xterm-256color', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'PATH': '/opt/ros/rolling/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin', 'SESSION_MANAGER': 'local/garima-HP-Pavilion-Laptop-14-ec1xxx:@/tmp/.ICE-unix/1640,unix/garima-HP-Pavilion-Laptop-14-ec1xxx:/tmp/.ICE-unix/1640', 'XDG_MENU_PREFIX': 'gnome-', 'GNOME_TERMINAL_SCREEN': '/org/gnome/Terminal/screen/0f96b0ed_44f2_46bd_a738_8a94b8deb2dd', 'GNOME_SETUP_DISPLAY': ':1', 'XDG_RUNTIME_DIR': '/run/user/1000', 'DISPLAY': ':0', 'LANG': 'en_US.UTF-8', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'XMODIFIERS': '@im=ibus', 'XDG_SESSION_DESKTOP': 'ubuntu', 'XAUTHORITY': '/run/user/1000/.mutter-Xwaylandauth.AFV541', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'GNOME_TERMINAL_SERVICE': ':1.131', 'SSH_AGENT_LAUNCHER': 'gnome-keyring', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'AMENT_PREFIX_PATH': '/opt/ros/rolling', 'SHELL': '/bin/bash', 'QT_ACCESSIBILITY': '1', 'GDMSESSION': 'ubuntu', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'QT_IM_MODULE': 'ibus', 'PWD': '/home/garima/first_ws/src/build/robot_controller', 'LC_ALL': 'en_US.UTF-8', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:/opt/ros/rolling/lib/python3.10/site-packages', 'COLCON': '1', 'VTE_VERSION': '6800'}, 'shell': False} +[0.399946] (-) TimerEvent: {} +[0.500159] (-) TimerEvent: {} +[0.518493] (robot_controller) StdoutLine: {'line': b'running egg_info\n'} +[0.518900] (robot_controller) StdoutLine: {'line': b'creating ../build/robot_controller/robot_controller.egg-info\n'} +[0.519079] (robot_controller) StdoutLine: {'line': b'writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO\n'} +[0.519269] (robot_controller) StdoutLine: {'line': b'writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt\n'} +[0.519377] (robot_controller) StdoutLine: {'line': b'writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt\n'} +[0.519484] (robot_controller) StdoutLine: {'line': b'writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt\n'} +[0.519558] (robot_controller) StdoutLine: {'line': b'writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt\n'} +[0.519605] (robot_controller) StdoutLine: {'line': b"writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt'\n"} +[0.520382] (robot_controller) StdoutLine: {'line': b"reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt'\n"} +[0.520802] (robot_controller) StdoutLine: {'line': b"writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt'\n"} +[0.520897] (robot_controller) StdoutLine: {'line': b'running build\n'} +[0.520969] (robot_controller) StdoutLine: {'line': b'running build_py\n'} +[0.521056] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/robot_controller/build\n'} +[0.521113] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/robot_controller/build/lib\n'} +[0.521165] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller\n'} +[0.521214] (robot_controller) StdoutLine: {'line': b'copying robot_controller/__init__.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller\n'} +[0.521276] (robot_controller) StdoutLine: {'line': b'running install\n'} +[0.521356] (robot_controller) StderrLine: {'line': b'/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.\n'} +[0.521435] (robot_controller) StderrLine: {'line': b' warnings.warn(\n'} +[0.521496] (robot_controller) StdoutLine: {'line': b'running install_lib\n'} +[0.521852] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller\n'} +[0.521920] (robot_controller) StdoutLine: {'line': b'copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/__init__.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller\n'} +[0.522166] (robot_controller) StdoutLine: {'line': b'byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/__init__.py to __init__.cpython-310.pyc\n'} +[0.522280] (robot_controller) StdoutLine: {'line': b'running install_data\n'} +[0.522571] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/robot_controller/share/ament_index\n'} +[0.522667] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index\n'} +[0.522728] (robot_controller) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages\n'} +[0.522791] (robot_controller) StdoutLine: {'line': b'copying resource/robot_controller -> /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages\n'} +[0.522859] (robot_controller) StdoutLine: {'line': b'copying package.xml -> /home/garima/first_ws/src/install/robot_controller/share/robot_controller\n'} +[0.522910] (robot_controller) StdoutLine: {'line': b'running install_egg_info\n'} +[0.523636] (robot_controller) StdoutLine: {'line': b'Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info\n'} +[0.524099] (robot_controller) StdoutLine: {'line': b'running install_scripts\n'} +[0.536591] (robot_controller) StdoutLine: {'line': b"writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log'\n"} +[0.551950] (robot_controller) CommandEnded: {'returncode': 0} +[0.562963] (robot_controller) JobEnded: {'identifier': 'robot_controller', 'rc': 0} +[0.563669] (-) EventReactorShutdown: {} diff --git a/src/log/build_2023-05-25_14-03-54/logger_all.log b/src/log/build_2023-05-25_14-03-54/logger_all.log new file mode 100644 index 0000000..1051cbe --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/logger_all.log @@ -0,0 +1,112 @@ +[0.269s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build'] +[0.269s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=12, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=, verb_extension=, main=>) +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover +[0.299s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover +[0.299s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/garima/first_ws/src' +[0.299s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install'] +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore' +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install' +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg'] +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg' +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta'] +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta' +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros'] +[0.300s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python'] +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py'] +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install'] +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install'] +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install'] +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore' +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored +[0.307s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['ignore', 'ignore_ament_install'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ignore' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ignore_ament_install' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['colcon_pkg'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'colcon_pkg' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['colcon_meta'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'colcon_meta' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['ros'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ros' +[0.310s] DEBUG:colcon.colcon_core.package_identification:Package 'robot_controller' with type 'ros.ament_python' and name 'robot_controller' +[0.310s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults +[0.310s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover +[0.310s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults +[0.310s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover +[0.310s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults +[0.329s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters +[0.330s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover +[0.332s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 281 installed packages in /opt/ros/rolling +[0.333s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_args' from command line to 'None' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_target' from command line to 'None' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_target_skip_unavailable' from command line to 'False' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_clean_cache' from command line to 'False' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_clean_first' from command line to 'False' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_force_configure' from command line to 'False' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'ament_cmake_args' from command line to 'None' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'catkin_cmake_args' from command line to 'None' +[0.365s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'catkin_skip_building_tests' from command line to 'False' +[0.365s] DEBUG:colcon.colcon_core.verb:Building package 'robot_controller' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/garima/first_ws/src/build/robot_controller', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/garima/first_ws/src/install/robot_controller', 'merge_install': False, 'path': '/home/garima/first_ws/src/robot_controller', 'symlink_install': False, 'test_result_base': None} +[0.365s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor +[0.367s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete +[0.367s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/garima/first_ws/src/robot_controller' with build type 'ament_python' +[0.367s] Level 1:colcon.colcon_core.shell:create_environment_hook('robot_controller', 'ament_prefix_path') +[0.372s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems +[0.372s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1' +[0.372s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv' +[0.373s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh' +[0.374s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.374s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.531s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/garima/first_ws/src/robot_controller' +[0.532s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.532s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.743s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.920s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.925s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller' for CMake module files +[0.925s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller' for CMake config files +[0.925s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib' +[0.925s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/bin' +[0.925s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib/pkgconfig/robot_controller.pc' +[0.926s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages' +[0.926s] Level 1:colcon.colcon_core.shell:create_environment_hook('robot_controller', 'pythonpath') +[0.926s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1' +[0.927s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv' +[0.927s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.sh' +[0.927s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/bin' +[0.927s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robot_controller) +[0.928s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.ps1' +[0.929s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.dsv' +[0.929s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.sh' +[0.929s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.bash' +[0.930s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.zsh' +[0.930s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/garima/first_ws/src/install/robot_controller/share/colcon-core/packages/robot_controller) +[0.931s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop +[0.931s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed +[0.931s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0' +[0.931s] DEBUG:colcon.colcon_core.event_reactor:joining thread +[0.936s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems +[0.936s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems +[0.936s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2' +[0.947s] DEBUG:colcon.colcon_core.event_reactor:joined thread +[0.948s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.ps1' +[0.948s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_ps1.py' +[0.949s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.ps1' +[0.950s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.sh' +[0.951s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_sh.py' +[0.951s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.sh' +[0.952s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.bash' +[0.952s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.bash' +[0.953s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.zsh' +[0.953s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.zsh' diff --git a/src/log/build_2023-05-25_14-03-54/robot_controller/command.log b/src/log/build_2023-05-25_14-03-54/robot_controller/command.log new file mode 100644 index 0000000..db57815 --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/robot_controller/command.log @@ -0,0 +1,2 @@ +Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-25_14-03-54/robot_controller/stderr.log b/src/log/build_2023-05-25_14-03-54/robot_controller/stderr.log new file mode 100644 index 0000000..89805d7 --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/robot_controller/stderr.log @@ -0,0 +1,2 @@ +/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. + warnings.warn( diff --git a/src/log/build_2023-05-25_14-03-54/robot_controller/stdout.log b/src/log/build_2023-05-25_14-03-54/robot_controller/stdout.log new file mode 100644 index 0000000..879eff3 --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/robot_controller/stdout.log @@ -0,0 +1,31 @@ +running egg_info +creating ../build/robot_controller/robot_controller.egg-info +writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +running build +running build_py +creating /home/garima/first_ws/src/build/robot_controller/build +creating /home/garima/first_ws/src/build/robot_controller/build/lib +creating /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +copying robot_controller/__init__.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +running install +running install_lib +creating /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/__init__.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/__init__.py to __init__.cpython-310.pyc +running install_data +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +copying resource/robot_controller -> /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +copying package.xml -> /home/garima/first_ws/src/install/robot_controller/share/robot_controller +running install_egg_info +Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +running install_scripts +writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' diff --git a/src/log/build_2023-05-25_14-03-54/robot_controller/stdout_stderr.log b/src/log/build_2023-05-25_14-03-54/robot_controller/stdout_stderr.log new file mode 100644 index 0000000..2dca0dc --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/robot_controller/stdout_stderr.log @@ -0,0 +1,33 @@ +running egg_info +creating ../build/robot_controller/robot_controller.egg-info +writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +running build +running build_py +creating /home/garima/first_ws/src/build/robot_controller/build +creating /home/garima/first_ws/src/build/robot_controller/build/lib +creating /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +copying robot_controller/__init__.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +running install +/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. + warnings.warn( +running install_lib +creating /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/__init__.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/__init__.py to __init__.cpython-310.pyc +running install_data +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index +creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +copying resource/robot_controller -> /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +copying package.xml -> /home/garima/first_ws/src/install/robot_controller/share/robot_controller +running install_egg_info +Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +running install_scripts +writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' diff --git a/src/log/build_2023-05-25_14-03-54/robot_controller/streams.log b/src/log/build_2023-05-25_14-03-54/robot_controller/streams.log new file mode 100644 index 0000000..a335d6e --- /dev/null +++ b/src/log/build_2023-05-25_14-03-54/robot_controller/streams.log @@ -0,0 +1,35 @@ +[0.375s] Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.518s] running egg_info +[0.519s] creating ../build/robot_controller/robot_controller.egg-info +[0.519s] writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +[0.519s] writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +[0.519s] writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +[0.519s] writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +[0.519s] writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +[0.519s] writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +[0.520s] reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +[0.521s] writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +[0.521s] running build +[0.521s] running build_py +[0.521s] creating /home/garima/first_ws/src/build/robot_controller/build +[0.521s] creating /home/garima/first_ws/src/build/robot_controller/build/lib +[0.521s] creating /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +[0.521s] copying robot_controller/__init__.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +[0.521s] running install +[0.521s] /usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. +[0.521s] warnings.warn( +[0.521s] running install_lib +[0.522s] creating /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +[0.522s] copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/__init__.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +[0.522s] byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/__init__.py to __init__.cpython-310.pyc +[0.522s] running install_data +[0.522s] creating /home/garima/first_ws/src/install/robot_controller/share/ament_index +[0.523s] creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index +[0.523s] creating /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +[0.523s] copying resource/robot_controller -> /home/garima/first_ws/src/install/robot_controller/share/ament_index/resource_index/packages +[0.523s] copying package.xml -> /home/garima/first_ws/src/install/robot_controller/share/robot_controller +[0.523s] running install_egg_info +[0.524s] Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +[0.524s] running install_scripts +[0.536s] writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' +[0.552s] Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-26_02-31-12/events.log b/src/log/build_2023-05-26_02-31-12/events.log new file mode 100644 index 0000000..703dbf2 --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/events.log @@ -0,0 +1,35 @@ +[0.000000] (-) TimerEvent: {} +[0.000505] (robot_controller) JobQueued: {'identifier': 'robot_controller', 'dependencies': OrderedDict()} +[0.000848] (robot_controller) JobStarted: {'identifier': 'robot_controller'} +[0.099768] (-) TimerEvent: {} +[0.200070] (-) TimerEvent: {} +[0.300351] (-) TimerEvent: {} +[0.400684] (-) TimerEvent: {} +[0.429707] (robot_controller) Command: {'cmd': ['/usr/bin/python3', 'setup.py', 'egg_info', '--egg-base', '../build/robot_controller', 'build', '--build-base', '/home/garima/first_ws/src/build/robot_controller/build', 'install', '--record', '/home/garima/first_ws/src/build/robot_controller/install.log', '--single-version-externally-managed'], 'cwd': '/home/garima/first_ws/src/robot_controller', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'garima', 'XDG_SESSION_TYPE': 'wayland', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/rolling/opt/rviz_ogre_vendor/lib:/opt/ros/rolling/lib/x86_64-linux-gnu:/opt/ros/rolling/lib', 'HOME': '/home/garima', 'OLDPWD': '/home/garima/first_ws/src/robot_controller', 'DESKTOP_SESSION': 'ubuntu', 'ROS_PYTHON_VERSION': '3', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'GTK_MODULES': 'gail:atk-bridge', 'SYSTEMD_EXEC_PID': '1651', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLORTERM': 'truecolor', 'IM_CONFIG_PHASE': '1', 'WAYLAND_DISPLAY': 'wayland-0', 'ROS_DISTRO': 'rolling', 'LOGNAME': 'garima', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'USERNAME': 'garima', 'TERM': 'xterm-256color', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'PATH': '/opt/ros/rolling/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin', 'SESSION_MANAGER': 'local/garima-HP-Pavilion-Laptop-14-ec1xxx:@/tmp/.ICE-unix/1631,unix/garima-HP-Pavilion-Laptop-14-ec1xxx:/tmp/.ICE-unix/1631', 'XDG_MENU_PREFIX': 'gnome-', 'GNOME_TERMINAL_SCREEN': '/org/gnome/Terminal/screen/d8e75bd1_32b2_49a0_aa0a_24556a3b12ad', 'GNOME_SETUP_DISPLAY': ':1', 'XDG_RUNTIME_DIR': '/run/user/1000', 'DISPLAY': ':0', 'LANG': 'en_US.UTF-8', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'XMODIFIERS': '@im=ibus', 'XDG_SESSION_DESKTOP': 'ubuntu', 'XAUTHORITY': '/run/user/1000/.mutter-Xwaylandauth.K57J51', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'GNOME_TERMINAL_SERVICE': ':1.126', 'SSH_AGENT_LAUNCHER': 'gnome-keyring', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'AMENT_PREFIX_PATH': '/opt/ros/rolling', 'SHELL': '/bin/bash', 'QT_ACCESSIBILITY': '1', 'GDMSESSION': 'ubuntu', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'QT_IM_MODULE': 'ibus', 'PWD': '/home/garima/first_ws/src/build/robot_controller', 'LC_ALL': 'en_US.UTF-8', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:/opt/ros/rolling/lib/python3.10/site-packages', 'COLCON': '1', 'VTE_VERSION': '6800'}, 'shell': False} +[0.500796] (-) TimerEvent: {} +[0.601107] (-) TimerEvent: {} +[0.601916] (robot_controller) StdoutLine: {'line': b'running egg_info\n'} +[0.602474] (robot_controller) StdoutLine: {'line': b'writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO\n'} +[0.602676] (robot_controller) StdoutLine: {'line': b'writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt\n'} +[0.602820] (robot_controller) StdoutLine: {'line': b'writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt\n'} +[0.602924] (robot_controller) StdoutLine: {'line': b'writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt\n'} +[0.602996] (robot_controller) StdoutLine: {'line': b'writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt\n'} +[0.604027] (robot_controller) StdoutLine: {'line': b"reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt'\n"} +[0.604699] (robot_controller) StdoutLine: {'line': b"writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt'\n"} +[0.604807] (robot_controller) StdoutLine: {'line': b'running build\n'} +[0.604871] (robot_controller) StdoutLine: {'line': b'running build_py\n'} +[0.604942] (robot_controller) StdoutLine: {'line': b'copying robot_controller/my_first_node.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller\n'} +[0.605016] (robot_controller) StdoutLine: {'line': b'running install\n'} +[0.605201] (robot_controller) StdoutLine: {'line': b'running install_lib\n'} +[0.605628] (robot_controller) StdoutLine: {'line': b'copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/my_first_node.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller\n'} +[0.605985] (robot_controller) StdoutLine: {'line': b'byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/my_first_node.py to my_first_node.cpython-310.pyc\n'} +[0.606313] (robot_controller) StdoutLine: {'line': b'running install_data\n'} +[0.606630] (robot_controller) StdoutLine: {'line': b'running install_egg_info\n'} +[0.607658] (robot_controller) StdoutLine: {'line': b"removing '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info' (and everything under it)\n"} +[0.607888] (robot_controller) StdoutLine: {'line': b'Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info\n'} +[0.608545] (robot_controller) StdoutLine: {'line': b'running install_scripts\n'} +[0.622280] (robot_controller) StdoutLine: {'line': b'Installing test_node script to /home/garima/first_ws/src/install/robot_controller/lib/robot_controller\n'} +[0.622388] (robot_controller) StdoutLine: {'line': b"writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log'\n"} +[0.647575] (robot_controller) CommandEnded: {'returncode': 0} +[0.662039] (robot_controller) JobEnded: {'identifier': 'robot_controller', 'rc': 0} +[0.662607] (-) EventReactorShutdown: {} diff --git a/src/log/build_2023-05-26_02-31-12/logger_all.log b/src/log/build_2023-05-26_02-31-12/logger_all.log new file mode 100644 index 0000000..716594f --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/logger_all.log @@ -0,0 +1,112 @@ +[0.229s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build'] +[0.229s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=12, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=, verb_extension=, main=>) +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover +[0.245s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover +[0.245s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/garima/first_ws/src' +[0.245s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install'] +[0.245s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore' +[0.245s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install' +[0.245s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg'] +[0.245s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg' +[0.246s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta'] +[0.246s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta' +[0.246s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros'] +[0.246s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros' +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python'] +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake' +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python' +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py'] +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py' +[0.253s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['ignore', 'ignore_ament_install'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ignore' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ignore_ament_install' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['colcon_pkg'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'colcon_pkg' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['colcon_meta'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'colcon_meta' +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extensions ['ros'] +[0.254s] Level 1:colcon.colcon_core.package_identification:_identify(robot_controller) by extension 'ros' +[0.256s] DEBUG:colcon.colcon_core.package_identification:Package 'robot_controller' with type 'ros.ament_python' and name 'robot_controller' +[0.256s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults +[0.256s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover +[0.256s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults +[0.256s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover +[0.256s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults +[0.271s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters +[0.271s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover +[0.274s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 281 installed packages in /opt/ros/rolling +[0.275s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_args' from command line to 'None' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_target' from command line to 'None' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_target_skip_unavailable' from command line to 'False' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_clean_cache' from command line to 'False' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_clean_first' from command line to 'False' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'cmake_force_configure' from command line to 'False' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'ament_cmake_args' from command line to 'None' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'catkin_cmake_args' from command line to 'None' +[0.308s] Level 5:colcon.colcon_core.verb:set package 'robot_controller' build argument 'catkin_skip_building_tests' from command line to 'False' +[0.308s] DEBUG:colcon.colcon_core.verb:Building package 'robot_controller' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/garima/first_ws/src/build/robot_controller', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/garima/first_ws/src/install/robot_controller', 'merge_install': False, 'path': '/home/garima/first_ws/src/robot_controller', 'symlink_install': False, 'test_result_base': None} +[0.309s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor +[0.311s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete +[0.311s] INFO:colcon.colcon_ros.task.ament_python.build:Building ROS package in '/home/garima/first_ws/src/robot_controller' with build type 'ament_python' +[0.312s] Level 1:colcon.colcon_core.shell:create_environment_hook('robot_controller', 'ament_prefix_path') +[0.316s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems +[0.316s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.ps1' +[0.316s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.dsv' +[0.317s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/ament_prefix_path.sh' +[0.318s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.318s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.500s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/garima/first_ws/src/robot_controller' +[0.501s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.501s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.744s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.959s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.966s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller' for CMake module files +[0.966s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller' for CMake config files +[0.967s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib' +[0.967s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/bin' +[0.967s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib/pkgconfig/robot_controller.pc' +[0.967s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages' +[0.967s] Level 1:colcon.colcon_core.shell:create_environment_hook('robot_controller', 'pythonpath') +[0.968s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.ps1' +[0.968s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.dsv' +[0.969s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/hook/pythonpath.sh' +[0.969s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/robot_controller/bin' +[0.969s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(robot_controller) +[0.970s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.ps1' +[0.970s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.dsv' +[0.971s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.sh' +[0.972s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.bash' +[0.972s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/robot_controller/share/robot_controller/package.zsh' +[0.973s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/garima/first_ws/src/install/robot_controller/share/colcon-core/packages/robot_controller) +[0.973s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop +[0.973s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed +[0.973s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0' +[0.973s] DEBUG:colcon.colcon_core.event_reactor:joining thread +[0.978s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems +[0.978s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems +[0.978s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2' +[0.992s] DEBUG:colcon.colcon_core.event_reactor:joined thread +[0.994s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.ps1' +[0.995s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_ps1.py' +[0.996s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.ps1' +[0.997s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.sh' +[0.998s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_sh.py' +[0.998s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.sh' +[0.999s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.bash' +[0.999s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.bash' +[1.000s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.zsh' +[1.001s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.zsh' diff --git a/src/log/build_2023-05-26_02-31-12/robot_controller/command.log b/src/log/build_2023-05-26_02-31-12/robot_controller/command.log new file mode 100644 index 0000000..db57815 --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/robot_controller/command.log @@ -0,0 +1,2 @@ +Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-26_02-31-12/robot_controller/stderr.log b/src/log/build_2023-05-26_02-31-12/robot_controller/stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/src/log/build_2023-05-26_02-31-12/robot_controller/stdout.log b/src/log/build_2023-05-26_02-31-12/robot_controller/stdout.log new file mode 100644 index 0000000..32631eb --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/robot_controller/stdout.log @@ -0,0 +1,22 @@ +running egg_info +writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +running build +running build_py +copying robot_controller/my_first_node.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +running install +running install_lib +copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/my_first_node.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/my_first_node.py to my_first_node.cpython-310.pyc +running install_data +running install_egg_info +removing '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info' (and everything under it) +Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +running install_scripts +Installing test_node script to /home/garima/first_ws/src/install/robot_controller/lib/robot_controller +writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' diff --git a/src/log/build_2023-05-26_02-31-12/robot_controller/stdout_stderr.log b/src/log/build_2023-05-26_02-31-12/robot_controller/stdout_stderr.log new file mode 100644 index 0000000..32631eb --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/robot_controller/stdout_stderr.log @@ -0,0 +1,22 @@ +running egg_info +writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +running build +running build_py +copying robot_controller/my_first_node.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +running install +running install_lib +copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/my_first_node.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/my_first_node.py to my_first_node.cpython-310.pyc +running install_data +running install_egg_info +removing '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info' (and everything under it) +Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +running install_scripts +Installing test_node script to /home/garima/first_ws/src/install/robot_controller/lib/robot_controller +writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' diff --git a/src/log/build_2023-05-26_02-31-12/robot_controller/streams.log b/src/log/build_2023-05-26_02-31-12/robot_controller/streams.log new file mode 100644 index 0000000..c7913d3 --- /dev/null +++ b/src/log/build_2023-05-26_02-31-12/robot_controller/streams.log @@ -0,0 +1,24 @@ +[0.432s] Invoking command in '/home/garima/first_ws/src/robot_controller': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed +[0.601s] running egg_info +[0.602s] writing ../build/robot_controller/robot_controller.egg-info/PKG-INFO +[0.602s] writing dependency_links to ../build/robot_controller/robot_controller.egg-info/dependency_links.txt +[0.602s] writing entry points to ../build/robot_controller/robot_controller.egg-info/entry_points.txt +[0.602s] writing requirements to ../build/robot_controller/robot_controller.egg-info/requires.txt +[0.602s] writing top-level names to ../build/robot_controller/robot_controller.egg-info/top_level.txt +[0.603s] reading manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +[0.604s] writing manifest file '../build/robot_controller/robot_controller.egg-info/SOURCES.txt' +[0.604s] running build +[0.604s] running build_py +[0.604s] copying robot_controller/my_first_node.py -> /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller +[0.604s] running install +[0.604s] running install_lib +[0.605s] copying /home/garima/first_ws/src/build/robot_controller/build/lib/robot_controller/my_first_node.py -> /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller +[0.605s] byte-compiling /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller/my_first_node.py to my_first_node.cpython-310.pyc +[0.606s] running install_data +[0.606s] running install_egg_info +[0.607s] removing '/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info' (and everything under it) +[0.607s] Copying ../build/robot_controller/robot_controller.egg-info to /home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages/robot_controller-0.0.0-py3.10.egg-info +[0.608s] running install_scripts +[0.621s] Installing test_node script to /home/garima/first_ws/src/install/robot_controller/lib/robot_controller +[0.622s] writing list of installed files to '/home/garima/first_ws/src/build/robot_controller/install.log' +[0.647s] Invoked command in '/home/garima/first_ws/src/robot_controller' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/robot_controller/prefix_override:/home/garima/first_ws/src/install/robot_controller/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/robot_controller build --build-base /home/garima/first_ws/src/build/robot_controller/build install --record /home/garima/first_ws/src/build/robot_controller/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-26_07-26-29/events.log b/src/log/build_2023-05-26_07-26-29/events.log new file mode 100644 index 0000000..ffc826d --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/events.log @@ -0,0 +1,50 @@ +[0.000000] (-) TimerEvent: {} +[0.000141] (image_processes) JobQueued: {'identifier': 'image_processes', 'dependencies': OrderedDict()} +[0.000652] (image_processes) JobStarted: {'identifier': 'image_processes'} +[0.099813] (-) TimerEvent: {} +[0.200110] (-) TimerEvent: {} +[0.300400] (-) TimerEvent: {} +[0.400742] (-) TimerEvent: {} +[0.417403] (image_processes) Command: {'cmd': ['/usr/bin/python3', 'setup.py', 'egg_info', '--egg-base', '../build/image_processes', 'build', '--build-base', '/home/garima/first_ws/src/build/image_processes/build', 'install', '--record', '/home/garima/first_ws/src/build/image_processes/install.log', '--single-version-externally-managed'], 'cwd': '/home/garima/first_ws/src/image_processes', 'env': {'LESSOPEN': '| /usr/bin/lesspipe %s', 'USER': 'garima', 'XDG_SESSION_TYPE': 'wayland', 'SHLVL': '1', 'LD_LIBRARY_PATH': '/opt/ros/rolling/opt/rviz_ogre_vendor/lib:/opt/ros/rolling/lib/x86_64-linux-gnu:/opt/ros/rolling/lib', 'HOME': '/home/garima', 'OLDPWD': '/home/garima/first_ws', 'DESKTOP_SESSION': 'ubuntu', 'ROS_PYTHON_VERSION': '3', 'GNOME_SHELL_SESSION_MODE': 'ubuntu', 'GTK_MODULES': 'gail:atk-bridge', 'SYSTEMD_EXEC_PID': '1664', 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus', 'COLORTERM': 'truecolor', 'IM_CONFIG_PHASE': '1', 'WAYLAND_DISPLAY': 'wayland-0', 'COLCON_PREFIX_PATH': '/home/garima/first_ws/install', 'ROS_DISTRO': 'rolling', 'LOGNAME': 'garima', '_': '/usr/bin/colcon', 'ROS_VERSION': '2', 'XDG_SESSION_CLASS': 'user', 'USERNAME': 'garima', 'TERM': 'xterm-256color', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'PATH': '/opt/ros/rolling/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin', 'SESSION_MANAGER': 'local/garima-HP-Pavilion-Laptop-14-ec1xxx:@/tmp/.ICE-unix/1645,unix/garima-HP-Pavilion-Laptop-14-ec1xxx:/tmp/.ICE-unix/1645', 'XDG_MENU_PREFIX': 'gnome-', 'GNOME_TERMINAL_SCREEN': '/org/gnome/Terminal/screen/a1349d36_faaa_4b10_b977_7c4cdee744ab', 'GNOME_SETUP_DISPLAY': ':1', 'XDG_RUNTIME_DIR': '/run/user/1000', 'DISPLAY': ':0', 'LANG': 'en_US.UTF-8', 'XDG_CURRENT_DESKTOP': 'ubuntu:GNOME', 'XMODIFIERS': '@im=ibus', 'XDG_SESSION_DESKTOP': 'ubuntu', 'XAUTHORITY': '/run/user/1000/.mutter-Xwaylandauth.4C7L51', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'GNOME_TERMINAL_SERVICE': ':1.214', 'SSH_AGENT_LAUNCHER': 'gnome-keyring', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'AMENT_PREFIX_PATH': '/home/garima/first_ws/install/robot_controller:/opt/ros/rolling', 'SHELL': '/bin/bash', 'QT_ACCESSIBILITY': '1', 'GDMSESSION': 'ubuntu', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'ROS_AUTOMATIC_DISCOVERY_RANGE': 'SUBNET', 'QT_IM_MODULE': 'ibus', 'PWD': '/home/garima/first_ws/src/build/image_processes', 'LC_ALL': 'en_US.UTF-8', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/etc/xdg', 'XDG_DATA_DIRS': '/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop', 'PYTHONPATH': '/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:/home/garima/first_ws/install/robot_controller/lib/python3.10/site-packages:/home/garima/first_ws/install/image_processes/lib/python3.10/site-packages:/opt/ros/rolling/lib/python3.10/site-packages', 'COLCON': '1', 'VTE_VERSION': '6800'}, 'shell': False} +[0.500858] (-) TimerEvent: {} +[0.586543] (image_processes) StdoutLine: {'line': b'running egg_info\n'} +[0.587090] (image_processes) StdoutLine: {'line': b'creating ../build/image_processes/image_processes.egg-info\n'} +[0.587199] (image_processes) StdoutLine: {'line': b'writing ../build/image_processes/image_processes.egg-info/PKG-INFO\n'} +[0.587297] (image_processes) StdoutLine: {'line': b'writing dependency_links to ../build/image_processes/image_processes.egg-info/dependency_links.txt\n'} +[0.587367] (image_processes) StdoutLine: {'line': b'writing entry points to ../build/image_processes/image_processes.egg-info/entry_points.txt\n'} +[0.587445] (image_processes) StdoutLine: {'line': b'writing requirements to ../build/image_processes/image_processes.egg-info/requires.txt\n'} +[0.587508] (image_processes) StdoutLine: {'line': b'writing top-level names to ../build/image_processes/image_processes.egg-info/top_level.txt\n'} +[0.587578] (image_processes) StdoutLine: {'line': b"writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt'\n"} +[0.588408] (image_processes) StdoutLine: {'line': b"reading manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt'\n"} +[0.588826] (image_processes) StdoutLine: {'line': b"writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt'\n"} +[0.588903] (image_processes) StdoutLine: {'line': b'running build\n'} +[0.588956] (image_processes) StdoutLine: {'line': b'running build_py\n'} +[0.589035] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/image_processes/build\n'} +[0.589089] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/image_processes/build/lib\n'} +[0.589157] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/build/image_processes/build/lib/image_processes\n'} +[0.589206] (image_processes) StdoutLine: {'line': b'copying image_processes/publisher_member_function.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes\n'} +[0.589260] (image_processes) StdoutLine: {'line': b'copying image_processes/__init__.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes\n'} +[0.589322] (image_processes) StdoutLine: {'line': b'running install\n'} +[0.589413] (image_processes) StdoutLine: {'line': b'running install_lib\n'} +[0.589773] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes\n'} +[0.589841] (image_processes) StdoutLine: {'line': b'copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/publisher_member_function.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes\n'} +[0.589913] (image_processes) StdoutLine: {'line': b'copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/__init__.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes\n'} +[0.590175] (image_processes) StdoutLine: {'line': b'byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/publisher_member_function.py to publisher_member_function.cpython-310.pyc\n'} +[0.590534] (image_processes) StdoutLine: {'line': b'byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/__init__.py to __init__.cpython-310.pyc\n'} +[0.590882] (image_processes) StdoutLine: {'line': b'running install_data\n'} +[0.591174] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/share\n'} +[0.591295] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/share/ament_index\n'} +[0.591379] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index\n'} +[0.591434] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages\n'} +[0.591483] (image_processes) StdoutLine: {'line': b'copying resource/image_processes -> /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages\n'} +[0.591528] (image_processes) StdoutLine: {'line': b'creating /home/garima/first_ws/src/install/image_processes/share/image_processes\n'} +[0.591573] (image_processes) StdoutLine: {'line': b'copying package.xml -> /home/garima/first_ws/src/install/image_processes/share/image_processes\n'} +[0.591616] (image_processes) StdoutLine: {'line': b'running install_egg_info\n'} +[0.592306] (image_processes) StdoutLine: {'line': b'Copying ../build/image_processes/image_processes.egg-info to /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes-0.0.0-py3.10.egg-info\n'} +[0.592784] (image_processes) StdoutLine: {'line': b'running install_scripts\n'} +[0.600930] (-) TimerEvent: {} +[0.606040] (image_processes) StdoutLine: {'line': b'Installing webcam_publisher script to /home/garima/first_ws/src/install/image_processes/lib/image_processes\n'} +[0.606331] (image_processes) StdoutLine: {'line': b"writing list of installed files to '/home/garima/first_ws/src/build/image_processes/install.log'\n"} +[0.626402] (image_processes) CommandEnded: {'returncode': 0} +[0.648202] (image_processes) JobEnded: {'identifier': 'image_processes', 'rc': 0} +[0.649563] (-) EventReactorShutdown: {} diff --git a/src/log/build_2023-05-26_07-26-29/image_processes/command.log b/src/log/build_2023-05-26_07-26-29/image_processes/command.log new file mode 100644 index 0000000..b7ddd24 --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/image_processes/command.log @@ -0,0 +1,2 @@ +Invoking command in '/home/garima/first_ws/src/image_processes': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed +Invoked command in '/home/garima/first_ws/src/image_processes' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-26_07-26-29/image_processes/stderr.log b/src/log/build_2023-05-26_07-26-29/image_processes/stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/src/log/build_2023-05-26_07-26-29/image_processes/stdout.log b/src/log/build_2023-05-26_07-26-29/image_processes/stdout.log new file mode 100644 index 0000000..4add01e --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/image_processes/stdout.log @@ -0,0 +1,37 @@ +running egg_info +creating ../build/image_processes/image_processes.egg-info +writing ../build/image_processes/image_processes.egg-info/PKG-INFO +writing dependency_links to ../build/image_processes/image_processes.egg-info/dependency_links.txt +writing entry points to ../build/image_processes/image_processes.egg-info/entry_points.txt +writing requirements to ../build/image_processes/image_processes.egg-info/requires.txt +writing top-level names to ../build/image_processes/image_processes.egg-info/top_level.txt +writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +reading manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +running build +running build_py +creating /home/garima/first_ws/src/build/image_processes/build +creating /home/garima/first_ws/src/build/image_processes/build/lib +creating /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +copying image_processes/publisher_member_function.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +copying image_processes/__init__.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +running install +running install_lib +creating /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/publisher_member_function.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/__init__.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/publisher_member_function.py to publisher_member_function.cpython-310.pyc +byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/__init__.py to __init__.cpython-310.pyc +running install_data +creating /home/garima/first_ws/src/install/image_processes/share +creating /home/garima/first_ws/src/install/image_processes/share/ament_index +creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index +creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +copying resource/image_processes -> /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +creating /home/garima/first_ws/src/install/image_processes/share/image_processes +copying package.xml -> /home/garima/first_ws/src/install/image_processes/share/image_processes +running install_egg_info +Copying ../build/image_processes/image_processes.egg-info to /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes-0.0.0-py3.10.egg-info +running install_scripts +Installing webcam_publisher script to /home/garima/first_ws/src/install/image_processes/lib/image_processes +writing list of installed files to '/home/garima/first_ws/src/build/image_processes/install.log' diff --git a/src/log/build_2023-05-26_07-26-29/image_processes/stdout_stderr.log b/src/log/build_2023-05-26_07-26-29/image_processes/stdout_stderr.log new file mode 100644 index 0000000..4add01e --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/image_processes/stdout_stderr.log @@ -0,0 +1,37 @@ +running egg_info +creating ../build/image_processes/image_processes.egg-info +writing ../build/image_processes/image_processes.egg-info/PKG-INFO +writing dependency_links to ../build/image_processes/image_processes.egg-info/dependency_links.txt +writing entry points to ../build/image_processes/image_processes.egg-info/entry_points.txt +writing requirements to ../build/image_processes/image_processes.egg-info/requires.txt +writing top-level names to ../build/image_processes/image_processes.egg-info/top_level.txt +writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +reading manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +running build +running build_py +creating /home/garima/first_ws/src/build/image_processes/build +creating /home/garima/first_ws/src/build/image_processes/build/lib +creating /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +copying image_processes/publisher_member_function.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +copying image_processes/__init__.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +running install +running install_lib +creating /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/publisher_member_function.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/__init__.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/publisher_member_function.py to publisher_member_function.cpython-310.pyc +byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/__init__.py to __init__.cpython-310.pyc +running install_data +creating /home/garima/first_ws/src/install/image_processes/share +creating /home/garima/first_ws/src/install/image_processes/share/ament_index +creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index +creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +copying resource/image_processes -> /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +creating /home/garima/first_ws/src/install/image_processes/share/image_processes +copying package.xml -> /home/garima/first_ws/src/install/image_processes/share/image_processes +running install_egg_info +Copying ../build/image_processes/image_processes.egg-info to /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes-0.0.0-py3.10.egg-info +running install_scripts +Installing webcam_publisher script to /home/garima/first_ws/src/install/image_processes/lib/image_processes +writing list of installed files to '/home/garima/first_ws/src/build/image_processes/install.log' diff --git a/src/log/build_2023-05-26_07-26-29/image_processes/streams.log b/src/log/build_2023-05-26_07-26-29/image_processes/streams.log new file mode 100644 index 0000000..edc805a --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/image_processes/streams.log @@ -0,0 +1,39 @@ +[0.420s] Invoking command in '/home/garima/first_ws/src/image_processes': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed +[0.586s] running egg_info +[0.586s] creating ../build/image_processes/image_processes.egg-info +[0.587s] writing ../build/image_processes/image_processes.egg-info/PKG-INFO +[0.587s] writing dependency_links to ../build/image_processes/image_processes.egg-info/dependency_links.txt +[0.587s] writing entry points to ../build/image_processes/image_processes.egg-info/entry_points.txt +[0.587s] writing requirements to ../build/image_processes/image_processes.egg-info/requires.txt +[0.587s] writing top-level names to ../build/image_processes/image_processes.egg-info/top_level.txt +[0.587s] writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +[0.588s] reading manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +[0.588s] writing manifest file '../build/image_processes/image_processes.egg-info/SOURCES.txt' +[0.588s] running build +[0.588s] running build_py +[0.588s] creating /home/garima/first_ws/src/build/image_processes/build +[0.588s] creating /home/garima/first_ws/src/build/image_processes/build/lib +[0.589s] creating /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +[0.589s] copying image_processes/publisher_member_function.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +[0.589s] copying image_processes/__init__.py -> /home/garima/first_ws/src/build/image_processes/build/lib/image_processes +[0.589s] running install +[0.589s] running install_lib +[0.589s] creating /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +[0.589s] copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/publisher_member_function.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +[0.589s] copying /home/garima/first_ws/src/build/image_processes/build/lib/image_processes/__init__.py -> /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes +[0.590s] byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/publisher_member_function.py to publisher_member_function.cpython-310.pyc +[0.590s] byte-compiling /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes/__init__.py to __init__.cpython-310.pyc +[0.590s] running install_data +[0.591s] creating /home/garima/first_ws/src/install/image_processes/share +[0.591s] creating /home/garima/first_ws/src/install/image_processes/share/ament_index +[0.591s] creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index +[0.591s] creating /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +[0.591s] copying resource/image_processes -> /home/garima/first_ws/src/install/image_processes/share/ament_index/resource_index/packages +[0.591s] creating /home/garima/first_ws/src/install/image_processes/share/image_processes +[0.591s] copying package.xml -> /home/garima/first_ws/src/install/image_processes/share/image_processes +[0.591s] running install_egg_info +[0.592s] Copying ../build/image_processes/image_processes.egg-info to /home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages/image_processes-0.0.0-py3.10.egg-info +[0.592s] running install_scripts +[0.605s] Installing webcam_publisher script to /home/garima/first_ws/src/install/image_processes/lib/image_processes +[0.606s] writing list of installed files to '/home/garima/first_ws/src/build/image_processes/install.log' +[0.627s] Invoked command in '/home/garima/first_ws/src/image_processes' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed diff --git a/src/log/build_2023-05-26_07-26-29/logger_all.log b/src/log/build_2023-05-26_07-26-29/logger_all.log new file mode 100644 index 0000000..b19d9de --- /dev/null +++ b/src/log/build_2023-05-26_07-26-29/logger_all.log @@ -0,0 +1,116 @@ +[0.226s] DEBUG:colcon:Command line arguments: ['/usr/bin/colcon', 'build'] +[0.226s] DEBUG:colcon:Parsed command line arguments: Namespace(log_base=None, log_level=None, verb_name='build', build_base='build', install_base='install', merge_install=False, symlink_install=False, test_result_base=None, continue_on_error=False, executor='parallel', parallel_workers=12, event_handlers=None, ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, allow_overriding=[], cmake_args=None, cmake_target=None, cmake_target_skip_unavailable=False, cmake_clean_cache=False, cmake_clean_first=False, cmake_force_configure=False, ament_cmake_args=None, catkin_cmake_args=None, catkin_skip_building_tests=False, verb_parser=, verb_extension=, main=>) +[0.307s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) check parameters +[0.308s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) check parameters +[0.308s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) check parameters +[0.308s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) check parameters +[0.308s] Level 1:colcon.colcon_core.package_discovery:discover_packages(colcon_meta) discover +[0.308s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) discover +[0.308s] INFO:colcon.colcon_core.package_discovery:Crawling recursively for packages in '/home/garima/first_ws/src' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ignore', 'ignore_ament_install'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ignore_ament_install' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_pkg'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_pkg' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['colcon_meta'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'colcon_meta' +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['ros'] +[0.308s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'ros' +[0.315s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['cmake', 'python'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'cmake' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extensions ['python_setup_py'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(.) by extension 'python_setup_py' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extensions ['ignore', 'ignore_ament_install'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(build) by extension 'ignore' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(build) ignored +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['ignore', 'ignore_ament_install'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'ignore' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'ignore_ament_install' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['colcon_pkg'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'colcon_pkg' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['colcon_meta'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'colcon_meta' +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['ros'] +[0.316s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'ros' +[0.317s] DEBUG:colcon.colcon_core.package_identification:Found ROS schema reference in package manifest in 'image_processes' +[0.317s] WARNING:colcon.colcon_core.package_identification:Failed to parse ROS package manifest in 'image_processes': Error(s) in package 'image_processes/package.xml': +Error(s): +- The generic dependency on 'rclpy' is redundant with: exec_depend +[0.317s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['cmake', 'python'] +[0.317s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'cmake' +[0.318s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'python' +[0.318s] DEBUG:colcon.colcon_core.package_identification:Python package in 'image_processes' passes arguments to the setup() function which requires a different identification extension than 'python' +[0.318s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extensions ['python_setup_py'] +[0.318s] Level 1:colcon.colcon_core.package_identification:_identify(image_processes) by extension 'python_setup_py' +[0.500s] DEBUG:colcon.colcon_core.package_identification:Package 'image_processes' with type 'python' and name 'image_processes' +[0.500s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extensions ['ignore', 'ignore_ament_install'] +[0.500s] Level 1:colcon.colcon_core.package_identification:_identify(install) by extension 'ignore' +[0.500s] Level 1:colcon.colcon_core.package_identification:_identify(install) ignored +[0.500s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extensions ['ignore', 'ignore_ament_install'] +[0.501s] Level 1:colcon.colcon_core.package_identification:_identify(log) by extension 'ignore' +[0.501s] Level 1:colcon.colcon_core.package_identification:_identify(log) ignored +[0.501s] Level 1:colcon.colcon_core.package_discovery:discover_packages(recursive) using defaults +[0.501s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) discover +[0.501s] Level 1:colcon.colcon_core.package_discovery:discover_packages(ignore) using defaults +[0.501s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) discover +[0.501s] Level 1:colcon.colcon_core.package_discovery:discover_packages(path) using defaults +[0.517s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) check parameters +[0.517s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) discover +[0.518s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 2 installed packages in /home/garima/first_ws/install +[0.519s] DEBUG:colcon.colcon_installed_package_information.package_discovery:Found 281 installed packages in /opt/ros/rolling +[0.521s] Level 1:colcon.colcon_core.package_discovery:discover_packages(prefix_path) using defaults +[0.552s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_args' from command line to 'None' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_target' from command line to 'None' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_target_skip_unavailable' from command line to 'False' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_clean_cache' from command line to 'False' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_clean_first' from command line to 'False' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'cmake_force_configure' from command line to 'False' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'ament_cmake_args' from command line to 'None' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'catkin_cmake_args' from command line to 'None' +[0.553s] Level 5:colcon.colcon_core.verb:set package 'image_processes' build argument 'catkin_skip_building_tests' from command line to 'False' +[0.553s] DEBUG:colcon.colcon_core.verb:Building package 'image_processes' with the following arguments: {'ament_cmake_args': None, 'build_base': '/home/garima/first_ws/src/build/image_processes', 'catkin_cmake_args': None, 'catkin_skip_building_tests': False, 'cmake_args': None, 'cmake_clean_cache': False, 'cmake_clean_first': False, 'cmake_force_configure': False, 'cmake_target': None, 'cmake_target_skip_unavailable': False, 'install_base': '/home/garima/first_ws/src/install/image_processes', 'merge_install': False, 'path': '/home/garima/first_ws/src/image_processes', 'symlink_install': False, 'test_result_base': None} +[0.553s] INFO:colcon.colcon_core.executor:Executing jobs using 'parallel' executor +[0.556s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete +[0.556s] INFO:colcon.colcon_core.task.python.build:Building Python package in '/home/garima/first_ws/src/image_processes' +[0.559s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_core.shell.bat': Not used on non-Windows systems +[0.559s] INFO:colcon.colcon_core.shell:Skip shell extension 'powershell' for command environment: Not usable outside of PowerShell +[0.559s] DEBUG:colcon.colcon_core.shell:Skip shell extension 'dsv' for command environment +[0.976s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoking command in '/home/garima/first_ws/src/image_processes': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed +[1.183s] DEBUG:colcon.colcon_core.event_handler.log_command:Invoked command in '/home/garima/first_ws/src/image_processes' returned '0': PYTHONPATH=/home/garima/first_ws/src/build/image_processes/prefix_override:/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages:${PYTHONPATH} /usr/bin/python3 setup.py egg_info --egg-base ../build/image_processes build --build-base /home/garima/first_ws/src/build/image_processes/build install --record /home/garima/first_ws/src/build/image_processes/install.log --single-version-externally-managed +[1.188s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes' for CMake module files +[1.188s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes' for CMake config files +[1.189s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes/lib' +[1.190s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes/bin' +[1.190s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes/lib/pkgconfig/image_processes.pc' +[1.190s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes/lib/python3.10/site-packages' +[1.191s] Level 1:colcon.colcon_core.shell:create_environment_hook('image_processes', 'pythonpath') +[1.193s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/image_processes/share/image_processes/hook/pythonpath.ps1' +[1.194s] INFO:colcon.colcon_core.shell:Creating environment descriptor '/home/garima/first_ws/src/install/image_processes/share/image_processes/hook/pythonpath.dsv' +[1.194s] INFO:colcon.colcon_core.shell:Creating environment hook '/home/garima/first_ws/src/install/image_processes/share/image_processes/hook/pythonpath.sh' +[1.196s] Level 1:colcon.colcon_core.environment:checking '/home/garima/first_ws/src/install/image_processes/bin' +[1.196s] Level 1:colcon.colcon_core.environment:create_environment_scripts_only(image_processes) +[1.198s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/image_processes/share/image_processes/package.ps1' +[1.199s] INFO:colcon.colcon_core.shell:Creating package descriptor '/home/garima/first_ws/src/install/image_processes/share/image_processes/package.dsv' +[1.200s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/image_processes/share/image_processes/package.sh' +[1.201s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/image_processes/share/image_processes/package.bash' +[1.202s] INFO:colcon.colcon_core.shell:Creating package script '/home/garima/first_ws/src/install/image_processes/share/image_processes/package.zsh' +[1.203s] Level 1:colcon.colcon_core.environment:create_file_with_runtime_dependencies(/home/garima/first_ws/src/install/image_processes/share/colcon-core/packages/image_processes) +[1.203s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:closing loop +[1.204s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:loop closed +[1.204s] DEBUG:colcon.colcon_parallel_executor.executor.parallel:run_until_complete finished with '0' +[1.204s] DEBUG:colcon.colcon_core.event_reactor:joining thread +[1.210s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.terminal_notifier': Not used on non-Darwin systems +[1.210s] INFO:colcon.colcon_core.plugin_system:Skipping extension 'colcon_notification.desktop_notification.win32': Not used on non-Windows systems +[1.210s] INFO:colcon.colcon_notification.desktop_notification:Sending desktop notification using 'notify2' +[1.225s] DEBUG:colcon.colcon_core.event_reactor:joined thread +[1.227s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.ps1' +[1.227s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_ps1.py' +[1.228s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.ps1' +[1.231s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.sh' +[1.231s] INFO:colcon.colcon_core.shell:Creating prefix util module '/home/garima/first_ws/src/install/_local_setup_util_sh.py' +[1.232s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.sh' +[1.234s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.bash' +[1.235s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.bash' +[1.237s] INFO:colcon.colcon_core.shell:Creating prefix script '/home/garima/first_ws/src/install/local_setup.zsh' +[1.238s] INFO:colcon.colcon_core.shell:Creating prefix chain script '/home/garima/first_ws/src/install/setup.zsh' diff --git a/src/log/latest b/src/log/latest new file mode 120000 index 0000000..b57d247 --- /dev/null +++ b/src/log/latest @@ -0,0 +1 @@ +latest_build \ No newline at end of file diff --git a/src/log/latest_build b/src/log/latest_build new file mode 120000 index 0000000..6a3262a --- /dev/null +++ b/src/log/latest_build @@ -0,0 +1 @@ +build_2023-05-26_07-26-29 \ No newline at end of file From f5cc465ad3b7d2fc85b0ca716ae41ab0df2b7ef1 Mon Sep 17 00:00:00 2001 From: Garima-tl <130911547+Garima-tl@users.noreply.github.com> Date: Thu, 8 Jun 2023 15:49:14 +0530 Subject: [PATCH 2/2] added launch file --- .../launch/image_cropping.launch.py | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 src/image_processes/launch/image_cropping.launch.py diff --git a/src/image_processes/launch/image_cropping.launch.py b/src/image_processes/launch/image_cropping.launch.py new file mode 100755 index 0000000..6889219 --- /dev/null +++ b/src/image_processes/launch/image_cropping.launch.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 + +from launch import LaunchDescription, LaunchService +import launch +from launch_ros.actions import Node +from launch.actions import DeclareLaunchArgument +from launch.substitutions import LaunchConfiguration + +def generate_launch_description(): + webcam_publisher = Node( + package='image_processes', + executable='webcam_publisher', + output='screen' + ) + + image_cropper = Node( + package='image_processes', + executable='webcam_subscriber', + output='screen' + ) + + image_display = Node( + package='image_processes', + executable='webcam_display', + output='screen' + ) + + return LaunchDescription([ + webcam_publisher, + image_cropper, + image_display + ]) + + +if __name__ == '__main__': + ld = generate_launch_description() + ls = LaunchService() + ls.include_launch_description(ld) + ls.run()