在一台 Ubuntu 上建立 ROS Noetic Master,並讓兩台 Raspberry Pi 4 各自運行兩個節點的範例流程如下:
環境準備
1. 在 Ubuntu 上安裝 ROS Noetic
確保你的 Ubuntu 系統為 20.04,然後按照以下步驟安裝 ROS Noetic:bashsudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-noetic.list' curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-noetic-desktop-full
2. 初始化 rosdep
bashsudo apt install python3-rosdep sudo rosdep init rosdep update
3. 設定環境變數
將 ROS 環境變數添加到.bashrc
中:bashecho "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
建立 ROS Master
在 Ubuntu 上啟動 ROS Master:bashroscore
在 Raspberry Pi 4 上設置 ROS 節點
1. 安裝 ROS Noetic
在每台 Raspberry Pi 4 上安裝相同的 ROS Noetic:bashsudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-noetic.list' curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-noetic-ros-base
2. 初始化 rosdep
bashsudo apt install python3-rosdep sudo rosdep init rosdep update
3. 設定環境變數
在每台 Raspberry Pi 上的.bashrc
檔案中設置 ROS Master URI 和 IP 地址。假設你的 Ubuntu 的 IP 是 192.168.1.100
,而 Raspberry Pi 的 IP 分別是 192.168.1.101
和 192.168.1.102
,則在每台 Raspberry Pi 的 .bashrc
中添加以下行:bashexport ROS_MASTER_URI=http://192.168.1.100:11311 export ROS_IP=192.168.1.101 # 對於第一台 Pi,第二台則改為192.168.1.102
bashsource ~/.bashrc
建立節點
1. 在每台 Raspberry Pi 上創建工作空間
在每台 Raspberry Pi 上創建 Catkin 工作空間:bashmkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make
2. 創建節點
在src
資料夾中創建一個新的 Python 節點,例如 node1.py
和 node2.py
:bashcd ~/catkin_ws/src mkdir my_package cd my_package mkdir scripts touch scripts/node1.py scripts/node2.py chmod +x scripts/node1.py scripts/node2.py
3. 編輯 Python 節點
使用編輯器打開node1.py
和 node2.py
,並添加以下範例代碼(這裡以 node1.py
為例):python#!/usr/bin/env python3 import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('topic_node1', String, queue_size=10) rospy.init_node('node1', anonymous=True) rate = rospy.Rate(10) # 10hz while not rospy.is_shutdown(): msg = "Hello from Node 1" rospy.loginfo(msg) pub.publish(msg) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass
node2.py
,可以類似地創建另一個節點,並更改主題名稱和訊息內容。4. 編譯工作空間
回到工作空間根目錄並編譯:bashcd ~/catkin_ws/ catkin_make
啟動節點
在每台 Raspberry Pi 上啟動你的節點:bashsource ~/catkin_ws/devel/setup.bash rosrun my_package node1.py # 第一台 Pi 執行 node1.py rosrun my_package node2.py # 第二台 Pi 執行 node2.py
測試通信
在 Ubuntu 主機上,你可以使用以下命令來檢查來自 Raspberry Pi 的訊息:bashrostopic echo /topic_node1 # 查看第一台 Pi 發佈的訊息 rostopic echo /topic_node2 # 如果有第二台 Pi 發佈的訊息,則查看其主題
沒有留言:
張貼留言