my_package/
├── package.xml # 패키지 메타정보
├── CMakeLists.txt # 빌드 명세
├── src/ # 노드 소스 코드
├── launch/ # launch 파일
├── config/, msg/, srv/ # (선택) 설정, 메시지, 서비스 정의
mkdir -p ~/ros2_ws/srccd ~/ros2_ws/srcros2 pkg create --build-type ament_python my_package --dependencies rclpycd ~/ros2_wscolcon buildsource ~/ros2_ws/install/local_setup.bash특정 패키지만 빌드
--symlink-install
ㄴ 소스 파일과 패키지를 심볼릭 링크로 연결하여 수정된 파일을 다시 빌드하지 않아도 바로 반영됨--packages-select
ㄴ 특정 파일만 선택
colcon build --symlink-install --packages-select <package_name>
ros_ws/src/my_package/my_package# my_package /my_package/talker.py
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
class Talker(Node):
def __init__(self):
super().__init__('talker')
self.publisher_ = self.create_publisher(String, 'chatter', 10)
self.timer = self.create_timer(1.0, self.timer_callback)
def timer_callback(self):
msg = String()
msg.data = 'Hello, ROS 2'
self.publisher_.publish(msg)
self.get_logger().info(f'Publishing: {msg.data}')
def main():
rclpy.init()
node = Talker()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
entry_points={
'console_scripts': [
// 이 부분 추가
'talker = my_package.talker:main',
],
},
cd ~/ros2_ws
colcon build
source ~/ros2_ws/install/local_setup.bash
노드 직접 실행
ros2 run <패키지명> <노드명>
ros2 run my_package talker
여러 노드를 실행하고 싶으면 터미널 여러 개 열거나 백그라운드 실행
ros2 run my_package node1 &
ros2 run my_package node2 &
ros2 node listros2 node info /talker# my_package/launch/talker_launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
# 생성한 노드를 여기에 추가하면 됨
Node(
package='my_package',
executable='talker',
name='talker_node',
output='screen'
),
# 추가 노드 예시
Node(
package='my_package',
executable='talker2',
name='talker_node2',
output='screen'
),
...
])
ros2 launch my_package talker_launch.py