본 블로그 포스팅은 https://www.youtube.com/@pinklab_studio/playlists
에서 현재 강의 중에 있는

ROS2 무작정 따라하기강의의 내용을 필자가 다시 복기하여 기록하는 내용에 관한 것이다.


1. 추가 노드 작성(Publisher)

이전 포스팅에서 생성한 my_first_package에 신규 노드 : my_subscriber.py를 작성했으니 이번에는 my_publisher.py을 작성하여 아래의 기능을 구현해 보도록 하겠다.

1-1. 코드리뷰

라이브러리

import rclpy as rp
from rclpy.node import Node

from turtlesim.msg import Pose

1번줄이랑 2번줄은 노드 설계시 항상 들어가는 라이브러리라 보면 되고, from turtlesim.msg import Poseturtlesim_node를 제어하려면 turtlesim_node이 수신받을 수 있는 Subscriber topic을 살펴봐야 한다.
이 중 /turtel1/cmd_vel토픽이 터틀봇이 제어되는데 필요한 sub topic이니 이 토픽의 메세지 규격에 맞는 메세지 타입 라이브러리를 import한다.

메인구문

def main(args=None):
    rp.init(args=args)

    turtlesim_publisher = TurtlesimPublisher()
    rp.spin(turtlesim_publisher)

    #노드 종료, 통신종료
    turtlesim_publisher.destroy_node()
    rp.shutdown()

if __name__ == '__main__':
    main()

메인구문은 ROS통신 초기화, 노드객체 'turtlesim_publisher'인스턴스화, 노드객체의 반복실행 등의 기능을 수행한다.

pub 노드 기능 설계

class TurtlesimPublisher(Node):

    def __init__(self):
        super().__init__('turtlesim_publisher')
        #pub 노드가 수행할 일 정하기
        self.publish = self.create_publisher(
            Twist,
            '/turtle1/cmd_vel',
            10
        )
        #발행 속도 정하기 -> timer이용
        time_period = 0.5
        self.timer = self.create_timer(
            time_period,
            self.timer_callback
        )
    
    def timer_callback(self):
        msg = Twist()
        msg.linear.x = 2.0
        msg.angular.z = 2.0
        #여기가 topic 발행하는 부분
        self.publish.publish(msg)

VScode에 라이브러리 인포팅이 잘 되어 있다면
각 함수에 커서를 갖다대면 ROS공식 도큐먼트의 설명글을 참조 할 수 있다.

setup.py에 노드 등록

코드 작성을 완료했다면 , 'my_publisher = my_first_package.my_publisher:main'
구문을 setup.py에 꼭 작성하여 노드 등록을 완료하자


2. 노드 실행

$ cd ros2_workspace
$ colcon build

먼저 위 사진처럼 패키지 빌드을 수행한 뒤

1번 터미널 : 터틀심 노드 실행

$ humble
$ ros2 run turtlesim turtlesim_node



2번 터미널 : Publisher.py 노드 실행

$ cd ros2_workspace
$ r2pkgsetup
$ ros2 run my_first_package my_publisher



3번 터미널 : Subscriber.py 노드 실행

$ cd ros2_workspace
$ r2pkgsetup
$ ros2 run my_first_package my_subscriber

위 3가지 명령어를 각각의 터미널에서 실행한다.

위 그림과 같이 pub, sub, 그리고 이에 의해 제어되는 turtlebot의 구동을 볼 수 있다.


빌드 꼬였을 때 대처방안-개선

이전 포스팅에서
colcon build를 통해서 생성되는
install
build
log
이 3개의 폴더를 삭제해야 한다 언급했으나,

log 이 폴더 하나만 지우면 된다

따라서 이에 따른 개선된 .bashrc코드를 첨부한다

alias r2pkgclear='sudo rm -r ~/ros2_workspace/log/ && \
    echo "ros2 package build list clear!"'
profile
자율차 공부중

0개의 댓글

Powered by GraphCDN, the GraphQL CDN