-
Jetson Orin NX in ROS 00(스크랩)카테고리 없음 2023. 6. 5. 20:30
올해는 팀을 이뤄 개인이동장치를 만들고 있다. 메인칩은 jetson orin nx로 자율주행과 몇 가지 편리한 기능을 넣을 것이다. 지금 orin에 설치된 Jetpack버전은 5.1(L4T 35.2.1)이며 로봇 개발을 위한 플랫폼인 ROS를 쓸 계획이다. ROS1과 ROS2를 함께 사용할 수 있는 ubuntu20.04에서 작업을 할 것이고, 일단 우리가 쓸 ROS버전은 foxy이다. ROS를 설치하면 다양한 기능을 바로 쓸 수가 있는데 몇 개를 소개한다.
rviz2: 3D 시각화 도구로, 로봇 및 센서 데이터를 시각화하고 디버깅
rqt_graph: ROS 그래프를 시각화하여 현재 실행 중인 노드 및 토픽 간 관계 확인
rqt_console: ROS의 디버깅 및 메시지 로깅 도구, 노드에서 발생하는 메시지 모니터링
rqt_plot: 실시간 그래프 도구, 토픽의 데이터를 실시간으로 플로팅하여 시각화
rqt_bag: ROS bag파일 재생, 분석, 노드의 메시지 기록을 재생하거나 저장된 데이터 분석
ros2 launch: 여러 노드를 한 번에 실행하고 관리하는 도구
ros2 param: ROS 2 매개변수를 설정하고 가져오는 도구아래는 ROS2 foxy를 설치한 직후의 install 디렉터리
ROS에 대해 안내하는 좋은 블로그를 소개한다.
https://velog.io/@7cmdehdrb/whatIsROS
초보자를 위한 ROS : ROS란 무엇인가
ROS란 무엇이고, ROS를 이용하면 어떤 장점을 가지는지 알아본다
velog.io
블로그 중 전략
ROS가 제공하는 도구(tool) ROS는 로봇 프로그래밍에 있어서 많은 도구들을 제공해준다. 그 중에서도 가장 많이 사용하게 될 도구들은 바로 시각화 도구이다.
강력한 시각화 도구 RVIZ
ROS 프로그래밍에서 가장 많이 사용하게 될 시각화 도구는 바로 RVIZ이다. RVIZ는 ROS에서 노드들이 발행하는 메세지를 별도의 작업 없이 바로 시각화 할 수 있는 매우 강력한 도구이다. 한번 실제 코드를 보면 이해하기 훨씬 쉬울 것이다.
예를 들어, 차량의 현재 위치에 대한 메세지를 발행한다고 해보자.
ROS에서는 이에 대한 메세지 타입으로 nav_msg.msg.Odometry 라는 클래스를 제공해준다.#!/usr/bin/env python import rospy from nav_msgs.msg import Odometry import math from tf.transformations import quaternion_from_euler if __name__ == '__main__': rospy.init_node("odometry") # define node name publisher = rospy.Publisher("odom", Odometry, queue_size=5) # publisher name: odom, msg type: Odometry r = rospy.Rate(10) # node speed : 10hz while not rospy.is_shutdown(): msg = Odometry() # define msg msg.header.frame_id = "odom" msg.header.stamp = rospy.Time.now() msg.child_frame_id = "base_link" msg.pose.pose.position.x = 4 msg.pose.pose.position.y = 3 msg.pose.pose.position.z = 0 quat = quaternion_from_euler(0, 0, math.radians(30)) msg.pose.pose.orientation.x = quat[0] msg.pose.pose.orientation.y = quat[1] msg.pose.pose.orientation.z = quat[2] msg.pose.pose.orientation.w = quat[3] publisher.publish(msg) # publish msg r.sleep()
이번에는 실제로 동작하는 코드로, 10hz의 주기로, (x, y, z) = (4, 3, 0), 그리고 z축 방향(yaw)으로 30'만큼 회전해 있는 Odometry 클래스의 메세지를 발행하는 매우 단순한 코드이다. 이 코드를 실행한 상태로 RVIZ를 실행하면 아래와 같이 보인다.
놀랍게도, 파이썬 코드 그 어디에도 시각화 관련 코드는 존재하지 않지만, RVIZ가 알아서 메세지를 수신받아서 시각화 해주었다! (빨, 초, 파 순으로 x, y, z축이다) 그렇다면 이번에는 시간이 지남에 따라 점점 앞으로 전진하는 코드로 바꾸어보자.
#!/usr/bin/env python import rospy from nav_msgs.msg import Odometry import math from tf.transformations import quaternion_from_euler if __name__ == '__main__': rospy.init_node("odometry") # define node name publisher = rospy.Publisher("odom", Odometry, queue_size=5) # publisher name: odom, msg type: Odometry x_position = 0.0 r = rospy.Rate(1) # node speed : 1hz while not rospy.is_shutdown(): msg = Odometry() # define msg msg.header.frame_id = "odom" msg.header.stamp = rospy.Time.now() msg.child_frame_id = "base_link" msg.pose.pose.position.x = x_position msg.pose.pose.position.y = 0 msg.pose.pose.position.z = 0 quat = quaternion_from_euler(0, 0, math.radians(0)) msg.pose.pose.orientation.x = quat[0] msg.pose.pose.orientation.y = quat[1] msg.pose.pose.orientation.z = quat[2] msg.pose.pose.orientation.w = quat[3] x_position += 0.2 publisher.publish(msg) # publish msg r.sleep()
위 코드는 아까 전의 코드에서 약간 수정하여, 1hz 주기로 작동하며, 1초마다 x로 0.2씩 이동하는 Odometry 메세지를 발행한다.
GIF로 바꾸면서 화질이 나빠지긴 했지만... 빨간 화살표 모양의 Odometry가 앞으로 전진하는 것을 확인할 수 있다.
중요한 것은, 이런식으로 ROS가 제공해주는 메세지들은 전부 RVIZ 상에서 별도의 과정 없이 직접 시각화가 가능하다는 점이다!
4. 결론
ROS는 로봇 프로그래밍을 위한 라이브러리로, 사용할 경우 그렇지 않을 때에 비하여 많은 장점을 가진다. 또한, 시각화 도구를 비롯하여 많은 개발상 편의 도구를 제공해준다. ROS 설계의 철학을 이해하고, 이를 잘 활용한다면, 앞으로 로봇 프로그래밍에 있어서 마주할 다양한 문제들을 ROS를 이용하여 쉽게 해결할 수 있을 것이다.