xarm_ros2开发笔记1——编译报错

问题描述:前面都是一步一步走没问题,在编译的时候出现了一下问题。

问题见下:fatal error: xxxxx.hpp:No such file or directory

以下是deepseek的搜索结果 

根据错误信息,问题出在缺少 hardware_interface/types/hardware_interface_status_values.hpp 头文件。以下是逐步排查和解决方案:

1. 确认ROS 2版本及依赖

  • 检查ROS 2版本
    运行 echo $ROS_DISTRO 确认当前ROS版本(如Foxy、Humble等)。不同版本的hardware_interface头文件路径可能不同。

  • 安装/更新ros2-control包
    确保已安装对应版本的ros2-controlhardware_interface

    sudo apt update
    sudo apt install ros-$ROS_DISTRO-ros2-control ros-$ROS_DISTRO-hardware-interface

2. 检查头文件是否存在

  • 手动查找头文件
    运行以下命令确认头文件路径:

    find /opt/ros/$ROS_DISTRO -name "hardware_interface_status_values.hpp"
    • 如果找到路径,检查代码中的#include是否正确。

    • 如果未找到,可能是版本不兼容或安装问题。

3. 适配代码到当前ROS版本

  • 情况一:头文件路径变更
    ROS 2 Humble及之后版本,头文件路径可能已更新。将代码中的:

    #include "hardware_interface/types/hardware_interface_status_values.hpp"

    改为:

    #include "hardware_interface/hardware_interface_status_values.hpp"
  • 情况二:使用兼容分支
    如果使用的xarm_ros2代码未适配你的ROS版本,尝试切换到对应分支。例如:

  • cd ~/dev_ws/src/xarm_ros2
    git checkout humble  # 假设存在humble分支

4. 重新编译

清理并重新构建:

cd ~/dev_ws
rm -rf build install log
colcon build

———————————————————————————————————————————

到此就成功了。果然是deepseek靠谱👍

———————————————————————————————————————————

5. 其他可能

  • 手动源码安装ros2-control
    如果系统包过旧,从源码安装最新版本:

    cd ~/dev_ws/src
    git clone https://github.com/ros-controls/ros2_control.git
    git clone https://github.com/ros-controls/ros2_controllers.git
    cd ..
    rosdep install --from-paths src --ignore-src -y
    colcon build

总结

该错误通常由ROS版本与代码依赖不匹配导致。调整头文件路径或切换代码分支即可解决。如果问题持续,请提供ROS版本和xarm_ros2的仓库链接以便进一步排查。

In member function ‘virtual bool xarm_control::XArmHW::init(ros::NodeHandle&, ros::NodeHandle&)’: /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:155:3: error: ‘hw_nh_’ was not declared in this scope; did you mean ‘hw_ns_’? 155 | hw_nh_ = robot_hw_nh; | ^~~~~~ | hw_ns_ /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:156:3: error: ‘root_nh_’ was not declared in this scope; did you mean ‘root_nh’? 156 | root_nh_ = root_nh; | ^~~~~~~~ | root_nh /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:206:3: error: ‘locked_ip_key_’ was not declared in this scope 206 | locked_ip_key_ = "/uf_robot/" + robot_ip; | ^~~~~~~~~~~~~~ /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:225:48: error: no matching function for call to ‘xarm_api::XArmDriver::init(ros::NodeHandle&, std::string&, bool)’ 225 | xarm_driver_.init(robot_hw_nh, robot_ip, true); | ^ In file included from /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/include/xarm_controller/xarm_hw.h:36, from /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:8: /home/sparks/xarm_ws/src/xarm_ros/xarm_api/include/xarm_api/xarm_driver.h:21:14: note: candidate: ‘void xarm_api::XArmDriver::init(ros::NodeHandle&, std::string&)’ 21 | void init(ros::NodeHandle& root_nh, std::string &server_ip); | ^~~~ /home/sparks/xarm_ws/src/xarm_ros/xarm_api/include/xarm_api/xarm_driver.h:21:14: note: candidate expects 2 arguments, 3 provided /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp: In destructor ‘virtual xarm_control::XArmHW::~XArmHW()’: /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:258:3: error: ‘root_nh_’ was not declared in this scope 258 | root_nh_.setParam(locked_ip_key_, false); | ^~~~~~~~ /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:258:21: error: ‘locked_ip_key_’ was not declared in this scope 258 | root_nh_.setParam(locked_ip_key_, false); | ^~~~~~~~~~~~~~ /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp: In member function ‘virtual void xarm_control::XArmHW::write(const ros::Time&, const ros::Duration&)’: /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:456:5: error: ‘hw_nh_’ was not declared in this scope; did you mean ‘hw_ns_’? 456 | hw_nh_.param<float>("velo_duration", velo_duration, VELO_DURATION); | ^~~~~~ | hw_ns_ /home/sparks/xarm_ws/src/xarm_ros/xarm_controller/src/xarm_hw.cpp:456:18: error: expected primary-expression before ‘float’ 456 | hw_nh_.param<float>("velo_duration", velo_duration, VELO_DURATION); | ^~~~~ make[2]: *** [xarm_ros/xarm_controller/CMakeFiles/xarm_hw.dir/build.make:63:xarm_ros/xarm_controller/CMakeFiles/xarm_hw.dir/src/xarm_hw.cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:6937:xarm_ros/xarm_controller/CMakeFiles/xarm_hw.dir/all] 错误 2 make: *** [Makefile:141:all] 错误 2 如何解决
07-16
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值