| name | content-writer |
| description | Write technical content for the Physical AI textbook including chapters, examples, code snippets, and exercises. Use when creating new chapters, writing module content, adding code examples, or creating assessments. |
Content Writer Skill
Instructions
Chapter Structure
- Start with learning objectives (3-5 bullet points)
- Include "Prerequisites" section linking to prior chapters
- Use h2 for major topics, h3 for subtopics
- End with "Key Takeaways" and "Next Steps"
Code Examples
- Always include working, tested code
- Add comments explaining key lines
- Provide both minimal and full examples
- Include expected output in comments
Technical Accuracy
- Verify all commands with Context7 before writing
- Check version compatibility (ROS 2, Python 3.11+, etc.)
- Link to official documentation
- Include troubleshooting tips
Exercises & Assessments
- Progressive difficulty (beginner → advanced)
- Include hints and solutions (collapsible)
- Tie to real-world robotics scenarios
- Provide rubrics for self-assessment
RAG-Friendly Formatting
- Use descriptive headings (not "Introduction" alone)
- Include frontmatter: title, description, module, week, tags
- Avoid excessive nesting (max 3 levels)
- Keep paragraphs focused (1 idea per paragraph)
Examples
---
title: "ROS 2 Nodes and Topics"
description: "Learn to create ROS 2 nodes that communicate via topics"
module: 1
week: 3
tags: [ros2, nodes, topics, python, rclpy]
---
# ROS 2 Nodes and Topics
## Learning Objectives
By the end of this chapter, you will be able to:
- Create a ROS 2 node using Python and rclpy
- Publish messages to a topic
- Subscribe to topics and process incoming messages
- Understand the ROS 2 communication graph
## Prerequisites
- [Week 1-2: Introduction to Physical AI](/docs/module-1/week-1-2/intro)
- Python 3.10+ installed
- ROS 2 Humble or later
## Creating Your First Node
A ROS 2 node is the fundamental building block...
```python
import rclpy
from rclpy.node import Node
class MinimalPublisher(Node):
def __init__(self):
super().__init__('minimal_publisher')
self.publisher_ = self.create_publisher(String, 'topic', 10)
# Timer fires every 0.5 seconds
self.timer = self.create_timer(0.5, self.timer_callback)
def timer_callback(self):
msg = String()
msg.data = 'Hello, Physical AI!'
self.publisher_.publish(msg)
self.get_logger().info(f'Publishing: {msg.data}')
Key Takeaways
- Nodes are independent processes in ROS 2
- Topics enable publish-subscribe communication
rclpyis the Python client library for ROS 2
Next Steps
Continue to Week 4: ROS 2 Services
## Definition of Done
- Chapter follows structure template
- All code examples are tested and working
- Frontmatter complete with proper tags
- Links to prerequisites and next chapters included
- At least one exercise with solution