우리가 설치한 ROS2의 모든 구성 파일은 /opt/ros/humble 이라는 경로에 위치하게 된다. 이 디렉토리 안에 있는 설정 스크립트 파일setup.bash을 터미널에 실행시킴으로써 ROS2 기본 실행 환경을 설정하게 된다.
underlay
opt/ros/humble경로에 모든 ROS2 구성 파일이 설치되는 것을 의미한다./opt/ros/humble경로에 있는setup.bash파일을 터미널에 실행시켜 ROS2를 사용할 수 있는 환경을 설정한다.source명령어는 스크립트를 실행하여 설정된 환경변수를 현재 셀 세션에 반영한다.- 환경 설정 없이 ROS2를 사용하려고 하면 필요한 파일과 경로를 인식하지 못해 실행이 재대로 이뤄지지 않는다.
📌 ROS 기본 환경 설정
nano ~/.bashrc 후 source /opt/ros/humble/setup.bash를 추가하여 ROS 기본환경을 설정해놓는다. 설정이 되면 ROS 2 명령어(ros2 CLI), 메시지 타입, 서비스, 다양한 기본 패키지들을 사용할 수 있게 된다.

overlay
- 사용자가 만든 워크페이스에 ROS2 환경을 설치하는 것을 의미한다.
- 해당 워크스페이의 설정만 적용하므로, 여러 워크스페이스를 사용할 때는 각각 overlay 설정을 해주어야 한다.
📌 워크스페이스 설정
빌드 후 반드시 source install/setup.bash를 실행시켜야 패키지가 ROS2 환경에 인식되도록 해야한다. 이렇게 하면 사용자가 작업 공간에서 빌드한 패키지들을 ROS2 환경에 추가할 수 있다.

src : 패키지의 소스 코드가 들어있는 디렉토리
build : 패키지들이 빌드 중 생간 중간 파일 저장
install : 빌드가 끝난 후 최종적으로 실행 가능한 파일들과 패키지가 설치된 디렉토리
log : 로그 파일(실행 결과)
매번 명령어 실행이 귀찮을 때 Alias를 통해 설정된 별명으로 원래 명령어를 실행 할 수 있다.
1. nano ~/.bashrc로 사용자의 bashrc 환경 설정 파일을 연다.
2. 맨마지막 줄에 다음 코드를 입력한다.
#전체 환경에 ROS2 환경 설정
source /opt/ros/humble/setup.bash
#ros2_Ws 워크페이스에 ROS2 설정 스크립트 실행
alias ros2ws='source ~/ros2_ws/install/setup.bash; echo \"ROS2 humble is activated.\"'

3. 파일 수정 후 source ~/.bashrc 명령어를 실행하여 변경 사항이 적용되도록 한다.
이 명령어를 통해 ROS2가 빌드된 패키지를 인식하고 실행 파일, 메시지타입, 라이브러리 등을 제대로 사용할 수 있다.
물리적으로 동일한 네트워크(Wi-Fi, LAN)에서 여러 ROS2 시스템이 있는 경우, 각 시스템이 서로 영향을 미치지 않도록 ROS_DOMAIN_ID를 다르게 설정하여 충돌을 방지할 수 있다.

talker,listener 둘 다 ROS_DOMAIN_ID=11을 사용했을 때 서로 통신됨을 확인 할수 있다.

listener의 ROS_DOMAIN_ID=12로 다르게 설정하자 반응이 없는 것을 확인할 수 있다.
네임스페이스를 지정하면 동일한 토픽 이름이라 하더라도, 별도의 토픽으로 인식되어 독립적으로 제어할 수 있다. 즉, 여러 대의 로봇이 동일 환경내에서 독립적으로 명령을 수행할 수 있게 된다.
turtlesim과 rqt_graph를 실행해 각 노드와 토픽명을 확인해본다.
ros2 run turtlesim turtlesim_node
rqt_graph

ros2 topic echo /turtle1/cmd_vel 로 토픽을 띄웠을 때 하나의 turtle을 확인할 수 있다.
이제 ns를 사용하여 두 개의 네임스페이스를 만들어본다.
ros2 run turtlesim turtlesim_node --ros-args -r __ns:=/robot1
ros2 run turtlesim turtlesim_node --ros-args -r __ns:=/robot2

토픽 리스트에서 같은 이름의 토픽이 두 개의 네임스페이스에서 생성된 것을 확인할 수 있다.

ros2 topic echo robot1/turtle1/cmd_vel, ros2 topic echo robot2/turtle1/cmd_vel 로 토픽을 띄웠을 때 두개의 turtle을 확인할 수 있다.
def generate_launch_description():
ros_namespace = LaunchConfiguration('ros_namespace')
return LaunchDescription([
DeclareLaunchArgument(
'ros_namespace',
default_value=os.environ['ROS_NAMESPACE'],
description='Namespace for the robot'),
Node(
package='ex_calculator',
namespace=ros_namespace,
executable='argument',
name='argument',
output='screen'),
LaunchConfiguration('ros_namespace') : namespace 라는 이름의 런치 매개변수 정의
Node에서 namespace=ros_namespace 앞서 설정한 ros_namespace로 네임스페이스 이름을 설정
executable : 실행 가능한 노드 이름
name : 노드를 실행할 때 사용할 이름, 일반적으로 executable에 기재한 이름 사용
ros2 launch ex_calculator arithmetic.launch.py ros_namespace:=/robot1

node list에서 네임스페이스가 설정된 것을 확인할 수 있다.