From 16bdb15aa0f05949b764c1655c853f06df039eb1 Mon Sep 17 00:00:00 2001 From: Robert Hedman <robert.hedman@mac.com> Date: Tue, 28 Nov 2017 16:57:23 +0100 Subject: [PATCH] real lidar commands supported --- src/main.rs | 69 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/src/main.rs b/src/main.rs index e7dff4f..f5ed26d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,9 +25,17 @@ const COUNTER_SERIAL_PORT: &str = "/dev/cu.usbmodem1422"; // should the map matrix be two dim array of const size, vecs of dynamic, or what? const ROWS: usize = 50; const COLS: usize = 100; -static mut vec = vec![vec![0; COLS]; ROWS]; fn main() { + + //let mut vecMap = vec![vec![0; ROWS]; COLS]; + + + let mut map = [[0u32; ROWS]; COLS]; + map[0][0] = 3; + + println!("{}, {}", map[0][0], map[0][1]); + // dummy thread for replacing lidar let server = thread::spawn(|| { let listener = TcpListener::bind(LIDAR_ADDRESS).unwrap(); @@ -56,7 +64,8 @@ fn main() { message_len+=1; // since length now is total bytes, not index //println!("Server found end of message"); println!("Server got: {:?}", String::from_utf8_lossy(&message[0..message_len])); - let written_size = stream.write(&[69 as u8, 96 as u8]); + //let written_size = stream.write(&[69 as u8, 96 as u8]); + let written_size = stream.write_all(b"\x02This is a bunch of lidar data...\x03"); println!("server wrote {:?} to stream.", written_size); // reset everything for next message. @@ -80,14 +89,10 @@ fn main() { }); - let mut map = [[0u32; ROWS]; COLS]; - map[0][0] = 3; - - println!("{}, {}", map[0][0], map[0][1]); - let (request_location_tx, request_location_rx): (mpsc::Sender<bool>, mpsc::Receiver<bool>) = mpsc::channel(); let (send_location_tx, send_location_rx): (mpsc::Sender<(i32, i32)>, mpsc::Receiver<(i32, i32)>) = mpsc::channel(); + // location tracker let tracker = thread::spawn(move || { println!("Tracker started."); @@ -121,12 +126,12 @@ fn main() { break; }; send_location_tx.send(pos).unwrap(); - pos.0 += 1; + //pos.0 += 1; }, Err(_) => { //println!("Error: {}, on recieving side.", e); //thread::sleep_ms(100); - pos.1 += 1; + //pos.1 += 1; }, }; }; @@ -144,7 +149,9 @@ fn main() { // set up connection to lidar let mut stream = TcpStream::connect(&LIDAR_ADDRESS).unwrap(); - let mut lidar_buf: [u8; 2] = [0; 2]; + let mut lidar_buf: [u8; 4096] = [0u8; 4096]; + let mut message_len = 0; + let mut recording = false; // main loop for this thread loop { @@ -158,18 +165,40 @@ fn main() { // request lidar data //thread::sleep(time::Duration::new(3,0)); - let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); - let stream_write_response = stream.write(&[65 as u8, 66 as u8]); - println!("mapper wrote {:?} to stream.", stream_write_response); + let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); // tell lidar to send one measurment + for r in stream.try_clone().expect("stream clone failed").bytes() { // iterate over answer + match r { + Ok(b) => { + if b == 2 && !recording { // start of message + //println!("Server found start of message"); + lidar_buf[message_len] = b; + recording = true; + message_len+=1; + } + else if b == 3 { // end of message + lidar_buf[message_len] = b; + message_len+=1; // since length now is total bytes, not index + //println!("Server found end of message"); + println!("Mapper got (from lidar): {:?}", String::from_utf8_lossy(&lidar_buf[0..message_len])); + //let written_size = stream.write(&[69 as u8, 96 as u8]); + //println!("server wrote {:?} to stream.", written_size); + + // reset everything for next message. + recording = false; + message_len = 0; + break; + } + else if recording { + lidar_buf[message_len] = b; + message_len+=1; + } - match stream.read_exact(&mut lidar_buf){ - Ok(_) => { - println!("mapper got {}, {}, from lidar.", lidar_buf[0], lidar_buf[1]); }, - Err(e) => { - println!("Could not read all bytes: {:?}", e); - }, - } + Err(_) => {}, + } + } + //let stream_write_response = stream.write(&[65 as u8, 66 as u8]); + //println!("mapper wrote {:?} to stream.", stream_write_response); // update map -- GitLab