我正在尝试使用rosbridge在ros上发布基于Tizen的应用程序的消息,我收到错误消息

时间:2016-10-12 09:01:53

标签: javascript publish ros tizen

正如标题所说,我正在尝试使用rosbridge在ros上发布消息,因为我的应用程序是用javascript编写的。基本上我想在运行ros的电脑上投出心率数据流,以便进行一些详细说明。该应用程序在基于Tizen的智能手表上运行。如果我尝试发布几何消息,比如设备方向,我没有问题,它们发布在ros上。我尝试了传感器消息类型(特别是channelfloat32)来投射心率流而没有成功。我调查了从传感器发出的数据类型,我发现这是javascript的数字类型数据。 所以我使用了标准的消息类型(特别是Float64,因为据我所知,基于一些搜索,显然javascript只使用这种类型的数字),但没有再次成功。 也许我可以转换变量或更改其类型,但我不知道这是否可能是一个可能的解决方案,我真的不知道该怎么做,也许我只需要更改ros消息的类型。 从我之前的问题中可以看出,我对编码非常陌生,而且我又在同一个项目上。

提前感谢您的帮助!

代码如下:

document.addEventListener('tizenhwkey', function(e) {
    if(e.keyName === "back")
        window.webapis.motion.stop("HRM");
        tizen.application.getCurrentApplication().exit();
});

功能连接(){

var ip;
var connection=false;

if (document.getElementById("ip").value==="")
{ 
    ip="10.42.0.1";
}
else 
{ 
    ip=document.getElementById("ip").value;
}

var ros = new ROSLIB.Ros({
    url : 'ws://' + ip +':9090'
    });

ros.on('connection', function() {
    connection=true;
    document.getElementById("Connection_status").setAttribute("color","green");
    document.getElementById("Connection_status").innerHTML = 'Connected';
    tizen.power.request("SCREEN", "SCREEN_DIM");
});

ros.on('error', function(error) {
    document.getElementById("Connection_status").setAttribute("color","orange");
    document.getElementById("Connection_status").innerHTML = 'Error';
});

ros.on('close', function() {
    document.getElementById("Connection_status").setAttribute("color","red");
    document.getElementById("Connection_status").innerHTML = 'Unconnected';
    connection=false;
    tizen.power.release("SCREEN");
});

var RatePub = new ROSLIB.Topic({
    ros : ros,
    name : '/HeartRateData',
    messageType : 'std_msgs/Float64'
});

window.webapis.motion.start("HRM", onchangedCB);

function onchangedCB(hrmInfo)
{
   var data = hrmInfo.heartRate;
   document.getElementById("mytext").innerHTML = 'Heart Rate= ' + data + ' bpm';


   var Float64 = new ROSLIB.Message({
            data:[data]
        });

        if(connection===true)
            {
            RatePub.publish(Float64);
            }
        else
        {
            document.getElementById("mytext").innerHTML = 'Heart Rate= 0 bpm';
        }

        }}

1 个答案:

答案 0 :(得分:0)

如果您正在阅读Tizen可穿戴设备的HRM数据,您可以使用Human Activity Monitor API的 tizen.humanactivitymonitor ,而不是使用 window.webapis.motion

而是使用

window.webapis.motion.start("HRM", onchangedCB);

function onchangedCB(hrmInfo) {
    var data = hrmInfo.heartRate;
    document.getElementById("mytext").innerHTML = 'Heart Rate= ' + data + ' bpm';
    ...
    ..
   }

您可以尝试

var dataCount = 0;

function onsuccessCB(hrmInfo)
{
   console.log("Heart Rate: " + hrmInfo.heartRate);
   console.log("Peak-to-peak interval: " + hrmInfo.rRInterval + " milliseconds");
   dataCount++;

   ...
   ..

   if (dataCount > 10){
       /* Stop the sensor after detecting a few changes */
       tizen.humanactivitymonitor.stop("HRM");
   }
}

tizen.humanactivitymonitor.start("HRM", onsuccessCB);

在config.xml文件中添加必要的权限

<tizen:privilege name="http://tizen.org/privilege/healthinfo"/>
<tizen:privilege name="http://tizen.org/privilege/power"/>

根据heartRate的Tizen API reference数据类型很长。

请查看Tizen Human Activity Monitor GuideTizen API reference了解详细信息。