USB_Demo

mini现在支持使用TCP获取图像以及IMU数据,使用接口控制相机算法启停和接收算法位姿结果。

需要将mini设备的固件版本同步更新至20250317,如果版本早于0317则需要去官网下载最新的固件并按照版本更新的步骤更新固件。

../_images/image_bKghQNK2PE.png

1.下载SDK demo源码到自己的电脑

git clone https://github.com/Hessian-matrix/baton_mini_sdk_demo

2.选择编译方式

需要自行安装OpenCV环境。

1)ROS

如果是使用ROS的话可以直接把代码放到工作空间里面,然后使用ros_build.sh脚本编译代码,编译出来就是通过USB 的TCP接收到图像和IMU数据,通过接口函数控制设备算法和接收位姿数据,最后再通过话题重新把数据发出。话题名:

/baton_mini/imu/baton_mini/odometry/baton_mini/image_left/baton_mini/image_right

2)非ROS

如果不使用ROS的话,可以用build_non_ros.sh脚本编译代码。运行代码可以在两个回调函数里面拿到IMU的数据结构体和两个cv::Mat灰色图像。

3.编译成功后测试代码

1)ROS

查看本机IP

ifconfig

../_images/image_crgLZ3LeW1.png

可以看到usb0给我电脑分配的ip地址为192.168.1.11

配置launch文件里面的相机对应的server_ip和本机ip。

<launch>
    <node name="baton_mini" pkg="baton_mini" type="baton_mini" output="screen">
        <param name="server_ip" value="192.168.1.10"/>
        <param name="local_ip" value="192.168.1.11"/>
    </node>
</launch>

使用roslaunch启动相机接收节点。

roslaunch baton_mini baton_mini.launch

../_images/image_oUtWPGxL0i.png

2)非ROS

同样是查看本机分配的IP,ifconfig,结果假定和上面一样192.168.1.11

将ip填入baton_mini.cpp中的第24行,

std::string local_ip = "192.168.1.11";

重新运行build_non_ros.sh脚本编译。然后运行生成的执行文件baton_mini

3)效果

如果连接成功,终端会输出设备的version信息以及相机参数,并进入终端接收键盘命令线程:

void command_thread(){
    vio_sdk_init();
    HANDLE streamHandle1 = net_vio_stream_connect(loginHandle, 1, stream_callback);
    
    get_device_version();
    get_device_param();
    // set_network("192.168.1.10");
    cout << "Please input the operation[0-4] : ";   

    imu_switch imu_status = OFF;
    int v;
    while (cin >> v){
        if (v == 0) {//logout connect
            net_vio_logout(loginHandle);
            break;
        }
        else if (v == 1){//start or stop
            if (sys_status == ready) {//The system is currently in a ready state and can be started directly
                alog_start();
            }
            else if (sys_status == stereo3_running) {//The system is currently in a running state and can be stoped
                algo_stop();
            }
        }
        else if (v == 2) {//algo restart
            if (sys_status == stereo3_running) {//The stereo3 algorithm is currently in a running state and can be restart
                algo_restart();
            }
        }
    else if(v == 3){//open or close imu receive
            if(imu_status == ON){
                imu_status = OFF;
          baton_open_imu_recv(imu_status);
            }
            else{
                imu_status = ON;
                baton_open_imu_recv(imu_status);
            }
    }
        else if(v == 4){//Select to receive image data 
            baton_open_image_recv(stereo);
        }
    }
    net_vio_sdk_exit();
    cout << "ByeBye\n";
}

命令接收线程里面,键盘输入0-4:

0:退出登录

1:开启算法 或者停止算法

2:算法重置

3:开启IMU数据接收

4:开启图像数据接收

如果是ROS的话会直接把接收到的数据转成话题发送出来。

如果是非ROS的话数据接口在下面的四个函数里面,用户自己拿出来用即可。

void odom_data_print(int length, const char* frameData) {}
voidimu_data_recv(const imu_data& imu){}
voidimage_left_data(const cv::Mat& image_){}
voidimage_right_data(const cv::Mat& image_){}