本学年的大作业:课程设计
安装jupyterlab
:
sudo apt install pipx
pipx install jupyterlab
重启终端,使新的环境变量生效。然后启动jupyter-lab:
jupyter-lab
在浏览器中打开网址http://localhost:8888
,即可进入jupyter lab的工作界面。
什么是“课程设计”?
课程设计是本科教学中一个系统化的实践教学环节,旨在帮助学生将所学的理论知识应用于实际问题的解决中,从而加深对专业知识的理解,并提高实践能力。
课程设计的教学要求包括以下几个方面:
- 理论联系实际:课程设计应注重理论与实践的结合,学生需通过查阅资料、方案设计、实验验证、程序编写等步骤,完成一个完整的项目。
- 独立完成任务:学生应独立完成课程设计任务,严禁抄袭,以培养其独立思考和解决问题的能力。
- 综合运用知识:课程设计要求学生综合运用所学课程的理论知识,解决实际问题,如《计算机专业课程设计规范》中提到的,学生需“构造正确的解题方法和算法,使用规定的计算机语言设计出求解问题的程序”。
- 团队协作:在一些综合课程设计中,学生以小组形式进行合作,如《计算机专业课程设计规范》中提到的“学生4至5人一组,随机选取课题,团队协作开发”。这种形式有助于培养学生的团队协作能力和沟通能力。
注:由于本次课程设计作业的规模较小,学生可以独立完成。
01. 课程设计的作业内容
课程设计的任务目标
基于ROS2的话题通信,利用Python编程语言,设计、开发一个简单的发布-订阅系统,实现如下功能:
- 局域网中的某台计算机,作为发布者节点,定期发布本机的系统状态信息(包括信息发布时间、主机名称、CPU使用率、内存使用率、内存总大小、剩余内存)。
- 局域网中的其它计算机,作为订阅者节点,接收并在控制台(终端)打印显示这些数据。
02. 业务流程分析
现场引导大家一起思考. 按照时间顺序,整个系统的业务流程可以分为以下几个步骤:
发布者节点:
- 定期获取本机的系统状态信息。
- 将获取到的信息通过ROS2的话题发布出去。
订阅者节点:
- 订阅发布者节点发布的话题。
- 接收到信息后,在控制台(终端)打印显示。
03. 思考“下一步行动”
DANGER
我该从哪里开始干?
当前的困境:我没有实现过完整的ROS2发布-订阅系统,所以我没有经验,不知从何下手。
奥卡姆剃刀:如无必须,勿增实体
奥卡姆剃刀是一个哲学原则,强调在面对多个解释时,选择最简单的那个。应用到我们的课程设计中,我们可以从最简单的实现开始,逐步增加复杂性。
下一步行动:
- 实现一个最小化系统。
最小化系统可以视作一个“最小可行产品”(MVP),它包含了实现目标所需的最基本功能。
【自上而下的设计】最小化系统的目标是:
- 发布者节点:局域网的一台主机A,能够定期发布一条简单的消息。
- 订阅者节点:局域网的其它主机X,能够接收并打印这条消息。
【自下而上的设计】最小化系统的目标是:
- 本机能够打印一条简单的消息。
- 本机能够打印一条更丰富的信息。
包括时间、主机名、CPU使用率、内存使用率、内存总大小、剩余内存等。
当前的困境
我们应该选择哪条路径来实现最小化系统?
课堂讨论:
- 分析两条路径所面临的挑战和解决方案;
- 通过比较,然后选择其中一条最小系统实现路径。
04. 最小化系统的选择路径:自下而上的设计
(1)本机能够打印一条简单的消息
# 发布者节点:发布一条简单的消息
print("一条简单的消息")
(2)本机能够打印更丰富的信息
我们的困境:如何才能利用Python获取本机的系统状态信息(包括信息发布时间、主机名称、CPU使用率、内存使用率、内存总大小、剩余内存)?
课堂讨论&AI:上述问题
05. 升级最小化系统:局域网中的发布-订阅系统
课堂讨论&AI:如何将上述代码升级为局域网中的发布-订阅系统? /docs/.vitepress/dist
注意有两种情况:(1)本机发送、本机接收;(2)本机发送、其它计算机接收.
作业:学生自行完成,并上机实验.