紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
moveit2中MoveGroupInterface如何在类里面使用
-
平时的官方教程的MoveGroupInterface大都是这样写的,直接在main函数里面
auto const node = std::make_shared<rclcpp::Node>( "moveit_hello", rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true)); ...... using moveit::planning_interface::MoveGroupInterface; auto move_group_interface = MoveGroupInterface(node, "panda_arm");
现在我想把他写在类里面使用,假如类是这样的
class TestMoveGroupInterface : public rclcpp::Node { public: PointMap() : Node( "hello_moveit", rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true)) { // Create the MoveIt MoveGroup Interface // 这行代码报错 moeve_interface_= MoveGroupInterface(this, "panda_arm"); } private: moveit::planning_interface::MoveGroupInterface moeve_interface_; };
但是这行代码不能这样写,不能用this关键字,这行代码报错
moeve_interface_= MoveGroupInterface(this, "panda_arm");
进到这个MoveGroupInterface函数具体查看是这样传参的
MoveGroupInterface(const rclcpp::Node::SharedPtr& node, const std::string& group, const std::shared_ptr<tf2_ros::Buffer>& tf_buffer = std::shared_ptr<tf2_ros::Buffer>(), const rclcpp::Duration& wait_for_servers = rclcpp::Duration::from_seconds(-1));
想问一下各位大佬怎么在类里面使用MoveGroupInterface
-
@小小明 chatgpt 答案
在类中使用MoveGroupInterface
需要对参数进行适当的传递。可以使用类成员变量shared_from_this()
函数获取当前对象的std::shared_ptr
,然后将其作为参数传递给MoveGroupInterface
构造函数。以下是修改后的代码示例:class TestMoveGroupInterface : public rclcpp::Node { public: TestMoveGroupInterface() : Node( "hello_moveit", rclcpp::NodeOptions().automatically_declare_parameters_from_overrides(true)) { // Create the MoveIt MoveGroup Interface move_interface_ = std::make_shared<moveit::planning_interface::MoveGroupInterface>( shared_from_this(), "panda_arm"); } private: std::shared_ptr<moveit::planning_interface::MoveGroupInterface> move_interface_; };
在构造函数中,使用
shared_from_this()
函数获取当前对象的std::shared_ptr
,然后通过std::make_shared
创建move_interface_
对象。这样就能正确地传递当前节点对象的指针给MoveGroupInterface
构造函数,以完成初始化。