Debian 10 arm 源码编译ros2 humble

背景

最近收到一个AidBox GS865盒子,高通865cpu,能同时运行debian10 和 安卓,其实是安卓系统上跑了个类似虚拟机的软件aidlux,其他安卓手机也能用aidlux。这个系统项目要求使用ros2 humble.所以记录下安装步骤。

准备

系统设置

设置locale

终端输入

locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings

执行sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
如果报错说找不到文件夹啥的,则重置下

sudo dpkg-reconfigure locales

按照提示选en_US.UTF-8,上下移动光标,空格选中,然后按回车

添加ros2源

sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo focal) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装开发工具和 ROS 工具

终端输入

sudo apt update && sudo apt install -y \
  build-essential \
  cmake \
  git \
  python3-colcon-common-extensions \
  python3-flake8 \
  python3-pip \
  python3-pytest \
  python3-rosdep \
  python3-setuptools \
  python3-vcstool \
  wget \
  llvm-13-dev
  sudo pip install "pybind11[global]"

升级cmake
终端输入

wget https://github.com/Kitware/CMake/releases/download/v3.24.2/cmake-3.24.2.zip
unzip cmake-3.24.2.zip
cd cmake-3.24.2
./bootstrap && make -j6 && sudo make install

编译源码

获取ros2源码

mkdir -p ~/ros2_humble/src
cd ~/ros2_humble
vcs import --input https://raw.githubusercontent.com/ros2/ros2/humble/ros2.repos src

这里等待时间比较久,家里网络最好能科学上网,这样拉取代码速度会快点

使用 rosdep 安装依赖项

cd ~/ros2_humble
sudo apt upgrade
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

我这里执行最后一个指令时提示libignition-math6的依赖有问题,装不上,这里不用管,src目录下已经有这个源码。
重新执行最后一个指令,直到没有可以安装的项目为止。

编译ros2

cd ~/ros2_humble/
colcon build --symlink-install

编译时会有各种问题

  1. 问题1

decltype(std::declval<T &>() = nullptr =运算符问题
解决:~/ros2_humble/src/ros2/rclcpp/rclcpp/include/rclcpp/any_service_callback.hpp 第48行decltype(std::declval<T &>() = nullptr
修改为decltype(std::declval<T &>() == nullptr

  1. 问题2
--- stderr: intra_process_demo                                            
/usr/bin/ld: CMakeFiles/image_view_node.dir/src/image_pipeline/image_view_node.cpp.o: undefined reference to symbol '_ZN2cv12VideoCaptureD1Ev'
/usr/bin/ld: /usr/lib/aarch64-linux-gnu/libopencv_videoio.so.3.2: error adding symbols: DSO missing from command line

修改代码

diff --git a/intra_process_demo/CMakeLists.txt b/intra_process_demo/CMakeLists.txt
index 9f44588..7ed9273 100644
--- a/intra_process_demo/CMakeLists.txt
+++ b/intra_process_demo/CMakeLists.txt
@@ -50,7 +50,9 @@ target_link_libraries(image_pipeline_all_in_one
   ${builtin_interfaces_TARGETS}
   ${sensor_msgs_TARGETS}
   opencv_core
-  opencv_highgui)
+  opencv_highgui
+  opencv_videoio
+  opencv_imgproc)
 
 # A single program with one of each of the image pipeline demo nodes, but two image views.
 add_executable(image_pipeline_with_two_image_view
@@ -60,7 +62,9 @@ target_link_libraries(image_pipeline_with_two_image_view
   ${builtin_interfaces_TARGETS}
   ${sensor_msgs_TARGETS}
   opencv_core
-  opencv_highgui)
+  opencv_highgui
+  opencv_videoio
+  opencv_imgproc)
 
 # A stand alone node which produces images from a camera using OpenCV.
 add_executable(camera_node
@@ -71,7 +75,9 @@ target_link_libraries(camera_node
   ${sensor_msgs_TARGETS}
   opencv_core
   opencv_highgui
-  opencv_imgproc)
+  opencv_imgproc
+  opencv_videoio
+  )
 
 # A stand alone node which adds some text to an image using OpenCV before passing it along.
 add_executable(watermark_node
@@ -81,7 +87,8 @@ target_link_libraries(watermark_node
   ${builtin_interfaces_TARGETS}
   ${sensor_msgs_TARGETS}
   opencv_core
-  opencv_videoio)
+  opencv_videoio
+  opencv_imgproc)
 
 # A stand alone node which consumes images and displays them using OpenCV.
 add_executable(image_view_node
@@ -91,7 +98,9 @@ target_link_libraries(image_view_node
   ${builtin_interfaces_TARGETS}
   ${sensor_msgs_TARGETS}
   opencv_core
-  opencv_highgui)
+  opencv_highgui
+  opencv_videoio
+  opencv_imgproc)

都是些opencv的问题,我这边本地装的是opencv3.2,可能版本问题要添加些库依赖。
改完重新编译,看见
Summary: 340 packages finished
就编译完毕。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值