Hƣớng phát triển

Một phần của tài liệu Luận văn tốt nghiệp triển khai thuật toán định hướng trên ROS cho robot tự hành trong nhà (Trang 90 - 97)

14- Tổng quát về bản thuyết minh:

5.4. Hƣớng phát triển

Hiện tại trong đề tài, hệ điều hành ROS chạy trên một máy tính đặt trên robot. Trong tƣơng lai ta có thể nghiên cứu khả năng phân tán computational graph của ROS trên nhiều máy tính và dữ liệu truyền qua mạng tới các node trên từng máy.

Để tăng chất lƣợng odometry, ta có thể tích hợp thêm cảm biến IMU chuyên dụng và GPS trên ROS. Với khả năng ƣớc lƣợng tọa độ chính xác hơn, ta có thể tăng độ chính xác trong quá trình SLAM tạo bản đồ cho robot. Thực tế trong luận văn cho thấy, bản đồ càn chính xác Navigation Stack càng hoạt động hiệu quả.

Với quá trình tự hành, ta có thể sử dụng cảm biến laser chuyên dụng để tìm đƣợc thông tin khoảng cách có tầm xa lớn hơn giới hạn 5m của Kinect. Giúp tăng khả năng định vị của giải thuật

Tài liệu tham khảo

[1] Sebastian Thrun, Wolfram Burgard and Dieter Fox, Probabilistic Robotics

[2] Lại Thanh Phƣớc, Xác định đƣờng đi của robot dùng Kinect trên nền tảng robot operating system

[3] Thomas Bräul, Embedded Robotics – Mobile Robot Design and Application with Embedded System.

[4] Rasoul Mojtahedzadeh, Robot Obstacle Avoidance using the Kinect

[5] Jonathan Dixon, Oliver Henlich, Mobile Robot Navigation

[6] Jonathan Dixon and Oliver Henlich (June 1997), Mobile Robot Navigation

[7] http://wiki.ros.org/navigation/Tutorials/RobotSetup [8] Kinect http://msdn.microsoft.com/en-us/library/hh973074.aspx [9] http://wiki.ros.org/navigation [10] http://wiki.ros.org/amcl [11] http://wiki.ros.org/map_server [12] http://wiki.ros.org/ROS [13] http://wiki.ros.org/tf Demo video http://www.youtube.com/watch?v=-soyRKjUX-8&list=FLfjdWVQuiLYgCOFcZkt7iPA&index=1 http://www.youtube.com/watch?v=mZrx58R4iT4

Phụ lục 1 – HƢỚNG DẪN LẬP TRÌNH ROS TRÊN IDE ECLIPSE.

Nội dung phụ lục hƣớng dẫn cụ thể cách tạo, biên dịch và debug cho một package ROS. Ta có thể xem thêm nội dung trên ROS wiki để có đầy đủ các thông tin liên quan tới cài đặt ROS. Eclipse IDE cần có Java 7 Runtime Environment để hoạt động, ta có thể download và cài đặt Eclipse và Java 7 trực tiếp từ trang chủ của các chƣơng trình hay Software Center của Ubuntu.

ROS hiện nay có hai phƣơng thức quản lý các package là rosbuild và catkin. Catkin cho phép ta quản lý package và stack linh hoạt hơn khi ta không cần phải đặt directory của một package dƣới directory của một stack. Rosbuild thích hợp cho các phát triển riêng rẽ cho các package và thuận lợi cho chia sẻ mã nguồn trên Community Level. Thực tế dù các stack trong distribution của ROS từ phiên bản thứ năm Fuerte Turtle đã đƣợc tổ chức theo cấu trúc catkin và hiện nay đến phiên bản thứ bảy Hydro Medusa, rosbuild vẫn đƣợc hỗ trợ đầy đủ song song với catkin. Việc lập trình tích hợp Navigation Stack trên mô hình robot đƣợc thực hiện chủ yếu trên nền tảng rosbuild.

Đầu tiên ta ta phải tạo một package mới cho ROS. Các lệnh Command Terminal trên Linux dƣới đây có chức năng tạo một package base_serial_server trong thƣ mục ~/rosbuild_ws:

cd ~/rosbuild_ws

roscreate-pkg serial_server roscpp rospy std_msgs tf

Trong đó roscpp, rospy, std_msgs, tf là các dependency của serial_server, việc khai báo này giúp khởi tạo các đƣờng dẫn đến các thƣ viện .h khi ta biên dịch chƣơng trình trong Eclipse.

Sau khi tạo thành công một node. Trong thƣ mục ~/rosbuild_ws đã xuất hiện thƣ mục serial_server. Ta tạo một file serial_server.cpp trong thƣ mục src của ~/rosbuild_ws/serial_server. Cây thƣ mục của package có dạng nhƣ sau:

Ta chọn mở file CMakeList.txt và sửa dòng rosbuild_add_executable(example examples/example.cpp) thành rosbuild_add_executable(serial_server src/serial_server.cpp).

Từ cửa sổ Terminal ta dùng lệnh roscd serial_server để đi đến thƣ mục của package serial_server, dùng lệnh make eclipse-project sau để tạo các file khai báo cấu trúc project cho eclipse.

Sau đó, ta khởi động Eclipse và add project vào workspace bằng cách chọn trên thanh menu của chƣơng trình File/Import.../Existing Projects into Workspace, sau đó nhấn Next, chọn Browse và dẫn tới thƣ mục của serial_server. Ta sẽ thấy đƣợc project eclipse trong cửa sổ Import.

Sau khi add thành công project, trên cửa số project explorer, ta thấy project serial_server vừa tạo, Mở rộng nhánh thƣ mục /src ta sẽ thấy file serial_server.cpp, ta double-click vào file và có thể bắt đầu lập trình trong cửa sổ soạn thảo.

Sau khi đã build thành công ta phải chọn file binary vừa build đƣợc để chạy debug, ta chọn trên menu của chƣơng trình Run/Run Configurations..., chọn mục C/C++ Application/serial_server- RelWithDebInfo_serial_server Configuration. Chọn tab Main, ở phần C/C++ Application: ta chọn

Ta chạy lệnh sudo chmod 777 /dev/ttyUSB0 trong một Terminal và chạy ROS Master bằng lệnh roscore. Quay trở lại giao diện Run/Run Configurations.../C/C++ Application/, ta chọn tab

Environment và chọn New..., sau đó add các environment variables nhƣ sau:

ROS_MASTER_URI http://localhost:11311

ROS_ROOT /opt/ros/groovy/share/ros

Lƣu ý là ta phải thay đổi thƣ mục groovy cho phù hợp với distribution của mình và chọn Run. Cửa sổ Console của Eclipse của sẽ cho thấy các thông tin debug chƣơng trình đang chạy.

Phụ lục 2 – TẠO LAUNCH FILE CHO NODE DEPTHIMAGE_TO_LASERSCAN

Trên cửa sổ Terminal, ta dùng lệnh roscd depthimage_to_laserscan/launch,sau đó là ls, tasẽ thấy các file launch tƣơng ứng cho một số mô hình robot khác nhau. Ta có thể chỉnh sửa lại một trong các file ấy cho mô hình robot của mình. Dùng lệnh gedit với một file trong đó, ta chỉnh sửa lại các thông số và Save As… với tên mới.

<launch>

<!-- depthimage_to_laserscan node -->

<remap from="image" to="/camera/depth/image_rect_raw"/> <remap from="camera_info" to="/camera/depth/camera_info"/> <node respawn="true" pkg="depthimage_to_laserscan"

type="depthimage_to_laserscan" name="depthimage_to_laserscan" > <param name="scan_height" value = "60" type="int"/>

<param name="output_frame_id" value = "/laser_link" type="string"/> <param name="scan_time" value = "0.04" type="double"/>

</node> </launch>

Parameter image là tên topic của ảnh độ sâu từ openni, camera_info là thông tin cấu tạo của cảm biến. scan_height là chỉ số của row mà ta muốn lấy lát cắt laser từ point cloud của Kinect.

scan_height càng lớn thì lát cắt càng gần mặt đất. output_frame_id là hệ tọa độ của lát cắt, mặc định là lát cắt này nằm trong mặt phẳng của output_frame_id. Ta có thể publish một tf giữa output_frame_id và hệ tọa độ của mobile base. Cuối cùng là scan_time, thông số này cho biết tần số publish của message từ cảm biến laser.

Một phần của tài liệu Luận văn tốt nghiệp triển khai thuật toán định hướng trên ROS cho robot tự hành trong nhà (Trang 90 - 97)