[Di chúc] Mô hình xe sử dụng ROS

tuanti1997qn

Thành Viên PIF
Dành cho những ai đang muốn làm xe với platform là ROS. Lúc trước mình (anh,em,tao, bố mày,… để lịch sự thì xưng mình nhóe) làm luận văn cũng là làm xe chạy ROS, thấy công đoạn làm cái xe cũng mất thời gian ko đáng lắm nên để lại cái này. Nếu ai chỉ muốn tập trung phát triển phần trên thì bài viết này rất thích hợp vì chỉ cần ghép đống này lại là sẽ có được 1 cái xe chạy được rồi. việc còn lại chỉ là phát triển mấy ứng dụng trên thôi đỡ mất công build lại xe.

Github: https://github.com/tuanti1997qn/my_xe

Miêu tả xe sẽ cập nhật sau


Đồ chơi cần thiết để chơi “xếp hình” với cái xe:

- Động cơ: ở mình dùng GA25 + gá

- Khung xe cắt mica. Bản vẽ của mình để ở trong git

- Driver của PIF (cái khác cũng được nhưng mà phải sửa lại một chút trong code)

- Tiva IC hoặc KIT

- Raspi mới test ở pi 3 và pi 3+ nhưng chắc mấy con sau cũng giống( thời điểm mình viết bài này mới nghe thông tin của Pi

- Cái khung mica trên cùng là để lidar. Ai ko dùng lidar có thể bỏ.

Xe sử dụng dễ dàng với rosserial. Nhờ cái rosserial, con tiva được đóng vai trò như 1 node, có thể pub và sub topic thoải mái như một node bình thường. Ở cái code này của mình thì xe subscribe topic /cmd_vel và publish lên /tf giữa /odom /base_footprint.

Rosserial có thể xem ở đây:

http://wiki.ros.org/rosserial

http://wiki.ros.org/rosserial_tivac/Tutorials/TivaWare Setup

tại ở mình hay dùng tiva với tiva được hỗ trợ tận răng thế này nên dùng luôn tiva cho sướng. còn nếu có ai muốn port sang con khác như st thì làm theo hướng dẫn này.

http://wiki.ros.org/rosserial_client/Tutorials/Adding Support for New Hardware

Hoặc một lựa chọn khác khuyến cáo dùng hơn là dùng mbed. Cái này cực kỳ mạnh và dung sướng. dung được cho nhiều dòng, code thì như Arduino nhưng can thiện ngon hơn. Khuyến khích dung với platformio trên visual studio code cho dễ dung.

Lưu ý: cho những ai dùng những con vi điều khiển bộ nhớ ít. Cái này có có log ra bằng các hàm tương tự printf nên sẽ tốn nhiều bộ nhớ. Hạn chế dung những hàm đó và tự search cách tắt log đi (sửa gì trong file config ấy mình quên mất tiêu rồi).

Cái này làm hoàn toàn bên linux. Mbed thì có thể bên windows. Cơ mà khuyến khích bên ubuntu hơn.


Các bước thực hiện

Phần mềm cho tiva
!!! chú ý
: Cái xe được làm trong những đêm get high nên có độ tấu hài cao. Khuyến khích anh em nên đeo kính và nhỏ mắt trước khi xem. Nếu code khó đọc quá nên đập đi xây lại ko nên chày cối thêm.

Làm theo các bước của tutorial tiva C dành cho tivaware (ko phải cho Energia nhá) làm hết bước 5 là xong.

Lưu ý nhỏ: lần cuối mình làm thì cái bước cài toolchain trên hướng dẫn ko xài được

Nên bước 2.1 sẽ thay bằng dùng lệnh

sudo apt-get install gcc-arm-none-eabi

Lưu ý nhỏ 2: file .bashrc (chú ý có dấu chấm) nằm ở ~/.bashrc. nó là file ẩn nên muốn tìm thấy nó khi dùng duyệt file thì bấm ctl+H hoặc dùng terminal cd tới cho dễ

Tiếp đến là công đoạn build code mẫu. ta sẽ tập làm quen để code cho tiva. Chuyển qua cái thứ 2 là build và chạy thử cái ví dụ chatter của người ta. Sau khi làm được rồi thì sửa lại theo cái hướng dẫn đó, chú ý 2 file CMakelist (cái này cố mò theo cái của mình với cái project tutor của người ta nhá, cái này nên biết). Flash xuống và ta có con tiva mà mình cần

Phần cứng
Sau là phần mạch. Mình nhớ là còn vài cái mạch tồn cơ mà tới lúc có ai xem chắc mất hết rồi. Có thể đi đặt lại. Mạch phần cứng ở trong github. Có 2 bản 1 bản cho con tiva dán ( có 2 bug “nhỏ” là 2 chân VDDC của tiva chưa được nối với tụ ngoài và nối với nhau. Nếu ko nối thì ko dùng được bộ PLL và tiva sẽ không đủ nhanh để xử lý. Bug thứ 2 là con 74hc14 chưa được nối đất). Bản còn lại là để cắm tiva lên rồi cắm lên raspi. Cả 2 đều dùng với cầu H của câu lạc bộ.

Nếu ko có mạch thích thì có thể đi đặt, anh em tìm được chỗ nào rẻ thì share nhá. Riêng mình thì đặt ở đây

https://machin.cxt.vn/

Lúc mình check thì phí đặt có 85k cho sinh viên à :V. Thêm ship các kiểu nữa là lên tầm 100k cho 5 board quá ngon.

Mạch này được dùng để cắm trực tiếp lên con tiva luôn nên nó sẽ trông thế này (cập nhật sau)

Đổ code vào và chạy thôi.


Phần mềm trên raspi.

Có sẵn hệ điều hành cho raspi trên ubiquityrobotic. Có thể lên tải ở đây

https://downloads.ubiquityrobotics.com/pi.html

Hoặc có thể dùng ubuntu mate cũng có bản cho raspi

https://ubuntu-mate.org/download/

Kiểm tra xem 2 chân đó được kết nối đến chân nào của raspi. ở raspi 3b và 3b+ cả 2 đều là ở /dev/ttyAMA0

Lưu ý, đôi lúc cái port đó bị một process nào đấy dùng và liên tục gửi data đi. Nếu giữ thì sẽ ko dùng được nên kiểm tra trước process nào đang dùng. Lên gg hỏi làm sao để tìm process nào đang dùng serial port là sẽ ra. Hoặc dùng cái này

ls -l /proc/[0-9]*/fd/* |grep /dev/ttyAMA0

cái /dev/ttyAMA0 tùy vào raspi rồi thì kill nó đi;

cuối cùng ta chỉ việc kết nối 2 con lại bằng lệnh
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM0

xong. Bật điện lên và test thôi.


Một số lưu ý:

Khi dùng raspi cho xe và chạy phần giải thuật chính trên máy tính. Một số gói yêu cầu phải đồng bộ thời gian giữa 2 máy (ví dụ như Navigation Stack). Nên nhớ bật mạng cho raspi và cập nhật thời gian cả máy và raspi. Ngoài ra mạng cũng phải tốt, mạng mà fail quá cũng ko được.

Code cực kỳ chuối nên khuyến khích ai siêng có thể đập đi xây lại, code lại bằng st trên framework mbed thì code sẽ sạch đẹp hơn. Mbed rất dễ dùng và đáng để thử nên rảnh thì xài luôn.

Nếu ko muốn viết lại và muốn dùng luôn thì có vài chỗ phải sửa:

  1. File control_car/inc/my_PID.h sửa:
  • XMW : số xung 1 vòng

  • CVB: chu vi bánh xe

  • D2W: khoảng cách giữa hai xe

  • OFF_SET: offset của PWM chống deadzone
2. File control_car/inc/my_def.h
  • XE_1/Xe_2 hồi mình làm là làm 2 xe nên cái này là cho từng xe. Cứ chọn 1 cái là được cơ mà nhớ là lấy cái mà được set giá trị ở trên nhá.
  • Mấy cái kia cho IMU thôi mà bỏ đi
3. File control_car/lib/my_PID.c
  • PID_param sửa lại thông số PID
Khung xe cắt mica dày một chút, cho cái trụ đồng ngắn một chút thì đi nó đỡ rung hơn.
 
Last edited:
Top