Twist 보내기 Panel plugin 만들기

5393 단어 ROS2ROS
rviz2 플러그인을 만드는 방법 톱 페이지로

마우스 조작으로 Twist를 보내는 플러그인을 만듭니다.

실행 예





ROS1 버전



이 코드를 rviz2 용으로 다시 작성하십시오.
ROS 강좌 74 twist 보내기 rviz panel plugin 만들기

주요 변경 사항



twist_panel.hpp


onInitialize() 추가
public:
    TwistPanel(QWidget *parent = nullptr);

    virtual void onInitialize(); // 追加
    virtual void load(const rviz_common::Config &config);
    virtual void save(rviz_common::Config config) const;
NodeHanlde 가 존재하지 않으므로 NodePublisher 는 template를 가질 수 있을 필요가 있기 때문에 2개 선언합니다
protected:
    // The ROS node handle.
    // ros::NodeHandle nh_;
    rclcpp::Node::SharedPtr nh_;

    // The ROS publisher for the command velocity.
    // ros::Publisher twist_publisher_;
    rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr twist_publisher_;
    rclcpp::Publisher<geometry_msgs::msg::TwistStamped>::SharedPtr twist_stamped_publisher_;

twist_panel.cpp


Node 를 작성하기 위해 낯선 것과 같은 것을 쓰고 있습니다.
이번은 코멘트 아웃하고 있는 코드라도 좋지만, 코멘트 아웃하고 있는 코드를 사용하면 Publisher 는 동작합니다만 Subscription (자세한 분이라면 가르쳐 주시면 고맙습니다)
void TwistPanel::onInitialize()
{
    nh_ = this->getDisplayContext()->getRosNodeAbstraction().lock()->get_raw_node();
    // nh_ = std::make_shared<rclcpp::Node>("twist_panel", "sample_rviz_plugin");
}
        if (twist_publisher_ || twist_stamped_publisher_) //
        {
            float vel_max1 = max1_edit_->text().toFloat();
            float vel_max2 = max2_edit_->text().toFloat();
            float vel_max3 = max3_edit_->text().toFloat();

            auto msg = std::make_shared<geometry_msgs::msg::TwistStamped>(); // 
            msg->header.frame_id = pub_frame_;
            // msg->header.stamp = ros::Time::now();
            msg->header.stamp = nh_->now(); //
    // twist_publisher_ = nh_.advertise<geometry_msgs::TwistStamped>(topic_name, 10);
    twist_stamped_publisher_ = nh_->create_publisher<geometry_msgs::msg::TwistStamped>(topic_name, rclcpp::QoS(10));

좋은 웹페이지 즐겨찾기