1.6.6 单目相机仿真(Python)

1.发布方实现

功能包py03_camera的py03_camera目录下,新建Python文件sim_camera.py,并编辑文件,输入如下内容:

"""  
    需求:模拟相机,发布一张图片。
    流程:
        1.导包;
        2.初始化ROS2客户端;
        3.自定义节点类;
          3-1.创建图片发布方;
          3-2.创建定时器循环发布图片。             
        4.调用spin函数,并传入节点对象;
        5.资源释放。 


"""
# 1.导包;
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image
import numpy

# 3.自定义节点类;
class SimCamera(Node):
    def __init__(self):
        super().__init__("sim_camera_node_py")
        # 3-1.创建图片发布方;
        self.image_pub = self.create_publisher(Image,"image",10)
        # 3-2.创建定时器循环发布图片。
        self.timer = self.create_timer(1.0,self.on_timer)

    def on_timer(self):
        # 组织数据
        image = Image()
        image.header.stamp = self.get_clock().now().to_msg()
        image.header.frame_id = "camera"

        image.encoding = "rgb8"
        image.width = 640
        image.height = 480

        image.step = image.width * 3

        image_data = numpy.zeros((image.height,image.width,3),dtype=numpy.uint8)
        image_data[:image.height // 3,:,:] = [255,0,0]
        image_data[image.height // 3 : image.height // 3 * 2,:,:] = [0,255,0]
        image_data[image.height // 3 * 2:,:,:] = [0,0,255]

        image.data = image_data.tobytes()

        # 发布
        self.image_pub.publish(image)

def main():
    # 2.初始化ROS2客户端;
    rclpy.init()
    # 4.调用spain函数,并传入节点对象;
    rclpy.spin(SimCamera())
    # 5.资源释放。 
    rclpy.shutdown()

if __name__ == '__main__':
    main()

2.编辑配置文件

1.package.xml

在创建功能包时,所依赖的功能包已经自动配置了,配置内容如下:

<depend>rclpy</depend>
<depend>sensor_msgs</depend>
2.setup.py

setup.py文件中entry_points字段的console_scripts中添加如下内容:

entry_points={
    'console_scripts': [
        'sim_camera = py03_camera.sim_camera:main'
    ],
},

3.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select py03_camera

4.执行

当前工作空间下,启动终端,并输入如下指令:

. install/setup.bash
ros2 run py03_camera sim_camera

5.使用rviz2查看结果

新建终端,输入如下指令:

rviz2

rviz2启动后,添加image插件并将话题设置为"/image",最终运行结果与演示案例类似。

results matching ""

    No results matching ""