简介ros2_astra_camera是奥比中光提供的在ros2环境下使用其相机的例子项目连接https://github.com/orbbec/ros2_astra_camera基于ros2 foxy/humble版本但是没有ros2 jazzy版本的由于ros2 jazzy已经有不少的修改所以在jazzy版本下编译ros2_astra_camera会出现错误。这篇文章讨论了如何去修改才能在ros2 jazzy中编译成功ros2_astra_camera注默认已经安装好了ros2 jazzy.下面链接是已经修改好后的ros2_astra_camera:https://download.csdn.net/download/hulinhulin/92882934?spm1011.2124.3001.62101. 下载ros2_astra_camera下载连接https://github.com/orbbec/ros2_astra_camerahttps://github.com/orbbec/ros2_astra_camera2. 安装必要的依赖可以查看项目readme.md文件里面有部分需要安装的依赖其中的libuvc不需要自己去编译了可以直接安装。以下是完整的依赖也可能不完整请根据提示安装sudo apt install libgflags-dev ros-$ROS_DISTRO-image-geometry ros-$ROS_DISTRO-camera-info-manager ros-$ROS_DISTRO-cv-bridge ros-$ROS_DISTRO-message-filters ros-$ROS_DISTRO-image-transport ros-$ROS_DISTRO-image-publisher libgoogle-glog-dev libusb-1.0-0-dev libeigen3-dev libuvc-dev nlohmann-json3-dev ros-$ROS_DISTRO-tf2-eigen ros-$ROS_DISTRO-tf2-sensor-msgs ros-$ROS_DISTRO-tf2-ros3.安装OpenNI和使用usb的规则如果已经安装可以跳过这一步。没有安装的话查看readme.md进行操作4. 需要修改的内容a.将项目中的所有cv_bridge/cv_bridge.h 修改为 cv_bridge/cv_bridge.hppb.将项目中的所有image_geometry/pinhole_camera_model.h 修改为 image_geometry/image_geometry/pinhole_camera_model.hppc.文件astra_camera/include/astra_camera/point_cloud_proc/point_cloud_xyz.h中,添加#include sensor_msgs/point_cloud2_iterator.hppd.文件astra_camera/include/astra_camera/ros_param_backend.h的内容替换为#pragma once #include rclcpp/rclcpp.hpp namespace astra_camera { class ParametersBackend { public: explicit ParametersBackend(rclcpp::Node* node); ~ParametersBackend(); void addOnSetParametersCallback( std::functionrcl_interfaces::msg::SetParametersResult(const std::vectorrclcpp::Parameter ) callback); private: rclcpp::Node* node_; rclcpp::Logger logger_; rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr ros_callback_; }; } // namespace astra_camerae.文件astra_camera/src/ros_param_backend.cpp的内容替换为#include astra_camera/ros_param_backend.h namespace astra_camera { ParametersBackend::ParametersBackend(rclcpp::Node *node) : node_(node), logger_(node_-get_logger()) {} ParametersBackend::~ParametersBackend() { if (ros_callback_) { node_-remove_on_set_parameters_callback(ros_callback_.get()); ros_callback_.reset(); } } void ParametersBackend::addOnSetParametersCallback( std::functionrcl_interfaces::msg::SetParametersResult(const std::vectorrclcpp::Parameter ) callback) { ros_callback_ node_-add_on_set_parameters_callback(std::move(callback)); } } // namespace astra_camera