728x90
반응형
SMALL
SLAM이 제대로 동작하지 않는 이유를 파악하기 위해 AGV를 좌표 기반으로 이동시키는 테스트를 진행했습니다. 이 과정을 블로그에 정리해봅니다! 😊
프로젝트 기본 셋팅 ⚙️
1. 워크스페이스 생성 🏗️
mkdir -p ~/myagv_ws/src
cd ~/myagv_ws
catkin_make # ROS1 기준
source devel/setup.bash
2. 폴더 구조 예시 📂
폴더명 설명
myagv_ws/ | 프로젝트 루트 |
├── src/ | 소스 코드 폴더 |
│ ├── lidar_pkg/ | LiDAR 데이터 관리 |
│ ├── camera_pkg/ | 카메라 데이터 관리 및 ArUco 인식 |
│ ├── motor_pkg/ | 모터 제어 패키지 |
│ ├── myagv_bringup/ | 전체 시스템 통합 |
3. 각 패키지 설명 📌
🔹 lidar_pkg - LiDAR 데이터 관리
cd ~/myagv_ws/src
catkin_create_pkg lidar_pkg rospy sensor_msgs std_msgs
lidar_node.py 예시
#!/usr/bin/env python
import rospy
from sensor_msgs.msg import LaserScan
def lidar_callback(data):
rospy.loginfo("Received LiDAR data: %s", data.ranges[:10])
def main():
rospy.init_node('lidar_node')
rospy.Subscriber('/scan', LaserScan, lidar_callback)
rospy.spin()
if __name__ == "__main__":
main()
🔹 camera_pkg - 카메라 데이터 관리 및 ArUco 인식
cd ~/myagv_ws/src
catkin_create_pkg camera_pkg rospy cv_bridge sensor_msgs geometry_msgs
camera_node.py 예시
#!/usr/bin/env python
import rospy
import cv2
from cv_bridge import CvBridge
from sensor_msgs.msg import Image
bridge = CvBridge()
def image_callback(msg):
frame = bridge.imgmsg_to_cv2(msg, "bgr8")
rospy.loginfo("Processing image frame")
cv2.imshow("Camera Feed", frame)
cv2.waitKey(1)
def main():
rospy.init_node('camera_node')
rospy.Subscriber('/camera/image_raw', Image, image_callback)
rospy.spin()
if __name__ == "__main__":
main()
🔹 motor_pkg - 모터 제어
cd ~/myagv_ws/src
catkin_create_pkg motor_pkg rospy std_msgs
motor_node.py 예시
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def motor_command():
rospy.init_node('motor_node')
pub = rospy.Publisher('/motor/command', String, queue_size=10)
rate = rospy.Rate(10)
while not rospy.is_shutdown():
pub.publish("Move Forward")
rate.sleep()
if __name__ == "__main__":
motor_command()
🔹 myagv_bringup - 통합 실행
cd ~/myagv_ws/src
catkin_create_pkg myagv_bringup rospy
bringup.launch 예시
<launch>
<include file="$(find lidar_pkg)/launch/lidar.launch"/>
<include file="$(find camera_pkg)/launch/camera.launch"/>
<include file="$(find motor_pkg)/launch/motor.launch"/>
</launch>
좌표 기반 AGV 이동 🎯
1. /move_base_simple/goal 토픽 확인 🗺️
rostopic echo /move_base_simple/goal
이제 목표 좌표를 설정하고 이동 여부를 확인할 수 있습니다!
2. 목표 지점 설정 ✨
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import PoseStamped
def set_goal():
rospy.init_node('send_goal', anonymous=True)
pub = rospy.Publisher('/move_base_simple/goal', PoseStamped, queue_size=10)
rospy.sleep(1)
goal = PoseStamped()
goal.header.frame_id = "map"
goal.header.stamp = rospy.Time.now()
goal.pose.position.x = 0.6164789795875549
goal.pose.position.y = 0.1577601134777069
goal.pose.position.z = 0.0
goal.pose.orientation.z = -0.0018928490219073594
goal.pose.orientation.w = 0.9999982085596855
pub.publish(goal)
rospy.loginfo("Goal Sent!")
if __name__ == "__main__":
set_goal()
3. 결과 확인 ✅
rostopic echo /move_base/status
rostopic echo /move_base/result
AGV가 설정한 좌표로 정상적으로 이동하는지 확인하세요! 🚗💨
마무리 🏁
SLAM이 원활하게 동작하지 않을 경우, AGV가 목표 좌표를 잘 따르는지 먼저 확인하는 것이 중요합니다. 위 과정대로 진행하면 AGV의 네비게이션이 정상 작동하는지 쉽게 검증할 수 있습니다. 🚀
혹시 궁금한 점이 있으면 댓글로 남겨주세요! 😊
728x90
반응형
LIST
'프로젝트 > 1차 프로젝트[AGV]' 카테고리의 다른 글
🎥[KG_KAIROS]1차 프로젝트 AGV_LKS(Lane Keeping System) (3) | 2024.11.16 |
---|