首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从if condtion ROS ardunio获取数据

无法从if condtion ROS ardunio获取数据
EN

Stack Overflow用户
提问于 2022-06-25 06:12:33
回答 1查看 97关注 0票数 0

我有一个运行在pc上的节点,它以字符串的形式发布了std_msgs/String,它发布了M、R、S,我有下面的Arduino代码。

代码语言:javascript
复制
#include <ros.h>
#include <std_msgs/Empty.h>
#include <std_msgs/String.h>
ros::NodeHandle  nh;

void messageCb( const std_msgs::String & toggle_msg)
{
nh.loginfo("recived new message ");
nh.loginfo(toggle_msg.data);

if(toggle_msg.data == "M")
{  
nh.loginfo("Recived M if-statment ");  
}

else if(toggle_msg.data == "R")
{  
nh.loginfo("Recived R if-statment ");  
}

else if(toggle_msg.data == "S")
{  
nh.loginfo("Recived S if-statment ");  
}
}

ros::Subscriber<std_msgs::String> sub("talker_vision", &messageCb );

void setup()
{ 
  pinMode(13, OUTPUT);
  nh.initNode();
  nh.subscribe(sub);
}

void loop()
{  
  nh.spinOnce();
  delay(1);
}

我收到了nh.loginfo(toggle_msg.data);的M,R,S,但是当我申请条件时

代码语言:javascript
复制
if(toggle_msg.data == "M")
{  
nh.loginfo("Recived M if-statment ");  
}

没有输出。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-28 16:32:58

您面临的问题是在这里比较两个字符串,它们被定义为char*,而不是使用Arduino经典的String类型。您可以看到消息,例如在这里生成的中字符串的类型。

比较

代码语言:javascript
复制
const char* str1 = "abc";
const char* str2 = "abc";
bool equal = str1 == str2;

将始终为假,因为您正在比较内存位置,而不是字符串本身。

所以你有两个选择:

创建两个Arduino字符串对象并进行比较

代码语言:javascript
复制
String arduinoString1 = String(str1);
String arduinoString2 = String(str2);
bool equal = arduinoString1 == arduinoString2;

或者更好的方法是使用标准的字符串比较器strcmp (文档)函数作为在这里描述,例如

代码语言:javascript
复制
bool equal = strcmp(str1, str2) == 0;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72751650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档