正如标题所说,我正在尝试使用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';
}
}}
答案 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 Guide和Tizen API reference了解详细信息。