ros2 action导致编译问题

1、我的消息包里有.action文件;
2、我的工程包里没有用到.action文件,却导致编译不过;
报错内容:

__rosidl_typesupport_cpp.so: undefined reference to `rosidl_service_type_support_t const* rosidl_typesupport_cpp::get_service_type_support_handle<action_msgs::srv::CancelGoal>()'
/usr/bin/ld: __rosidl_typesupport_cpp.so: undefined reference to `rosidl_message_type_support_t const* rosidl_typesupport_cpp::get_message_type_support_handle<action_msgs::msg::GoalStatusArray_<std::allocator<void> > >()'

3、需要在我的工程包的 Makefile.txt 加上依赖包,在下面两个地方加上就可以编译通过了;

find_package(rclcpp_action REQUIRED)
....
ament_target_dependencies(
  rclcpp 
  sensor_msgs
  rclcpp_action)    # CHANGE
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS2中引入了action通信机制,通过action通信可以实现更复杂和灵活的交互式任务处理,相比于ROS1中的service通信机制,action通信可以处理需要长时间运行、中间结果反馈以及取消请求的任务。 实现一个ROS2 action通信的demo可以遵循以下步骤: 1. 创建一个名为my_package的ROS2 package,并在该package中创建一个名为my_actionaction文件,用于定义action的目标和反馈消息。 2. 在package的CMakeLists.txt文件中添加对action接口的依赖,确保action文件正确编译。 3. 编写一个名为action_server.cpp的节点程序作为action服务器,用于接收action请求并生成结果。 4. 在action_server.cpp中,包含自动生成的action接口头文件,并在main函数中创建一个相应的action服务器。 5. 在action服务器的回调函数中处理action请求,并根据需要更新并发送反馈消息。 6. 编写一个名为action_client.cpp的节点程序作为action客户端,用于向action服务器发送请求并获取结果。 7. 在action_client.cpp中,包含自动生成的action接口头文件,并在main函数中创建一个相应的action客户端。 8. 在action客户端的回调函数中发送action请求,并根据需要处理和显示从action服务器接收到的反馈消息和结果。 9. 使用colcon编译并运行action服务器和action客户端节点,观察是否可以成功进行action通信,并获取到相应的反馈和结果。 通过实现这个简单的demo,可以理解和体验ROS2中action通信的使用方法和优势,为自己更复杂的机器人任务处理和交互设计提供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值