基于旭日派的Ros系统小车的再开发——使用python脚本Astra调用深度相机(学习笔记)

本文介绍了RobotOperatingSystem(ROS)的基本概念,包括其作为机器人操作系统的架构、节点通信机制以及提供的传感器和执行器管理。同时,详细讲解了如何在ROS中使用AstraProPlus深度相机,涉及设备识别、启动服务、图像获取与可视化等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Ros系统的简要介绍:


        ROS 是你的机器人的操作系统。它运行在各种不同类型的计算机上的标准 Linux 系统之上,如树莓派或其他的一些单片机、以及笔记本电脑或台式电脑。

        ROS中可执行的程序的基本单位是:节点(node)

        节点之间通过消息机制进行通信,这就组成了:算图(abac)

        节点之间通过收发消息进行通信,消息的收发机制分为:话题(topic)、服务(service)和动作(action)

    1. ROS 提供了一种标准的方式来连接所有的传感器(摄像机、距离传感器、模拟到数字转换器、 IMU)和执行器(驱动马达、伺服系统、灯) ,并与控制软件一起做出决定。这是一种粘合效应,把所有这些联系在一起,并且为你省去了在机器人身上传递数据的烦恼。

    2. ROS 可以帮助你轻松地让多台计算机或微处理器在机器人上或通过网络进行通信。例如,你可以通过网络驱动桌面计算机上的 ROS 机器人,或者让更强大的计算机处理计算密集型任务,而不是在机器人上完成。

    3. ROS 为复杂的行为提供了库,比如地图构建和定位(SLAM),LIDAR 和其他传感器的使用,以及处理视频。一旦你让你的机器人以ROS预期的方式与之链接,你就可以集成这些功能而不需要从头开始编写代码。

    4. ROS 还有一些非常有用的工具,用于可视化来自传感器的数据以及数据流动的位置。

    5. 你可以在模拟器中测试 ROS 软件,而无需在真正的机器人硬件上运行它。事实上,你可以只用一台基本计算机而无需其他硬件来编写和运行 ROS 软件。你在模拟器上编写和测试的代码可以很容易地移植到真正的机器人上。

2、Astra Pro Plus深度相机的使用

    1.  驱动深度相机前,需要在系统端识别到Astra相机设备。当系统镜像中已经搭建好环境,SSH连接到系统之后, 在终端输入,

ll /dev/astra*

2.1、程序功能说明

        程序运行后,驱动Astra相机,可以获取到彩色RGB、深度Depth、红外IR的图像信息以及深度点云信息。

2.2、服务程序启动

    使用launch启动命令:

launch文件相机型号
ros2 launch astra_camera astra_pro.launch.xmlAstrapro
ros2 launch astra_camera astro_pro_plus.launch.xmlAstraproplus
ros2 launch astra_camera astra.launch.xmlAstramini 

    这里以启动Astraproplus相机为例,SSH连接系统后,终端输入:

ros2 launch astra_camera astro_pro_plus.launch.xml

    在这之后我们可以使用以下命令查看话题,虚拟机终端中输入

ros2 topic list

    主要的几个话题如下,(示例,可能因系统而异)

话题名字话题内容
/camera/color/image_rawRGB彩色图像数据
/camera/depth/image_rawDepth深度图像数据
/camera/depth/pointsDepth深度点云数据
/camera/ir/image_rawIR红外图像数据

2.3、图像可视化

        1. 使用rqt_image_view工具查看图像数据

    虚拟机终端中输入:(然后在左上角选择相对应需要显示的图像话题)

ros2 run rqt_image_view rqt_image_view

        2.使用python脚本查看图像数据

import cv2
import numpy as np
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
from datetime import datetime


class DepthCameraSubscriberNode(Node):
    def __init__(self):
        super().__init__('depth_camera_subscriber')
        self.subscription = self.create_subscription(
            Image,
            '/camera/color/image_raw',
            self.depth_callback,
            10
        )
        self.subscription  # 避免subscription被当做垃圾回收

        self.cv_bridge = CvBridge()
        self.depth_image_count = 1
        self.save_image = False

    def depth_callback(self, msg):
        try:
            depth_image = self.cv_bridge.imgmsg_to_cv2(msg)

            cv2.imshow('Depth Image', depth_image)

            key = cv2.waitKey(1)
            if key == ord('s') or self.save_image:
                file_name = f'depth_image_{self.depth_image_count}.png'
                cv2.imwrite(file_name, depth_image)
                print(f'Saved depth image as {file_name}')
                self.depth_image_count += 1
                self.save_image = False
            elif key == ord(' '):
                # 按下空格键退出程序
                cv2.destroyAllWindows()
                rclpy.shutdown()
                exit()

        except Exception as e:
            print('Error: ', e)


def main(args=None):
    rclpy.init(args=args)
    depth_camera_subscriber_node = DepthCameraSubscriberNode()
    rclpy.spin(depth_camera_subscriber_node)


if __name__ == '__main__':
    main()

    具体参数根据系统和配置去更改,这里只以个人系统为例,如后续有任何不懂的地方,欢迎留言评论讨论!!!

    通往答案的道路错综复杂,我们只用最简单的方式抵达!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值