welcom ! Handel home

2025年4月14日 星期一

建立 ROS 2 機器人開發專案 Workspace sheet demo

 #!/bin/bash

# 建立 ROS 2 機器人開發專案 Workspace

set -e


# Workspace 路徑

WORKSPACE=~/ros2_robotics_ws

mkdir -p $WORKSPACE/src

cd $WORKSPACE


# 初始化 ROS 2 Workspace

source /opt/ros/humble/setup.bash

colcon build --symlink-install


# === 1. 建立範例機器人套件 ===

cd src

ros2 pkg create --build-type ament_python my_robot_pkg

cd my_robot_pkg


# 建立資料夾

mkdir -p urdf launch config micro_ros_interface


# === 2. 機器人 URDF 檔案 ===

cat <<EOF > urdf/my_robot.urdf

<robot name="demo_robot">

  <link name="base_link"/>

  <joint name="base_to_link1" type="fixed">

    <parent link="base_link"/>

    <child link="link1"/>

  </joint>

  <link name="link1">

    <visual>

      <geometry>

        <box size="0.5 0.1 0.1"/>

      </geometry>

    </visual>

  </link>

</robot>

EOF


# === 3. Gazebo + RViz Launch File ===

cat <<EOF > launch/robot_world.launch.py

from launch import LaunchDescription

from launch_ros.actions import Node

from launch.actions import IncludeLaunchDescription

from launch.launch_description_sources import PythonLaunchDescriptionSource

from launch.substitutions import Command

import os


def generate_launch_description():

    pkg_path = os.path.join(os.getenv('HOME'), 'ros2_robotics_ws/src/my_robot_pkg')

    urdf_path = os.path.join(pkg_path, 'urdf/my_robot.urdf')


    return LaunchDescription([

        Node(

            package='robot_state_publisher',

            executable='robot_state_publisher',

            name='state_pub',

            parameters=[{'robot_description': Command(['cat', urdf_path])}]

        ),

        Node(

            package='rviz2',

            executable='rviz2',

            name='rviz2',

            arguments=['-d', os.path.join(pkg_path, 'config/robot.rviz')],

            output='screen'

        )

    ])

EOF


# === 4. RViz 設定檔 ===

cat <<EOF > config/robot.rviz

Visualization Manager:

  Class: "rviz/VisualizationManager"

  Displays:

    - Name: RobotModel

      Class: rviz/RobotModel

      Enabled: true

EOF


# === 5. 建立 micro-ROS 模擬 node ===

cat <<EOF > micro_ros_interface/micro_sim.py

import rclpy

from rclpy.node import Node

from std_msgs.msg import String


class MicroSim(Node):

    def __init__(self):

        super().__init__('micro_sim')

        self.publisher_ = self.create_publisher(String, 'pico_status', 10)

        self.timer = self.create_timer(1.0, self.timer_callback)


    def timer_callback(self):

        msg = String()

        msg.data = 'Hello from micro-ROS simulated node!'

        self.publisher_.publish(msg)

        self.get_logger().info('Publishing: "%s"' % msg.data)


rclpy.init()

node = MicroSim()

rclpy.spin(node)

node.destroy_node()

rclpy.shutdown()

EOF


# === 6. 安裝 Python 依賴與 entry point ===

cat <<EOF > setup.py

from setuptools import setup


package_name = 'my_robot_pkg'


setup(

    name=package_name,

    version='0.0.0',

    packages=[package_name],

    data_files=[('share/' + package_name + '/launch', ['launch/robot_world.launch.py']),

                ('share/' + package_name + '/urdf', ['urdf/my_robot.urdf']),

                ('share/' + package_name + '/config', ['config/robot.rviz'])],

    install_requires=['setuptools'],

    zip_safe=True,

    maintainer='demo_user',

    maintainer_email='user@example.com',

    description='Demo robot package for Pi4 + ROS2 + micro-ROS',

    license='MIT',

    entry_points={

        'console_scripts': [

            'micro_sim = my_robot_pkg.micro_sim:main'

        ],

    },

)

EOF


mkdir my_robot_pkg

mv micro_ros_interface/micro_sim.py my_robot_pkg/micro_sim.py


# === 7. 完成 Build ===

cd $WORKSPACE

colcon build --symlink-install


# 提示

echo "✅ 專案建立完成!請執行以下指令:"

echo "source ~/ros2_robotics_ws/install/setup.bash"

echo "ros2 launch my_robot_pkg robot_world.launch.py"

echo "ros2 run my_robot_pkg micro_sim"


===============================================

已為你建立整套範例 Workspace 結構,包含:

  • URDF 機器人模型

  • Launch 啟動檔(載入 robot + RViz)

  • RViz 設定

  • micro-ROS 模擬 node

  • setup.pycolcon build 支援


🔧 使用方式:

bash
chmod +x install_ros2_robotics_env.sh ./install_ros2_robotics_env.sh # 一鍵安裝環境(如尚未執行) cd ~/ros2_robotics_ws source install/setup.bash # 編譯環境載入 ros2 launch my_robot_pkg robot_world.launch.py ros2 run my_robot_pkg micro_sim # 執行 micro-ROS 模擬節點

如果你想加入:

  • Gazebo 模擬啟動

  • MoveIt2 控制流程

  • micro-ROS 實體 Pico 節點整合



沒有留言: