能否给一段ROS2机器人turtlesim画圆形轨迹的示例代码?
时间: 2023-03-26 09:01:09 浏览: 144
可以,以下是一段ROS2机器人turtlesim画圆形轨迹的示例代码:
```
#include "rclcpp/rclcpp.hpp"
#include "geometry_msgs/msg/twist.hpp"
#include "turtlesim/msg/pose.hpp"
using namespace std::chrono_literals;
class TurtleSimNode : public rclcpp::Node
{
public:
TurtleSimNode()
: Node("turtlesim_node")
{
publisher_ = this->create_publisher<geometry_msgs::msg::Twist>("turtle1/cmd_vel", 10);
subscriber_ = this->create_subscription<turtlesim::msg::Pose>("turtle1/pose", 10, std::bind(&TurtleSimNode::poseCallback, this, std::placeholders::_1));
timer_ = this->create_wall_timer(500ms, std::bind(&TurtleSimNode::timerCallback, this));
}
private:
void poseCallback(const turtlesim::msg::Pose::SharedPtr pose)
{
current_pose_ = *pose;
}
void timerCallback()
{
auto msg = geometry_msgs::msg::Twist();
msg.linear.x = 2.;
msg.angular.z = 2.;
publisher_->publish(msg);
}
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_;
rclcpp::Subscription<turtlesim::msg::Pose>::SharedPtr subscriber_;
rclcpp::TimerBase::SharedPtr timer_;
turtlesim::msg::Pose current_pose_;
};
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
auto node = std::make_shared<TurtleSimNode>();
rclcpp::spin(node);
rclcpp::shutdown();
return ;
}
```