welcom ! Handel home

2025年4月14日 星期一

檢查 RRC (ROS Robot Control) 馬達控制板的連線狀態

 如何檢查 RRC (ROS Robot Control) 馬達控制板的連線狀態,並提供完整的 通訊範例(使用 /dev/ttyACM0 串列通訊)。


🧭 一、RRC 控制板連線檢查步驟

✅ 1. 確認設備是否出現

bash
ls /dev/ttyACM*

應該會顯示:

bash
/dev/ttyACM0

✅ 2. 查看系統訊息確認驅動載入

bash
dmesg | grep ttyACM

會看到類似:

csharp
[12345.678901] cdc_acm 1-1.2:1.0: ttyACM0: USB ACM device

✅ 3. 使用 screen / minicom 測試控制板回應

如果你知道板子會在接收特定命令後回傳資料,可以用:

bash
sudo apt install screen screen /dev/ttyACM0 115200

或:

bash
minicom -b 115200 -D /dev/ttyACM0

手動輸入命令(如 STATUS\n),觀察是否回應。


🧪 二、簡單 Python 測試腳本(非 ROS)

📄 test_rrc.py

python
import serial try: ser = serial.Serial('/dev/ttyACM0', 115200, timeout=2) print("[INFO] Connected to RRC") # 傳送測試命令(根據 RRC 協定自行修改) test_command = 'STATUS\n' ser.write(test_command.encode()) # 等待回應 response = ser.readline().decode().strip() print("[RESPONSE] ", response) except serial.SerialException as e: print("[ERROR] Serial connection failed:", e)

執行:

bash
python3 test_rrc.py

🧩 三、ROS 通訊完整示範

📄 rrc_serial_node.py(ROS 節點)

python
#!/usr/bin/env python import rospy import serial from std_msgs.msg import String class RRCSerialNode: def __init__(self): port = rospy.get_param("~port", "/dev/ttyACM0") baud = rospy.get_param("~baud", 115200) try: self.ser = serial.Serial(port, baud, timeout=1) rospy.loginfo("✅ Connected to RRC on %s", port) except serial.SerialException as e: rospy.logerr("❌ Could not open port: %s", e) exit(1) rospy.Subscriber("rrc_command", String, self.command_cb) self.status_pub = rospy.Publisher("rrc_status", String, queue_size=10) rospy.Timer(rospy.Duration(1.0), self.read_status) def command_cb(self, msg): cmd = msg.data.strip() rospy.loginfo("Sending command: %s", cmd) self.ser.write((cmd + '\n').encode()) def read_status(self, event): if self.ser.in_waiting: line = self.ser.readline().decode(errors='ignore').strip() if line: rospy.loginfo("RRC says: %s", line) self.status_pub.publish(line) if __name__ == '__main__': rospy.init_node("rrc_serial_node") node = RRCSerialNode() rospy.spin()

📄 rrc_driver.launch

xml
<launch> <node pkg="your_rrc_pkg" type="rrc_serial_node.py" name="rrc_serial_node" output="screen"> <param name="port" value="/dev/ttyACM0"/> <param name="baud" value="115200"/> </node> </launch>

🧪 發送控制指令範例

bash
rostopic pub /rrc_command std_msgs/String "data: 'MOTOR 1 FORWARD 100'"

🔄 接收回應

查看:

bash
rostopic echo /rrc_status

✅ 常見指令範例(依你板子的協定修改)

指令功能說明
STATUS查詢狀態
MOTOR 1 FORWARD 100控制 1 號馬達正轉 100PWM
MOTOR 2 BACKWARD 80控制 2 號馬達反轉 80PWM
STOP停止所有馬達

📦 建議的 ROS 套件結構

go
your_rrc_pkg/ ├── launch/ │ └── rrc_driver.launch ├── scripts/ │ └── rrc_serial_node.py ├── package.xml └── CMakeLists.txt

記得讓 scripts/rrc_serial_node.py 有執行權限:

bash
chmod +x scripts/rrc_serial_node.py

📚 補充

如果你願意提供 RRC 控制板的命令格式、通訊協定或簡易手冊,我可以:

  • 幫你寫出專屬 ROS 驅動節點

  • 做 topic/service 封裝

  • 對應 motor encoder / IMU feedback 等功能

沒有留言: