简介
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?spm=1011.2124.3001.6210
1. 下载ros2_astra_camera
下载连接:https://github.com/orbbec/ros2_astra_camerahttps://github.com/orbbec/ros2_astra_camera
2. 安装必要的依赖
可以查看项目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.hpp
b.将项目中的所有image_geometry/pinhole_camera_model.h 修改为 image_geometry/image_geometry/pinhole_camera_model.hpp
c.文件astra_camera/include/astra_camera/point_cloud_proc/point_cloud_xyz.h中,
添加:#include <sensor_msgs/point_cloud2_iterator.hpp>
d.文件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::function<rcl_interfaces::msg::SetParametersResult(const std::vector<rclcpp::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::function<rcl_interfaces::msg::SetParametersResult(const std::vector<rclcpp::Parameter> &)> callback) { ros_callback_ = node_->add_on_set_parameters_callback(std::move(callback)); } } // namespace astra_camera