Python을 사용하여 ROS(로봇 운영체제)와 통신하기 위한 라이브러리



ROS Foxy는 Ubuntu 20.04 (Focal) 이상에서 지원됩니다.
따라서 사용 중인 Ubuntu 버전이 20.04인지 확인해야 합니다.
터미널을 열고 다음 명령어를 실행하여 Ubuntu 버전을 확인합니다:
lsb_release -a
출력된 정보에서 "Description"이 "Ubuntu 20.04.x LTS"와 같은 형식인지 확인합니다.
ROS Foxy를 설치하기 위해 다음 명령어를 터미널에 입력합니다:
sudo apt update
sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2.list'
sudo apt update
sudo apt install ros-foxy-desktop
위 명령어는 ROS Foxy 설치에 필요한 패키지를 설치하고, ROS 저장소를 시스템에 추가한 후 ROS Foxy Desktop 설치를 수행합니다.
ROS를 사용하기 위해 환경을 설정해야 합니다. 다음 명령어를 실행하여 ROS 환경을 설정합니다:
source /opt/ros/foxy/setup.bash
이 명령어를 터미널 세션마다 실행하거나, .bashrc 파일에 해당 명령어를 추가하여 로그인할 때마다 자동으로 환경이 설정되도록 할 수 있습니다:
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc
이제 ROS Foxy가 설치되었으며, ROS 명령어 및 도구를 사용할 수 있습니다.
pip install roslibpy
pip가 설치 되어있지 않은 경우
sudo apt install python3-pip
ros2 pkg create {패키지 이름} --build-type ament_python --dependencies rclpy
패키지 이름은 보통 my_package로 쓰는듯
다음부터 나올 코드에는 my_package로 표기하겠다
2. Python 스크립트 파일을 생성한다
cd my_package
mkdir src
touch src/my_script.py
import roslibpy
# ROS 마스터에 연결
client = roslibpy.Ros(host='{웹소켓 주소}')
client.run()
# 토픽 구독 콜백 함수
def callback(message):
print('Received message:', message)
# 토픽 구독
listener = roslibpy.Topic(client, '{토픽이름}', 'std_msgs/String')
listener.subscribe(callback)
# 메시지 발행
publisher = roslibpy.Topic(client, '{토픽이름}', 'std_msgs/String')
message = roslibpy.Message({'data': 'Hello, ROS!'})
publisher.publish(message)
# 연결 종료
client.terminate()
listener가 메세지 수신, publisher가 메세지를 발신하는 코드이다
더 많은 예시코드는 https://roslibpy.readthedocs.io/en/latest/examples.html 를 참고
chmod +x src/my_script.py
colcon build --packages-select my_package
ros2 run my_package my_script.py
ros2 run을 돌렸을 때 Package {이름} not found라는 오류가 뜰 경우,
root 폴더에서 colcon build 명령어를 사용해 빌드해주고
source install/setup.bash 이 명령어를 실행해주면 된다
빨리 소켓통신 해주시죠? ಠ_ಠ (갓 속눈썹펌한 ㅎㅅ,ㅈㅇ)