welcom ! Handel home

2025年1月13日 星期一

建置 ROS Master 內網域 NODE 範例(主機 + Raspberry Pi 為範例)

 在一台 Ubuntu 上建立 ROS Noetic Master,並讓兩台 Raspberry Pi 4 各自運行兩個節點的範例流程如下:

環境準備

1. 在 Ubuntu 上安裝 ROS Noetic

確保你的 Ubuntu 系統為 20.04,然後按照以下步驟安裝 ROS Noetic:
bash
sudo 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

bash
sudo apt install python3-rosdep sudo rosdep init rosdep update

3. 設定環境變數

將 ROS 環境變數添加到 .bashrc 中:
bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc

建立 ROS Master

在 Ubuntu 上啟動 ROS Master:
bash
roscore

在 Raspberry Pi 4 上設置 ROS 節點

1. 安裝 ROS Noetic

在每台 Raspberry Pi 4 上安裝相同的 ROS Noetic:
bash
sudo 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

bash
sudo 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 中添加以下行:
bash
export ROS_MASTER_URI=http://192.168.1.100:11311 export ROS_IP=192.168.1.101 # 對於第一台 Pi,第二台則改為192.168.1.102
然後執行:
bash
source ~/.bashrc

建立節點

1. 在每台 Raspberry Pi 上創建工作空間

在每台 Raspberry Pi 上創建 Catkin 工作空間:
bash
mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make

2. 創建節點

在 src 資料夾中創建一個新的 Python 節點,例如 node1.py 和 node2.py
bash
cd ~/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. 編譯工作空間

回到工作空間根目錄並編譯:
bash
cd ~/catkin_ws/ catkin_make

啟動節點

在每台 Raspberry Pi 上啟動你的節點:
bash
source ~/catkin_ws/devel/setup.bash rosrun my_package node1.py # 第一台 Pi 執行 node1.py rosrun my_package node2.py # 第二台 Pi 執行 node2.py

測試通信

在 Ubuntu 主機上,你可以使用以下命令來檢查來自 Raspberry Pi 的訊息:
bash
rostopic echo /topic_node1 # 查看第一台 Pi 發佈的訊息 rostopic echo /topic_node2 # 如果有第二台 Pi 發佈的訊息,則查看其主題
這樣,你就成功地在一台 Ubuntu 上建立了 ROS Master,並讓兩台 Raspberry Pi 各自運行兩個節點。

沒有留言: