一.使用上位机控制

9.png

TOF版本设备点击TOF ON即可开启TOF,开启后按键会变成TOF OFF,点击TOF OFF即可关闭TOF

补光灯版本设备点击LED ON即可开启LED ,开启后按键会变成LED OFF,点击LED OFF即可关闭LED

10.png

设置页面的viobot栏,补光灯前面的勾打上,就默认设备上电会开启补光灯,TOF前面的勾打上,就默认设备上电会开启TOF。

二.ROS控制

我们已经把硬件的控制和反馈信息写成了一个自定义的ros msg,具体的msg信息可以查看demo里面的msg包的viobot_ctrl.msg

Header header
int32 image_select #0/1/2/3 (注:0:无图像通过流数据输出;1:左目;2:右目;3:双目图像通过流数据输出)
bool imu_raw #ON/OFF
bool tof_enable #ON/OFF
bool tof_depth #ON/OFF
bool tof_amp #ON/OFF
bool light #ON/OFF

这里面包含了三类操作

1)TOF开关(TOF版本)

tof_enable true为开,false为关

开启TOF

rostopic pub -1 /system_ctrl system_ctrl/viobot_ctrl "{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: ''}, image_select: 0, imu_raw: false, tof_enable: true, tof_depth: false, tof_amp: false, light: false}"

关闭TOF

rostopic pub -1 /system_ctrl system_ctrl/viobot_ctrl "{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: ''}, image_select: 0, imu_raw: false, tof_enable: false, tof_depth: false, tof_amp: false, light: false}"

2)补光灯开关(补光灯版)

light true为开,false为关

开启补光灯

rostopic pub -1 /system_ctrl system_ctrl/viobot_ctrl "{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: ''}, image_select: 0, imu_raw: false, tof_enable: false, tof_depth: false, tof_amp: false, light: true}"

关闭补光灯

rostopic pub -1 /system_ctrl system_ctrl/viobot_ctrl "{header: {seq: 0, stamp: {secs: 0, nsecs: 0}, frame_id: ''}, image_select: 0, imu_raw: false, tof_enable: false, tof_depth: false, tof_amp: false, light: false}"

3)raw_data输出设置

int32 image_select #0/1/2/3 (注:0:无图像通过流数据输出;1:左目;2:右目;3:双目图像通过流数据输出)
bool imu_raw #ON/OFF
bool tof_depth #ON/OFF
bool tof_amp #ON/OFF

raw_data输出设置是设置到http流输出的,默认是关的,如果使用ROS开发也不需要开,一直都是false就行。

ROSdemo里面的例子

ros::Publisher pub_sys_ctrl = nh.advertise<system_ctrl::viobot_ctrl>("/system_ctrl", 2);
 
system_ctrl::viobot_ctrl viobot_set;
viobot_set.image_select = 0;
viobot_set.imu_raw = false;
viobot_set.tof_enable = false;
viobot_set.tof_amp = false;
viobot_set.tof_depth = false;
viobot_set.light = false;
 
ros::Rate r(10);
int v;
 
while(ros::ok()){
  std::cin >> v;
  if(v == 3){
      ROS_INFO("tof_enable");
      viobot_set.tof_enable = true;
      pub_sys_ctrl.publish(viobot_set);
  }
  if(v == 4){
      ROS_INFO("tof_disable");
      viobot_set.tof_enable = false;
      pub_sys_ctrl.publish(viobot_set);
  }
  if(v == 5){
      ROS_INFO("light_enable");
      viobot_set.light = true;
      pub_sys_ctrl.publish(viobot_set);
  }
  if(v == 6){
      ROS_INFO("light_disable");
      viobot_set.light = false;
      pub_sys_ctrl.publish(viobot_set);
  }
  r.sleep();
  ros::spinOnce(); 
}

三.ROS状态反馈

Type: system_ctrl::viobot_ctrl
Topic: /sys_status

这个话题是一秒发送一次的。

ROSdemo里面的例子

ros::Subscriber sub_sys_status = nh.subscribe("/sys_status", 2, sys_status_callback);//注册订阅回调

回调函数,1s触发一次,打印接收到的消息。

void sys_status_callback(const system_ctrl::viobot_ctrl::ConstPtr &msg){
    ROS_INFO("sys_status:");
    if(msg->image_select == 1) std::cout << "image_select: " << "left" << std::endl;
    else if(msg->image_select == 2) std::cout << "image_select: " << "right" << std::endl;
    else if(msg->image_select == 3) std::cout << "image_select: " << "left and right" << std::endl;
    else std::cout << "image_select: " << "OFF" << std::endl;
 
    if(msg->imu_raw == false) std::cout << "imu_raw: " << "OFF" << std::endl;
    else std::cout << "imu_raw: " << "ON" << std::endl;
 
    if(msg->tof_depth == false) std::cout << "tof_depth: " << "OFF" << std::endl;
    else std::cout << "tof_depth: " << "ON" << std::endl;
 
    if(msg->tof_enable == false) std::cout << "tof_enable: " << "OFF" << std::endl;
    else std::cout << "tof_enable: " << "ON" << std::endl;
 
    if(msg->tof_amp == false) std::cout << "tof_amp: " << "OFF" << std::endl;
    else std::cout << "tof_amp: " << "ON" << std::endl;
 
    if(msg->light == false) std::cout << "light: " << "OFF" << std::endl;
    else std::cout << "light: " << "ON" << std::endl;
}

四.http控制

HTTP协议主要用于参数读写及流数据获取,默认端口8000

按照协议发送即可(补光灯版没有TOF,TOF版没有补光灯)

五.http状态反馈