分类 ROS开发 下的文章


这里说的是从源码编译Nav2!


apt-get install python3-colcon-common-extensions
apt-get install ros-humble-geographic-msgs
apt-get install ros-humble-bond
apt-get install ros-humble-bondcpp
apt-get install ros-humble-test-msgs
apt-get install ros-humble-behaviortree-cpp
apt-get install libgraphicsmagick++
apt-get install ros-humble-diagnostic-updater
apt-get install libceres-dev
apt-get install ros-humble-robot-localization
apt-get install nlohmann-json3-dev
apt-get install libompl-dev
apt-get install libnanoflann-dev
apt-get install libbenchmark-dev

apt-get install  ros-humble-behaviortree-cpp-v3
apt-get install  xtensor-dev


如果编译nav2_system_tests时依赖nav2_minimal_tb3_sim,解决不了,直接删掉该目录,不需要。

再colcon  build 重新编译




ROS2的map_server启动与ROS1的启动方式有点差异,最大的区别是需要配置和激活,才可以:


启动: 

ros2   run   nav2_map_server   map_server   --ros-args   --param  yaml_filename:=<path_to_your_map.yaml>

例如:

   ros2 run nav2_map_server map_server  --ros-args --param yaml_filename:=/home/nvidia/xi/robot_loc/map_data/ChangShaZJY/nav_map/ros_nav_map/map.yaml

 

ros2 run nav2_map_server map_server --ros-args --params-file map_server_params.yaml


激活:

ros2   lifecycle   set  /map_server   configure


ros2   lifecycle   set  /map_server   activate










1、编写交叉编译脚本: toolchain.cmake,主要是sysroot将ARM的依赖作为rootfs,内容如下:


set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# 编译器设置
set(CMAKE_C_COMPILER /usr/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/aarch64-linux-gnu-g++)

# Sysroot 设置
set(CMAKE_SYSROOT "/home/aarch64rootfs")  # sysroot路径
set(CMAKE_FIND_ROOT_PATH "/home/aarch64rootfs" "/nfs/ros2_ts/install")

# 工作空间路径
set(WORKSPACE_INSTALL_DIR "/nfs/ros2_ts/install")

# 将工作空间添加到 CMake 前缀路径
list(APPEND CMAKE_PREFIX_PATH "${WORKSPACE_INSTALL_DIR}")

# 编译器标志 - 确保包含路径正确设置
#set(WORKSPACE_INSTALL_DIR "/nfs/ros2_ts/install")
set(CMAKE_C_FLAGS "--sysroot=${CMAKE_SYSROOT} -I${WORKSPACE_INSTALL_DIR}/include -I${WORKSPACE_INSTALL_DIR}/include/nav2_msgs")
set(CMAKE_CXX_FLAGS "--sysroot=${CMAKE_SYSROOT} -I${WORKSPACE_INSTALL_DIR}/include -I${WORKSPACE_INSTALL_DIR}/include/nav2_msgs")
set(CMAKE_EXE_LINKER_FLAGS "--sysroot=${CMAKE_SYSROOT}")

# 查找规则
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

# Python 设置
set(CMAKE_LIBRARY_PATH "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(PYTHON_INCLUDE_DIR "${CMAKE_SYSROOT}/usr/include/python3.10")
set(PYTHON_LIB_DIR "${CMAKE_SYSROOT}/usr/lib/aarch64-linux-gnu")
set(PYTHON_LIBRARIES "/usr/lib/aarch64-linux-gnu/libpython3.10.so")
set(AMENT_BUILD_PYTHON_BINDINGS OFF)





set(CMAKE_IGNORE_PATH /usr/lib/aarch64-linux-gnu /usr/local/lib)







2、应用

      

   cd  build        

   cmake   -DCMAKE_TOOLCHAIN_FILE=/toolchain.cmake   ../


   如果用ROS2的编译方法,则:

   colcon   build   --cmake-args   -DCMAKE_TOOLCHAIN_FILE=/toolchain.cmake














3、toolchain文件
      toolchain.cmake文件见本博客附件,解压即可。
































1、轮速计

     a): 头文件

         #include    <geometry_msgs/msg/twist.hpp>  或

         #include    <geometry_msgs/msg/twist_stamped.hpp> 

     b): 消息

        geometry_msgs::msg::Twist 或 geometry_msgs::msg::TwistStamped, 后面的包含了ROS的标准头信息,含有时间戳!



2、里程计

     a): 头文件

          #include    <nav_msgs/msg/odometry.hpp>

     b): 消息

          nav_msgs::msg::Odometry


3、定位

        定位模块发布的消息,比如AMCL定位模块。 

    a): 头文件

          #include "geometry_msgs/msg/pose_with_covariance_stamped.hpp"

     b): 消息

          geometry_msgs::msg::PoseWithCovarianceStamped


4、定位坐标系转换

        定位模块除了发布定位消息(机器人在全局坐标系下的位置,全局坐标系一般选择map),还需要发布坐标系转换tf, 即odometry坐标系至全局坐标系的转换tf.

       a): 头文件

            #include <tf2_ros/transform_broadcaster.h>

       b): tf

           tf2_ros::TransformBroadcaster           //用户将里程计坐标系(odom) --------[转换]-----> 全局坐标系(map)