Skip to content
Snippets Groups Projects
Commit 16bdb15a authored by Robert Hedman's avatar Robert Hedman
Browse files

real lidar commands supported

parent 7f537199
No related branches found
No related tags found
No related merge requests found
...@@ -25,9 +25,17 @@ const COUNTER_SERIAL_PORT: &str = "/dev/cu.usbmodem1422"; ...@@ -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? // should the map matrix be two dim array of const size, vecs of dynamic, or what?
const ROWS: usize = 50; const ROWS: usize = 50;
const COLS: usize = 100; const COLS: usize = 100;
static mut vec = vec![vec![0; COLS]; ROWS];
fn main() { 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 // dummy thread for replacing lidar
let server = thread::spawn(|| { let server = thread::spawn(|| {
let listener = TcpListener::bind(LIDAR_ADDRESS).unwrap(); let listener = TcpListener::bind(LIDAR_ADDRESS).unwrap();
...@@ -56,7 +64,8 @@ fn main() { ...@@ -56,7 +64,8 @@ fn main() {
message_len+=1; // since length now is total bytes, not index message_len+=1; // since length now is total bytes, not index
//println!("Server found end of message"); //println!("Server found end of message");
println!("Server got: {:?}", String::from_utf8_lossy(&message[0..message_len])); 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); println!("server wrote {:?} to stream.", written_size);
// reset everything for next message. // reset everything for next message.
...@@ -80,14 +89,10 @@ fn main() { ...@@ -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 (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(); let (send_location_tx, send_location_rx): (mpsc::Sender<(i32, i32)>, mpsc::Receiver<(i32, i32)>) = mpsc::channel();
// location tracker // location tracker
let tracker = thread::spawn(move || { let tracker = thread::spawn(move || {
println!("Tracker started."); println!("Tracker started.");
...@@ -121,12 +126,12 @@ fn main() { ...@@ -121,12 +126,12 @@ fn main() {
break; break;
}; };
send_location_tx.send(pos).unwrap(); send_location_tx.send(pos).unwrap();
pos.0 += 1; //pos.0 += 1;
}, },
Err(_) => { Err(_) => {
//println!("Error: {}, on recieving side.", e); //println!("Error: {}, on recieving side.", e);
//thread::sleep_ms(100); //thread::sleep_ms(100);
pos.1 += 1; //pos.1 += 1;
}, },
}; };
}; };
...@@ -144,7 +149,9 @@ fn main() { ...@@ -144,7 +149,9 @@ fn main() {
// set up connection to lidar // set up connection to lidar
let mut stream = TcpStream::connect(&LIDAR_ADDRESS).unwrap(); 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 // main loop for this thread
loop { loop {
...@@ -158,18 +165,40 @@ fn main() { ...@@ -158,18 +165,40 @@ fn main() {
// request lidar data // request lidar data
//thread::sleep(time::Duration::new(3,0)); //thread::sleep(time::Duration::new(3,0));
let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); let _ = stream.write_all(b"\x02sRN LMDscandata\x03"); // tell lidar to send one measurment
let stream_write_response = stream.write(&[65 as u8, 66 as u8]); for r in stream.try_clone().expect("stream clone failed").bytes() { // iterate over answer
println!("mapper wrote {:?} to stream.", stream_write_response); 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 // update map
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment