ROSサブスクリプショントピックの解決データを受信できません
背景紹介
最近、メッセージバスを使うプロジェクトをしていますが、ROSは比較的広く適用されているメッセージバスで、使いやすいです.
プロセス間通信のツールとしてROSを使用することは一時的に決定されたが,後期にプロジェクト移行などの他の要因によりcyber,ROS 2などの他のプロセス通信ライブラリが置き換えられることは排除されない.
移行を容易にするために,ROS通信に関連するすべてのコードを一度抽象化する.
げんしょう
ros::NodeHandle::subscribeメンバー関数を使用すると、サブスクリプション/teleop_twist_keyboardノードパブリッシュ/cmd_velトピックの場合、正しく受信できず、メッセージコールバック関数がトリガーされません.
解決する
subscribe関数のプロトタイプを確認したところ、Subscriberのオブジェクトが返され、エラーのコードがこのオブジェクトを保存していないため、サブスクリプションが無効になりました.正しい呼び出しコード:
最近、メッセージバスを使うプロジェクトをしていますが、ROSは比較的広く適用されているメッセージバスで、使いやすいです.
プロセス間通信のツールとしてROSを使用することは一時的に決定されたが,後期にプロジェクト移行などの他の要因によりcyber,ROS 2などの他のプロセス通信ライブラリが置き換えられることは排除されない.
移行を容易にするために,ROS通信に関連するすべてのコードを一度抽象化する.
class RosVelocityTopic : public VelocityTopic
{
public:
RosVelocityTopic(ros::NodeHandle* pRosNode,
const std::string &topicStr,
const std::function&)> &handler);
virtual ~RosVelocityTopic();
int publish(const velocity *vel) override;
private:
void onReceiveRosTwistTopic(const boost::shared_ptr& msg);
private:
ros::NodeHandle *m_pRosNode;
ros::Publisher *m_pRosPublisher;
std::function&)> m_fVelocityHandler;
};
}/*end of namespace comm*/
げんしょう
ros::NodeHandle::subscribeメンバー関数を使用すると、サブスクリプション/teleop_twist_keyboardノードパブリッシュ/cmd_velトピックの場合、正しく受信できず、メッセージコールバック関数がトリガーされません.
m_pRosNode->subscribe<:twist>(topicStr,1000,&RosVelocityTopic::onReceiveRosTwistTopic, this);
解決する
subscribe関数のプロトタイプを確認したところ、Subscriberのオブジェクトが返され、エラーのコードがこのオブジェクトを保存していないため、サブスクリプションが無効になりました.正しい呼び出しコード:
m_pRosSubscriber = new ros::Subscriber(m_pRosNode->subscribe<:twist>(topicStr, 1000,
&RosVelocityTopic::onReceiveRosTwistTopic, this));