NXT-G软件自定义模块(MyBlocks)使用指南
立即解锁
发布时间: 2025-08-17 00:56:02 阅读量: 5 订阅数: 9 


乐高MINDSTORMS编程实战指南
### NXT - G软件自定义模块(My Blocks)使用指南
#### 1. 什么是My Blocks
NXT - G软件自带了各种各样有用的模块来帮助我们构建程序,同时它还允许我们创建自己的自定义模块,即“My Blocks”。My Blocks是NXT - G软件模块的集合,它们可以创建子程序或函数,这些子程序或函数能够在其他NXT - G软件程序中重复使用。
在NXT - G软件中,Common和Complete面板包含预定义的软件模块,而Custom面板则用于访问My Blocks。My Blocks在程序序列中很容易识别,它们通常是蓝色的。
#### 2. 使用My Blocks的原因
使用My Blocks有多个好处:
- **代码复用**:如果在程序中反复使用某一模块序列,就可以创建一个包含该通用序列的My Block。之后,每当需要这个特定的模块序列时,只需将该My Block添加到程序中即可。
- **节省内存**:LEGO MINDSTORMS NXT砖块的内存有限,而使用My Blocks可以在不占用额外内存的情况下复用代码。因为无论引用多少次,My Block只占用一个内存位置。
- **简化程序管理**:My Blocks可以将大型程序分解成更小、更易于管理的代码片段。当程序变得庞大时,逻辑跟踪会变得困难,将不同的逻辑部分分组到My Blocks中,不仅使代码更易于理解,而且管理和调试也更加简单。即使不打算在其他程序中复用My Blocks,它们也能很好地组织大型NXT - G程序。
#### 3. 简单示例:创建DelaySequence My Block
下面我们来创建一个名为“DelaySequence”的My Block,它的功能是播放一个提示音,显示一个沙漏图标,然后等待四秒钟。创建这个序列只需要四个NXT - G软件模块。这个模块可以反复使用,使程序在继续处理序列之前暂停四秒钟。
创建步骤如下:
1. **构建包含所需模块的程序**:先组合一个NXT - G程序,其中包含将用于DelaySequence My Block的模块。程序中可能还有其他模块,但只有高亮显示的模块会成为新My Block的一部分。
- 高亮显示的模块包括:
1. 一个Sound模块,用于播放提示音。
2. 一个Display模块,用于在NXT屏幕上显示沙漏图标。
3. 一个Wait模块,用于使程序暂停四秒钟。
4. 最后,另一个Display模块,用于清除屏幕上的沙漏图标。
2. **测试代码**:在创建My Block之前,应原封不动地测试代码,以确认它按预期工作。在原生代码序列中测试My Block代码序列会更容易。
3. **创建My Block**:
- 高亮显示想要包含在新My Block中的模块。
- 选择工具栏上的“Create My Block”按钮,或者在编辑菜单中选择“Make A New My Block”。此时会弹出My Block Builder对话框,里面包含你选择的四个模块。
- 为模块命名:尽量给模块取一个能描述其功能的名称,方便他人了解My Block的作用。这里我们将新模块命名为DelaySequence。注意不要使名称过长,因为My Block图标上只显示前13个字符。Description框可以用于输入更详细的说明,解释模块的功能和工作方式。
- 选择图标:在My Block Builder对话框中选择“Next”按钮后,需要选择一个图标来代表新的My Block。如果不选择图标,将使用通用的My Block图标。在图标选择屏幕上,可以选择任何图标并将其拖到图标编辑器中。还可以选择多个图标图形并在图标编辑器中组合它们,也可以通过选择图标上出现的小黑方块来调整图标大小。
- 完成创建:按下“Finish”按钮,新的My Block“DelaySequence”就创建完成了。此时代码中原来的四个模块会被新创建的My Block替换。如果序列梁上原来模块的位置有多余的空白空间,可以将光标放在序列梁上并按住,向左拖动梁以移除空白空间。
下面是创建DelaySequence My Block的流程图:
```mermaid
graph TD;
A[构建包含所需模块的程序] --> B[测试代码];
B --> C[高亮显示模块];
C --> D[选择创建My Block方式];
D --> E[命名My Block];
E --> F[选择图标];
F --> G[完成创建];
```
#### 4. 编辑My Block内容
创建新的DelaySequence块所使用的模块在程序中不再可见,但它们并没有消失。要查看和编辑My Block内部的代码,只需双击该块,或者高亮显示该块并从编辑菜单中选择“Edit Selected My Block”。这将在工作区打开一个新标签,其中包含My Block中定义的代码序列。代码标签有一个带有两个蓝色条的图标,表明该标签代表的是My Block内部的代码,而不是常规程序。
在My Block工作区中,可以像处理其他NXT - G程序一样更改代码模块。但要注意,所做的任何更改都会影响DelaySequence My Block的所有实例,所以要清楚在哪些地方使用了这个My Block,并考虑更改带来的后果。不过,这种特性也有好处,即更改可以在其他程序中复用。例如,假设编写了一个用于控制机器人导航的特殊My Block,最初使用的是3英寸直径的轮子,现在将轮子换成2.5英寸直径的,只需更改导航My Block中的必要值,所有使用该My Block的程序在下一次编译并重新加载到NXT时都会应用这个更改。
需要注意的是,所有使用该My Block的程序都必须重新编译并加载到NXT,更改才能在现有代码中生效。
#### 5. 实际案例:My Block拯救比赛
在一次活动中,一个团队发现机器人上超声波传感器的位置干扰了机器人上的一个附件。团队需要将超声波传感器移动到机器人底盘的另一个位置。这样一来,程序中使用的距离值就会出错,因为传感器现在距离机器人底盘前端大约远了一英寸。
好在读取超声波传感器值的代码被浓缩到一个单独的My Block中,并在团队使用的各个程序中重复使用。通过更改My Block中的距离值,团队只需重新编译所有使用该My Block的程序,就能快速恢复正常,而且风险和工作量都很小。
#### 6. 使用My Block
创建好DelaySequence My Block后,就可以像使用其他NXT - G软件模块一样使用它。打开Custom面板,选择My Block面板并展开,就能看到新创建的My Block。要使用它,只需将My Block拖到序列栏,就像拖动普通模块一样。如果需要在代码中创建多个延迟,可以多次添加该My Block。
下面是使用My Block的操作步骤总结:
1. 打开Custom面板。
2. 选择My Block面板并展开。
3. 找到所需的My Block。
4. 将My Block拖到序列栏。
#### 7. My Block的属性设置
##### 7.1 单属性设置
以一个名为TouchDown的My Block为例,它的功能是在触摸传感器被按下时放下机器人的附件臂。大多数情况下,这个块中的值不会改变,但如果更改了附件臂的设计,正确放下臂所需的旋转度数可能会改变。
在原始的TouchDown My Block中,电机旋转的度数是硬编码的。为了使这个值可调整,需要使用数据导线(Data Wires)。数据导线是NXT - G软件在模块之间传输数据的方式,这些数据可以是功率或速度值、逻辑值(如真或假),甚至是用于屏幕显示的文本值。
设置单属性的步骤如下:
1. **重新创建My Block**:由于在My Block创建后不能添加或删除属性值,所以需要重新创建。这也说明了在创建My Block之前花时间设计的重要性,提前知道块需要哪些属性可以节省重新创建的时间。
2. **添加Constant块**:在原始的TouchDown My Block序列中添加一个Constant块,它可以保存一个值,如数字、逻辑值(真或假)或文本。在这个例子中,使用一个数字Constant块,通过数据导线将其连接到电机块的Duration属性。Constant块中默认保存的值为90度,这意味着电机将旋转90度。
3. **创建新My Block**:高亮显示原始序列中的两个块,将新的Constant块留在选择范围之外。由于选择会跨越数据导线,连接到导线且在选择范围之外的值将成为新My Block的属性。高亮显示所需的块后,选择工具栏上的Create My Block按钮。
4. **完成创建和属性命名**:在My Block Builder对话框中,虽然Constant块不是My Block定义的一部分,但仍有一条数据导线连接到一个数据连接器,这个数据连接器将成为新创建的My Block的属性。完成My Block的命名和图标选择后,新的TouchDown块将插入到程序中,并且会有一条数据导线将新My Block连接到Constant块。选择TouchDown块时,它现在有一个关联的属性,当前标签为Duration。如果想更改属性名称,只需双击TouchDown块进行编辑,在数据连接器上可以看到“Duration”标签,若看不到该值,可以点击数据连接器并拖动以更清楚地看到标签,然后高亮显示标签并输入新的属性名称,如“Arm Rotation Degrees”。
##### 7.2 多属性设置
通常希望给My Block添加多个属性,以增加其灵活性。添加多个属性的操作与创建单属性类似,但要确保数据导线配置正确,以便在选择要包含在新My Block中的模块时,代表属性的数据导线位于选择区域之外。
例如,代码中包含两条数据导线,一条用于电机的持续时间,另一条用于电机的方向。持续时间连接到一个数字Constant块,方向使用一个逻辑Constant块。但如果块在序列梁上的位置不合适,可能无法在不包含其中一个Constant块的情况下选择所需的块(Wait Touch和Motor)。这时需要重新定位Constant块,使其位于所需选择区域之外,然后选择所需的块并创建新的My Block。在Create My Block对话框中会看到代表属性的两条数据导线,同样可以双击标签并根据需要命名属性。
##### 7.3 共享值
另一种将数据值传入My Block的方法是使用变量。My Block有自己独立的变量集合,与使用该My Block的程序分开。但如果在主程序和My Block中给变量取相同的名称,这个变量的内存位置将在两者之间共享,从而实现值的共享。也就是说,如果在主代码中设置了一个变量的值,My Block内部的代码也可以访问该值。
#### 8. 管理和共享My Blocks
有时候需要复制一个块并重新使用它。例如,有一个TouchDown My Block,它在触摸传感器被按下时移动电机A以放下机器人的附件臂。如果想要一个在触摸传感器释放时抬起附件臂的My Block,可以复制TouchDown My Block并创建一个新的名为TouchUp的块。
复制和创建新块的步骤如下:
1. 从编辑菜单中选择“Manage Custom Palette”,会打开一个文件对话框,显示系统中My Blocks文件夹的内容。
2. 找到TouchDown My Block程序并高亮显示,然后从编辑菜单中选择Copy。
3. 再从编辑菜单中选择Paste,列表中会出现一个新文件。
4. 高亮显示新文件,右键单击(或按键盘上的F2)将文件重命名为TouchUp。
5. 打开新的TouchUp My Block,更改其中的代码。打开时会发现它的代码与TouchDown程序相同,根据需要进行修改即可。
下面是复制和创建新My Block的流程图:
```mermaid
graph TD;
A[选择Manage Custom Palette] --> B[找到TouchDown My Block];
B --> C[复制TouchDown My Block];
C --> D[粘贴新文件];
D --> E[重命名为TouchUp];
E --> F[打开并修改代码];
```
通过以上内容,我们详细了解了NXT - G软件中My Blocks的创建、编辑、使用、属性设置以及管理和共享等方面的知识和操作方法。合理使用My Blocks可以提高编程效率,优化程序结构,让我们在使用NXT - G软件进行编程时更加得心应手。
### NXT - G软件自定义模块(My Blocks)使用指南
#### 9. My Blocks使用场景总结
|使用场景|操作方法|优势|
| ---- | ---- | ---- |
|代码复用|创建包含常用模块序列的My Block,在需要时添加到程序中|减少重复编写代码的工作量,提高编程效率|
|节省内存|使用My Block复用代码,只占用一个内存位置|充分利用有限的NXT砖块内存|
|简化程序管理|将大型程序分解为多个My Block|使代码逻辑更清晰,便于管理和调试|
|灵活调整参数|通过设置My Block的属性,使用数据导线或变量传递值|可根据不同需求灵活调整My Block的行为|
|快速复制修改|复制已有的My Block并进行修改,创建新的My Block|基于已有功能快速创建新的功能模块|
#### 10. 常见问题及解决方法
在使用My Blocks过程中,可能会遇到一些常见问题,以下是相应的解决方法:
- **问题1:My Block创建后无法添加或删除属性**
- **原因**:My Block创建机制决定了属性一旦确定不能随意增减。
- **解决方法**:在创建My Block之前,充分规划好所需的属性。如果后续需要添加或删除属性,只能重新创建My Block。
- **问题2:修改My Block代码后,程序未更新**
- **原因**:所有使用该My Block的程序必须重新编译并加载到NXT,更改才能生效。
- **解决方法**:对所有使用该My Block的程序进行重新编译和加载操作。
- **问题3:数据导线连接错误导致属性设置失败**
- **原因**:在创建多属性My Block时,数据导线配置不正确,导致属性无法正确设置。
- **解决方法**:确保在选择包含在新My Block中的模块时,代表属性的数据导线位于选择区域之外。如果出现问题,重新调整模块位置和数据导线连接。
#### 11. 最佳实践建议
为了更好地使用My Blocks,以下是一些最佳实践建议:
- **提前规划**:在创建My Block之前,仔细考虑其功能和所需的属性,避免后续频繁重新创建。
- **命名规范**:给My Block和属性取有意义的名称,方便自己和他人理解其功能。名称不宜过长,确保在My Block图标上能清晰显示关键信息。
- **合理使用图标**:选择合适的图标来代表My Block,可通过组合多个图标创建自定义图标,增强辨识度。
- **测试验证**:在创建和修改My Block后,及时进行测试,确保其功能符合预期。
- **备份管理**:定期备份重要的My Blocks,防止数据丢失。同时,合理管理My Blocks文件夹,便于查找和复用。
#### 12. 总结与展望
My Blocks为NXT - G软件编程提供了强大的功能扩展和代码管理能力。通过创建自定义模块,我们可以实现代码复用、节省内存、简化程序管理等目标。同时,通过设置属性和共享变量,My Blocks具有更高的灵活性和可扩展性。
在未来的编程中,我们可以进一步探索My Blocks的应用场景,结合更多的传感器和执行器,开发出更复杂、更智能的机器人程序。例如,可以创建一系列用于机器人导航、避障、抓取等功能的My Blocks,构建一个功能丰富的My Blocks库,方便在不同项目中快速复用。
此外,随着技术的不断发展,NXT - G软件可能会对My Blocks功能进行进一步优化和扩展,我们可以持续关注软件更新,充分利用新的特性来提升编程效率和机器人的性能。
总之,掌握My Blocks的使用方法是提高NXT - G软件编程水平的关键一步,希望本文的介绍能帮助大家更好地运用这一强大工具,创造出更出色的机器人程序。
下面是一个使用My Blocks构建机器人程序的整体流程图:
```mermaid
graph LR;
A[规划程序功能] --> B[创建My Blocks];
B --> C[设置My Block属性];
C --> D[组合My Blocks构建主程序];
D --> E[测试程序];
E --> F{是否满足需求};
F -- 是 --> G[部署程序到NXT];
F -- 否 --> H[修改My Blocks或程序];
H --> D;
```
通过以上内容,我们全面深入地了解了NXT - G软件中My Blocks的相关知识和操作技巧,希望大家在实际编程中能够灵活运用,发挥出My Blocks的最大优势。
0
0
复制全文
相关推荐









