《ROS機器人程式設計》期中測評試卷 (ROS2)

2022-01-06 10:00:04

課程以ROS2-F/G版講解為主。



文字版:

一、單選題(本大題共6小題, 每小題4分, 共24分。)
1、ROS2預設支援的作業系統平臺不包括(  )。
A. windows;    B. linux;     C. macos;      D. aliyun
2、ROS2主要使用的C++標準為(  )。
A. C++03;  B. C++11;   C. C++14;    D. C++17
3、ROS2中編譯功能包主要使用命令是(  )
 A. catkin_make;         B. ament build; 
 C. colcon build;         D. catkin build
4、C++中uint8_t對應的ROS2的型別是(  )。
A. bool;B. byte;C. int8;D. char
5、ROS2中QoS重要的功能包括(  )。
A.建立通訊; B. 防止宕機; C. 避免「過時」資料;  D. 監控節點
6、下面命名不符合ROS2規範的是(  )。
A.abc; B.abc123;C.123;D._abc

二、判斷題(每小題4分, 5題共20分。

1、(  )ROS2支援在嵌入式系統上(如STM32/ESP32等)執行。

2、(  )ROS2支援主流程式語言進行程式碼編寫如C++和Python等。

3、(  )ROS2使用ROS_DOMAIN_ID避免同一網路不同組計算機之間干擾。

4、(  )ROS2使用者端庫包括rclcpp和rclpy。

5、(  )一個需要長時間執行的任務通常採用行動(action)方式實現。

三、多選題(每小題4分, 5題共20分。

1、ROS2的DDS安全特性包括(  )。

A、身份驗證 B、加密記錄 C、存取控制 D、資料標記

2ROS2常用命令有(  )。

A、roscore  B、rqt  C、rviz2  D、colcon

3、ROS2原始碼編譯後,所在資料夾下有哪些目錄(  )。

A、src  B、devel  C、build  D、install

4、下面程式碼哪些可以關閉ROS2程式(  )。

A、rclcpp::shutdown(); B、rclpy.shutdown() C、exit() D、end()

5、ROS2的CLI包含(  )。

A、ros2 component B、ros2 launch C、ros2 pkg D、ros2 security

程式題(36

閱讀如下程式碼,在劃線處給出註釋(12分),結合圖片說明程式實現的功能(12分),如何改變圖中三維點雲(12分)。

import numpy as np
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import PointCloud2
from sensor_msgs.msg import PointField
from sensor_msgs_py import point_cloud2
from std_msgs.msg import Header          ————————————————

class PointCloudPublisher(Node): 
    rate = 30
    moving = True
    width = 100
    height = 100                        ————————————————
    header = Header()
    header.frame_id = 'map'
    dtype = PointField.FLOAT32
    point_step = 16
    fields = [PointField(name='x', offset=0, datatype=dtype, count=1),
              PointField(name='y', offset=4, datatype=dtype, count=1),
              PointField(name='z', offset=8, datatype=dtype, count=1),
              PointField(name='intensity', offset=12, datatype=dtype, count=1)]
 
    def __init__(self):
        super().__init__('pc_publisher')
        self.publisher_ = self.create_publisher(PointCloud2, 'test_cloud', 10)
        timer_period = 1 / self.rate
        self.timer = self.create_timer(timer_period, self.timer_callback)
        self.counter = 0
                                      ——————————————————
    def timer_callback(self):
        self.header.stamp = self.get_clock().now().to_msg()
        x, y = np.meshgrid(np.linspace(-2, 2, self.width), np.linspace(-2, 2, self.height))
        z = 0.5 * np.sin(2*x-self.counter/10.0) * np.sin(2*y)
        points = np.array([x, y, z, z]).reshape(4, -1).T
        pc2_msg = point_cloud2.create_cloud(self.header, self.fields, points)
        self.publisher_.publish(pc2_msg)
        if self.moving:
            self.counter += 1
                                      ——————————————————
def main(args=None):
    rclpy.init(args=args)
    pc_publisher = PointCloudPublisher()
    rclpy.spin(pc_publisher)
    pc_publisher.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()