Skip to content

本学年的大作业:课程设计

课前小热身(10 min)

给大家提供一个新的Python交互式编程工具:jupyter-lab(安装文档:Installing Jupyter)

注:上述安装教程的文档中,将pip替换为pipx.

安装jupyterlab:

bash
sudo apt install pipx
pipx install jupyterlab

重启终端,使新的环境变量生效。然后启动jupyter-lab:

bash
jupyter-lab

在浏览器中打开网址http://localhost:8888,即可进入jupyter lab的工作界面。


什么是“课程设计”?

课程设计是本科教学中一个系统化的实践教学环节,旨在帮助学生将所学的理论知识应用于实际问题的解决中,从而加深对专业知识的理解,并提高实践能力。

课程设计的教学要求包括以下几个方面:

  1. 理论联系实际:课程设计应注重理论与实践的结合,学生需通过查阅资料、方案设计、实验验证、程序编写等步骤,完成一个完整的项目。
  2. 独立完成任务:学生应独立完成课程设计任务,严禁抄袭,以培养其独立思考和解决问题的能力。
  3. 综合运用知识:课程设计要求学生综合运用所学课程的理论知识,解决实际问题,如《计算机专业课程设计规范》中提到的,学生需“构造正确的解题方法和算法,使用规定的计算机语言设计出求解问题的程序”。
  4. 团队协作:在一些综合课程设计中,学生以小组形式进行合作,如《计算机专业课程设计规范》中提到的“学生4至5人一组,随机选取课题,团队协作开发”。这种形式有助于培养学生的团队协作能力和沟通能力。

注:由于本次课程设计作业的规模较小,学生可以独立完成。

01. 课程设计的作业内容

课程设计的任务目标

基于ROS2的话题通信,利用Python编程语言,设计、开发一个简单的发布-订阅系统,实现如下功能:

  1. 局域网中的某台计算机,作为发布者节点,定期发布本机的系统状态信息(包括信息发布时间、主机名称、CPU使用率、内存使用率、内存总大小、剩余内存)。
  2. 局域网中的其它计算机,作为订阅者节点,接收并在控制台(终端)打印显示这些数据。

02. 业务流程分析

现场引导大家一起思考. 按照时间顺序,整个系统的业务流程可以分为以下几个步骤:

  1. 发布者节点

    • 定期获取本机的系统状态信息。
    • 将获取到的信息通过ROS2的话题发布出去。
  2. 订阅者节点

    • 订阅发布者节点发布的话题。
    • 接收到信息后,在控制台(终端)打印显示。

03. 思考“下一步行动”

DANGER

我该从哪里开始干?

当前的困境:我没有实现过完整的ROS2发布-订阅系统,所以我没有经验,不知从何下手。

奥卡姆剃刀:如无必须,勿增实体

奥卡姆剃刀是一个哲学原则,强调在面对多个解释时,选择最简单的那个。应用到我们的课程设计中,我们可以从最简单的实现开始,逐步增加复杂性。

下一步行动:

  • 实现一个最小化系统

    最小化系统可以视作一个“最小可行产品”(MVP),它包含了实现目标所需的最基本功能。


【自上而下的设计】最小化系统的目标是:

  1. 发布者节点:局域网的一台主机A,能够定期发布一条简单的消息。
  2. 订阅者节点:局域网的其它主机X,能够接收并打印这条消息。

【自下而上的设计】最小化系统的目标是:

  1. 本机能够打印一条简单的消息。
  2. 本机能够打印一条更丰富的信息。

    包括时间、主机名、CPU使用率、内存使用率、内存总大小、剩余内存等。


当前的困境

我们应该选择哪条路径来实现最小化系统?

课堂讨论

  • 分析两条路径所面临的挑战和解决方案;
  • 通过比较,然后选择其中一条最小系统实现路径。

04. 最小化系统的选择路径:自下而上的设计

(1)本机能够打印一条简单的消息

python
# 发布者节点:发布一条简单的消息
print("一条简单的消息")

(2)本机能够打印更丰富的信息

我们的困境:如何才能利用Python获取本机的系统状态信息(包括信息发布时间、主机名称、CPU使用率、内存使用率、内存总大小、剩余内存)?

课堂讨论&AI:上述问题

05. 升级最小化系统:局域网中的发布-订阅系统

课堂讨论&AI:如何将上述代码升级为局域网中的发布-订阅系统? /docs/.vitepress/dist

注意有两种情况:(1)本机发送、本机接收;(2)本机发送、其它计算机接收.

作业:学生自行完成,并上机实验.