├── README.md ├── aslam_base ├── link ├── param.yml ├── slam_server.cpp └── stereo.yml /README.md: -------------------------------------------------------------------------------- 1 | # A\*SLAM Software 2 | 3 | For more information see 4 | [https://astar.ai](https://astar.ai). 5 | 6 | The following steps have been tested and passed on Ubuntu **16.04.5**. 7 | 8 | ### 1. Hardware Requirements 9 | 10 | It is recommended to run A\*SLAM in a computer with 4-core, 8-thread CPU (i7-8550U or better) and 8G RAM. 11 | 12 | ### 2. OpenCV Installation 13 | 14 | Follow the steps in [CaliCam@GitHub](https://github.com/astar-ai/calicam). 15 | 16 | ### 3. Download Image Data 17 | 18 | Make sure the uncompressed files are under the directory /home/USER_NAME/data/aslam_indoor 19 | 20 | cd 21 | mkdir data 22 | cd data 23 | wget http://astar.support/dotai/aslam_indoor.tar.gz 24 | tar xvf aslam_indoor.tar.gz 25 | 26 | ### 4. Download Program 27 | 28 | cd 29 | git clone https://github.com/astar-ai/aslam.git 30 | cd aslam 31 | chmod 777 ./link 32 | ./link 33 | 34 | ### 5. Run 35 | 36 | To run A\*SLAM program, you need to change the name of CaliCam stereo parameter file '##-YYMMDD-####.yml' to 'stereo.yml' first. 37 | 38 | ./aslam 39 | 40 | ### 6. Operation 41 | 42 | Plese refer to the **Operation** part of [**A\*SLAM Manual**](https://drive.google.com/open?id=1T_PiYxxNShu9rh6vtca9-kar4itFgyLR0am5_G2h0-s). 43 | 44 | ### 7. SSML: Monocualr Localization 45 | 46 | To run A\*SLAM program in the Monocular Localization mode, you need to change the name of CaliCam monocular parameter file '##-YYMMDD-####.yml' to 'mono.yml' first. 47 | 48 | You also need to set the following parameters in the 'param.yml' file. 49 | 50 | slam_mode: 0 51 | model: mono 52 | 53 | 54 | -------------------------------------------------------------------------------- /aslam_base: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/astar-ai/aslam/36c232e719d19ef95df1e4b3ec266969980d786a/aslam_base -------------------------------------------------------------------------------- /link: -------------------------------------------------------------------------------- 1 | g++ -L/usr/local/lib -o "aslam" aslam_base -lGL -lGLU -lX11 -lpthread -lopencv_core -lopencv_highgui -lopencv_features2d -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_calib3d -lopencv_xfeatures2d 2 | -------------------------------------------------------------------------------- /param.yml: -------------------------------------------------------------------------------- 1 | %YAML:1.0 2 | feat_num: 1000 3 | pcl_lvl: 1 4 | pyr_levels: 3 5 | port_pose: 8001 6 | live: 0 7 | foward_slam: 1 8 | threed_slam: 1 9 | slam_mode: 1 10 | network: 0 11 | track_gl: 1 12 | kf_dist: 0.3 13 | kf_angle: 10. 14 | data_path: /data/aslam_indoor 15 | map_path: ./map 16 | host: /127.0.0.1 17 | model: stereo 18 | img_size: [ 640, 480 ] 19 | usb_port: 0 20 | -------------------------------------------------------------------------------- /slam_server.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int main(int argc, char** argv) { 10 | while (1) { 11 | int sockfd, new_sockfd; 12 | socklen_t cli_len; 13 | sockaddr_in serv_addr, cli_addr; 14 | 15 | sockfd = socket(AF_INET, SOCK_STREAM, 0); 16 | if (sockfd < 0) 17 | cout << "ERROR opening socket" << endl; 18 | 19 | bzero((char *) &serv_addr, sizeof(serv_addr)); 20 | serv_addr.sin_family = AF_INET; 21 | serv_addr.sin_addr.s_addr = INADDR_ANY; 22 | serv_addr.sin_port = htons(8001); 23 | 24 | if (bind(sockfd, (sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) 25 | cout << "ERROR on binding" << endl; 26 | 27 | listen(sockfd, 5); 28 | 29 | cli_len = sizeof(cli_addr); 30 | new_sockfd = accept(sockfd, (sockaddr *) &cli_addr, &cli_len); 31 | if (new_sockfd < 0) 32 | cout << "ERROR on accept" << endl; 33 | 34 | cout << "Connected" << endl; 35 | 36 | struct SlamData { 37 | int status; 38 | float inl; 39 | float x, y, z; 40 | float qx, qy, qz, qw; 41 | }; 42 | 43 | SlamData data; 44 | 45 | while (1) { 46 | int n = read(new_sockfd, &data, sizeof(SlamData)); 47 | 48 | if (n < 0) 49 | cout << "ERROR reading from socket" << endl; 50 | 51 | if (n == 0) 52 | continue; 53 | 54 | cout << data.status << " " << data.inl << " " 55 | << data.x << " " << data.y << " " << data.z << " " 56 | << data.qx << " " << data.qy << " " << data.qz << " " << data.qw 57 | << endl; 58 | 59 | usleep(100); 60 | } 61 | 62 | close(new_sockfd); 63 | close(sockfd); 64 | } 65 | 66 | cout << "Why is here? " << endl; 67 | 68 | return 0; 69 | } 70 | 71 | -------------------------------------------------------------------------------- /stereo.yml: -------------------------------------------------------------------------------- 1 | %YAML:1.0 2 | --- 3 | cam_model: stereo 4 | Kl: !!opencv-matrix 5 | rows: 3 6 | cols: 3 7 | dt: d 8 | data: [ 1.3754184409888023e+03, 1.5650637059075301e-01, 9 | 6.3309166975009839e+02, 0., 1.3734421459279981e+03, 10 | 4.7400072552292659e+02, 0., 0., 1. ] 11 | Dl: !!opencv-matrix 12 | rows: 1 13 | cols: 4 14 | dt: d 15 | data: [ -8.4309901562773598e-02, 3.7385085922367500e-01, 16 | -7.6386412374314339e-04, -1.0009405307866118e-03 ] 17 | xil: !!opencv-matrix 18 | rows: 1 19 | cols: 1 20 | dt: d 21 | data: [ 2.5176685329699322e+00 ] 22 | Rl: !!opencv-matrix 23 | rows: 3 24 | cols: 3 25 | dt: d 26 | data: [ 9.9999112446630034e-01, -4.2131893576937982e-03, 27 | -4.9051368293944009e-06, 4.2131893577444842e-03, 28 | 9.9999112447833050e-01, 0., 4.9050932937461801e-06, 29 | -2.0666270287885013e-08, 9.9999999998796985e-01 ] 30 | Kr: !!opencv-matrix 31 | rows: 3 32 | cols: 3 33 | dt: d 34 | data: [ 1.3735012179792418e+03, 1.1578919618060471e-01, 35 | 6.3754772405051881e+02, 0., 1.3716437710883588e+03, 36 | 4.6351537189058809e+02, 0., 0., 1. ] 37 | Dr: !!opencv-matrix 38 | rows: 1 39 | cols: 4 40 | dt: d 41 | data: [ -7.8979337567376601e-02, 4.4824386621556778e-01, 42 | 9.7390374455825135e-04, -1.3279403348263653e-03 ] 43 | xir: !!opencv-matrix 44 | rows: 1 45 | cols: 1 46 | dt: d 47 | data: [ 2.5202273471100547e+00 ] 48 | Rr: !!opencv-matrix 49 | rows: 3 50 | cols: 3 51 | dt: d 52 | data: [ 9.9995873999988394e-01, -4.0406701804792632e-03, 53 | 8.1358025011118128e-03, 4.0811603492106295e-03, 54 | 9.9997933952362550e-01, -4.9663523936529352e-03, 55 | -8.1155670195336618e-03, 4.9993509965291436e-03, 56 | 9.9995457099888541e-01 ] 57 | T: !!opencv-matrix 58 | rows: 3 59 | cols: 1 60 | dt: d 61 | data: [ -1.2084041392890925e-01, 4.8831000547324224e-04, 62 | -9.8569434300089945e-04 ] 63 | key_str: LUWSJBPFZI 64 | RMSE: 3.4327463710249528e-01 65 | cap_size: [ 2560, 960 ] 66 | --------------------------------------------------------------------------------