Sử dụng la bàn điện từ tìm đường đi cho Robot

Đăng lúc: Thứ hai - 01/02/2016 11:07 - Người đăng bài viết: SuperG
La bàn điện tử

La bàn điện tử

La bàn là dụng cụ tìm phương hướng, xác định đường đi phổ thông, nhưng không phải ai cũng biết cách sử dụng. Ngày nay trường học không có các môn này, người biết dùng la bàn là chủ yếu là các sinh viên trường kỹ thuật quân đội. Tuy nhiên công nghệ dò đường bằng la bàn có khá nhiều ứng dụng trong lĩnh vực Robot, chúng ta hãy cùng tìm hiểu qua về công nghệ này.

Cấu tạo la bàn:
Có nhiều loại la bàn. Ở đây chúng ta chỉ xét loại La bàn Cơ khí bình thường, các loại còn lại về cơ bản là tương tự.
- La bàn gồm 1 kim Nam châm quay tự do luôn chỉ về hướng Bắc.
- Một bản chia 360 độ xoay tròn, tại 0 độ và 360 độ là hướng Bắc, theo chiều đồng hồ 90 độ là hướng Đông, 180 độ là hướng Nam, 270 độ là hướng Tây.
- Một đường ngắm hướng.
- Một gương phản chiếu để xem tọa độ.
Nếu 1 la bàn không có đủ các bộ phận đó thì không dùng được, la bàn này chỉ để xem hướng mà thôi.

Sử dụng la bàn:
Để biết phương hướng từ điểm A đến điểm B, các bàn dùng la bàn ngắm từ điểm A đến điểm B, sau đó xoay vòng chia độ trên la bàn sao cho hướng Bắc trên vòng chia độ trùng với hướng Bắc kim la bàn, rồi đọc vị trí trên la bàn.

Sử dụng la bàn với bản đồ:
- Đầu tiên các bạn trải bản đồ xuống đất, đặt la bàn lên bản đồ. Xoay bản đồ (la bàn không xoay) cho hướng Bắc bản đồ trùng với hướng Bắc la bàn, với trạng thái này các bạn xem bản đồ mới chính xác.
- Khi các bạn mất phương hướng, không biết mình đang ở đâu trên bản đồ, các bạn chọn 2 vị trí dễ nhận dạng trên thực tế có vẽ trên bản đồ thí dụ nhà thờ và tháp nước. Dùng la bàn ngắm tới nhà thờ đọc tọa độ, thí dụ 20 độ Bắc. Sau đó ngắm tới tháp nước đọc tọa độ, thí dụ 95 độ Đông.
- Trên bản đồ, tại nhà thờ và tháp nước vẽ 2 đường thẳng theo tọa độ trên, giao điểm 2 đường thẳng này là điểm đứng của các bạn trên bản đồ.

Robot hoạt động dò đường bằng la bàn không sử dụng phương pháp này, các bạn chỉ cần biết cách sử dụng la bàn với bản đồ như thế là đủ.

La bàn điện tử:
Để điều khiển robot hoạt động, di chuyển đến mục tiêu, người ta dùng la bàn điện tử. Tôi giới thiệu 2 loại la bàn

1. La bàn 1490: La bàn này là loại đơn giản nhất, nó dùng cảm biến Hall dò phương hướng. La bàn này không hoạt động khi độ nghiêng > 10 độ, hay hoạt động sai định hướng. Tốc độ lại quá chậm 2,5 giây mới đáp ứng lại góc di chuyển 90 độ.
Đáy của la bàn có 12 Pin chia làm 4 nhóm có ký hiệu chân giống nhau:
- Pin +
- Pin masse
- Pin out
Pin out sẽ nối vào điện trở hạn dòng qua led nối đến VCC.
Mỗi hướng sẽ sáng 1 led, hướng trung gian sáng 2 led.
Mã dịa chỉ giao tiếp với MCU là:

  • Hướng Bắc -0001
  • Hướng Đông Bắc -0011
  • Hướng Đông -0010
  • Hướng Đông Nam -0110
  • Hướng Nam -0100
  • Hướng Tây Nam -1100
  • Hướng Tây -1000
  • Hướng Tây Bắc -1001

La bàn này hoạt động chậm, góc định hướng lớn đến 45 độ.

2. La bàn 1525:
Loại la bàn 1490 có góc định hướng quá lớn, khó điều khiển robot vào mục tiêu chính xác, la bàn 1525 có góc định hướng nhỏ, phức tạp hơn.
La bàn này Pin out cho ra 2 tín hiêu sin lệch pha 90 độ. Biên độ xác định hướng. Nếu phối hợp với AD sẽ xác định được góc di chuyển tương đương 1 độ. MCU hoạt động dựa vào giá trị này.

Sử dụng la bàn cho robot:
La bàn chỉ xác định hướng, muốn xác định tọa độ của robot cần có 2 hướng, 2 hướng này giao nhau tại 1 điểm đó là tọa độ của robot. Thực tế người ta có thể ko dùng la bàn mà dùng sóng rada, dùng tia laze v.v.

Robot hoạt động bằng la bàn thường kèm theo encoder để xác định tọa độ của nó. Muốn robot hoạt động, người ta phải lập bản đồ hoạt động. Thí dụ robot đi từ điểm A đến điểm B, giữa A và B có chướng ngại, robot cần phải tránh.

Trước tiên phải vẽ bản đồ hoạt động. Từ A đến B có hướng thí dụ là 330 độ Nam, từ A đến chướng ngại là 1m, bề dài chướng ngại là 1m. Từ chướng ngại đến B là 2m. Bánh xe robot có chu vi là 0,1 m.

Như vậy robot bắt đầu hoạt động từ điểm A đi về hướng 330 độ Nam, encoder gắn trên trục bánh xe đếm được 10 vòng là phải tránh chướng ngại. Robot quẹo phải tức là ở hướng: 330 +90 =420-360=60 độ Bắc. Cứ thế robot sẽ tiếp tục đi thẳng 10 encoder rồi quẹo trái, đi thẳng ,queo trái, đi thẳng, quẹo phải đi thẳng đến mục tiêu.

Mỗi lần thay đổi hướng đi robot sẽ lưu hướng đi vào bộ nhớ để sử dụng.

-Đầu tiên xác định hướng cho robot đến mục tiêu (để lập trình di chuyển) vẫn cần gương phản chiếu để ngắm,ko có nó xem mò ko chính xác

-Độ lệch hướng bắc từ thiên chỉ quan trọng khi đi di hành xa và cần kèm độ lệch từ thiên trên bản đồ,còn trong sân chơi robot nhỏ không quan trọng.

Giới thiệu cảm biến Gyro MPU6050 

-Ý tưởng và lý do sử dụng: Yêu cầu được đặt ra là Robot chạy thẳng được theo 1 đường giả định. quay chính xác góc mà ít ảnh hưởng đến yếu tố bên ngoài.

-Tại sao là Gyro mà ko phải là la bàn số: theo như các bạn biết thì la bàn số ảnh hưởng nhiều vào kim loại có từ tính. 

-Ưu điểm của Gyro:
+Quay với góc chính xác
+Ít phụ thuộc yếu tố bên ngoài
+Khá rẻ. 
+Thuật toán lập trình khá đơn giản.
+Chuẩn giao tiếp I2C

-Nhược điểm: 
+Dễ trôi điểm gốc. Nhưng chống trôi ổn thì chạy hết trận vẫn có thể có độ chính xác cao.
+Mình hay gặp trường hợp bị treo chip do việc đọc Gyro phải thực hiện trong ngắt timer. Mình lại dùng một số ngắt nữa nên hay xảy ra trường hợp xung đột ngắt. @@. Sau này mình hạn chế xử lý số liệu trong ngắt timer nên cũng khắc phục được lỗi nhưng vẫn không dám chắc là hết lỗi.

-Hình ảnh thực tế:
GY521. ​

-Hàm Init MPU6050: tài liệu hướng dẫn của PNlab đơn giản hơn. cái này mình tìm hiểu khi chưa có tài liệu tiếng việt mà dựa chủ yếu vào các code và tài liệu của các trang máy bay mô hình của nước ngoài nên lằng nhằng. @@.

Mã:
 void init_sensor_Gyro_MPU6050(void) {     delay_ms(10);     i2c_writereg(MPU6050_ADD,0x6b,0x80);    //reset device, reset cam bien     delay_ms(5);     i2c_writereg(MPU6050_ADD,0x6b,0x00);    //cam bien hoat dong     i2c_writereg(MPU6050_ADD,0x19,0x00);  //Sample Rate Divider = 0; cai nay minh khong hieu lam. @@     i2c_writereg(MPU6050_ADD,0x1a,0x00);  //Configuration;     i2c_writereg(MPU6050_ADD,0x1b,0x10);  //Gyroscope Configuration; 0-8-10-18 ; do phan giai Gyro la 1000do/s     i2c_writereg(MPU6050_ADD,0x6a,0x00);  //User Control; Con MPU6050 co kha nang lam master                                             //cua 1 so con có chuan truyen I2C khac, o day khong dung nen khong config     i2c_writereg(MPU6050_ADD,0x37,0x02); } 
-Hàm lấy giá trị trong timer: do con này trả về giá trị là vận tốc góc nên ta tiến hành thực hiện phép tích phân để có giá trị góc do đó phải đưa việc tính toán vào ngắt timer.

Mã:
// Timer2 overflow interrupt service routineinterrupt [TIM2_OVF] void timer2_ovf_isr(void){// Reinitialize Timer2 value          TCNT2=0x60;          gyroADC[2]=-read_gyro_Z();          goc=goc + ((float)gyroADC[2]+12.34)*0.0595/3.28;    //GY-521          //                              [a]      [b]    [c]          // 00    0    250    131          // 08    1    500    65.5          // 10    2    1000    32.8          // 18    3    2000    16.4 }
Một số chú ý trong chương trình:
+ [a]: là hệ số chống trôi. mỗi cảm biến sẽ có một giá trị khác nhau. Để tìm hệ số này, các bạn cho hiển thị giá trị ADC đọc được của trục Z lên LCD khi cảm biến ĐỨNG YÊN hoàn toàn. [a]=-(giá trị đọc được). ADC của trục Z là số nguyên 16 bit có dấu. để có độ chính xác cao thì ta ép kiểu qua số thực để tính toán. Ví dụ như trên, khi hiển thị ADC Z thì giá trị sẽ dao động xung quanh giá trị -12. có thể là 11-14 nhưng giá trị -12 sẽ hiển thị nhiều nhất. Các bạn thay [a] vào và cho hiển thị giá trị góc khi CB ĐỨNG YÊN. các bạn sẽ thấy tuy không di chuyển cảm biến nhưng giá trị góc vẫn tăng hoặc giảm. giờ bước tinh chỉnh sẽ thuộc về các bạn để có giá trị 12,34 như của mình. mỗi cảm biến ở mỗi địa điểm khác nhau sẽ có 1 giá trị khác nhau nhé. Các bạn có thể thực hiện đọc Gyro lấy mẫu 100 lần khi CB đứng yên rồi chia ra cũng có giá trị này. Các trang nước ngoài thường làm thế. Song mình thấy mỗi lúc mỗi khác nên vẫn áp dụng phương pháp thủ công. @@

+[ b ]: thời gian lấy mẫu. Tuỳ vào giá trị timer của các bạn. Sau khi chống trôi xong thì việc tiếp theo của các bạn là đảm bảo quay đúng góc. Đưa cảm biến lên bề mặt phẳng hoàn toàn, quay 1 góc mà các bạn có thể xác định đc chính xác góc quay, đối chiếu với giá trị góc hiển thị trên LCD. Các bạn tiến hành tinh chỉnh b để có giá trị góc chính xác. Tăng hoặc giảm một lượng rất nhỏ.

+[c]: độ phân giải của cảm biến khi bạn config. [c] chính xác là số bít trên một đơn vị vận tốc. như trên config thì mình chọn khả năng làm việc của cảm biến là 1000 độ/s nên c=32.8. tuy nhiên để đạt độ chính xác cao hơn thì mình chọn c=3.28. là số bít trên 0,1 đơn vị vận tốc. Do đó thay vì ta quay 1 góc 90 độ thì giá trị góc trả về là 900.
bang B. ​

Quan trọng nhất ở đây vẫn là việc chống trôi. các bạn chống trôi tốt có thể 3 phút thi đấu chỉ trôi 3 độ là cùng. sai số cho phép được.

Ở file đính kèm của mình có 2 file nén. file GY521mpu_6050.rar là mình lấy từ trang PNLab. file còn lại là mình dùng để làm thư viện chuẩn của mình. viết bằng Codevision

Cách kết nối và gá đặt cảm biến trên Robot:
-Như hình cảm biến thì các bạn chỉ cần quan tâm đến 4 chân đầu tiên của cảm biến là:GND, VCC, SDA, SCL.
+GND và VCC là 2 chân nguồn của cảm biến. áp là 5V. MPU6050 chỉ hoạt động điện áp 3v3. tuy nhiên trên module GY521 đã chuyển đổi điện áp nên mình không phải lo vấn đề này.​
+SDA và SCL thì các bạn kết nối theo chuẩn I2C như các thiết bị I2C khác.​

-Gá đặt trên Robot. ở đây mình chỉ dùng trục Z để xác định góc quay do sân năm này ko có mặt phẳng nghiêng. với các sân có góc nghiêng thì các bạn phải tính thêm cả trục X và Y để có độ chính xác. Khi các bạn dùng trục Z thì để cảm biến nằm phẳng sao cho hướng trục Z trên cảm biến hướng lên trên. cố gắng càng hướng lên trên càng tốt để tránh sai số. nên gá ở khung đế robot để hạn chế xe dịch nhất. tránh xa các động cơ, cuộn dây vì các thiết bị này có từ trường và nhiễu lớn lên bus I2C của mình. CB thì không bị nhiễu nhưng Bus truyền rất dễ ảnh hưởng. có thể gá luôn lên trên mạch. Nhưng lúc này thì phải gá mạch cố định hoàn toàn.

Góp ý thêm cho các bạn. Nếu các bạn dùng cho máy bay mô hình thì có thể dùng module GY86. giá bây giờ khá rẻ. năm ngoái mình mua là 1200k. hiện giờ còn 700k ở PNLab và 500k ở thegioiic. Module này tích hợp MPU6050(Gyro, Acc, Nhiệt độ), HMC5883L(Mag hay la bàn số) và MS5611 (CB Áp suất). Khi dùng module này các bạn nên chú ý con la bàn. vì để giao tiếp với nó, các bạn phải giao tiếp với con MPU6050 như mình giải thích ở trên. con MPU6050 sẽ làm master và con HMC5883L làm slaver của con này. Cách giao tiếp các bạn có thể tham khảo code mình dưới đây.

Các file đính kèm:

 

GY-51 LSM303DLH la bàn số Arduino +Processing

Hướng dẫn test module la bàn số GY-51 LSM303DLH với code arduino và hiển thị dữ liệu lên PC qua rs232 và Gui Processing
La bàn số + gia tốc LSM303DLH

La bàn số + gia tốc LSM303DLH

Điện áp hoạt động: 3v-5V

Độ phân giải ADC: 12bit

Giao tiếp I2c

Từ kế: ±1.3 / ±1.9 / ±2.5 /± 4.0 / ±4.7 /±5.6 / ±8.1 gauss

Gia tốc:±2 g/±4 g/±8 g

2: KẾT NỐI VỚI ARDUINO

Chú ý: Chân SCL và SDA phải kéo lên VCC(5V) bằng điện trờ 4k7

ARDUINO UNO R3, LEONARDO, MEGA 2560

 

 

ARDUINO MICRO

 

 

ARDUINO UNO (UP TO R2), DUEMILANOVE.

 

 

3: CODE ARDUINO:

Tham khảo thư viện :lsm303-arduino

Trong thư viện có code mẫu cho uart, cân chỉnh và đo góc

Code đo góc

 

4: Code Processing cho heading(đo góc)

4: Tài liệu tham khảo:

Datasheet

 

 
Từ khóa:

la bàn

Đánh giá bài viết
Tổng số điểm của bài viết là: 4 trong 1 đánh giá
Click để đánh giá bài viết
 

Hướng dẫn sử dụng Website

Hướng dẫn quý khách hàng cách tham khảo và sử dụng thông tin trên Website chúng tôi, với mục tiêu giúp quý khách hàng nhanh chóng hình dung về sản phẩm và dịch vụ mới của chúng tôi, kính mong được hợp tác cùng quý khách! ...

Thăm dò ý kiến

Bạn có muốn sở hữu một Robot trong nhà không?

Cần một Robot để dọn dẹp

Cần một Robot trông nh

Cần một Robot để giải trí

Bạn cần một Robot theo cách khác

Bạn đã có rồi

Bạn không cần

Liên kết