我试图使用rosbridge在ros上发布基于Tizen的应用程序的消息,我得到一个错误

I'm trying to publish a message of a Tizen based app on ros using rosbridge and i get an error

本文关键字:消息 一个 错误 应用程序 Tizen rosbridge ros 布基于      更新时间:2023-09-26

正如标题所说,我试图使用rosbridge在ros上发布消息,因为我的应用程序是用javascript编写的。基本上,我想在运行ros的pc上投射心率数据流,以便进行一些阐述。这款应用运行在基于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';
        }
        }}

如果您正在从Tizen可穿戴设备读取人力资源管理数据,您可以使用 Tizen。humanactivitymonitor人类活动监测API代替使用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"/>

根据Tizen API的参考数据类型heartRate是long.

请查看Tizen人类活动监测指南和Tizen API参考详细实现。

相关文章: