Ros2

ros安装设置

添加源

echo "deb [arch=$(dpkg --print-architecture)] https://repo.huaweicloud.com/ros2/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装

sudo apt-get update
OpenGL: sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
OpenAL: sudo apt-get install libopenal0a libopenal-dev
ALUT:   sudo apt-get install libalut0 libalut-dev
sqlite3 sudo apt-get install sqlite3

ros2节点实例

source /opt/ros/humble/setup.bash

Ros2 command

//运行节点
ros2 run <package_naem> <executable_name>

//查看节点例表
ros2 node list

//查看节点信息
ros2 node info <node_name>

//查看话题例表
ros2 topc list

//重映射节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:=my_turtle

//运行节点时设置参数
ros2 run example_parameters_rclcpp parameters_basic --ros-args -p rcl_log_level:=10

ros2 service

ros2 pkg

//创建功能包
ros2 pkg create

//比如以下创建一个包名为example_py编译类型为ament_python,如果使用c++编译类型为ament_cmake使用dependencies添加依赖。
ros2 pkg create example_py --build-type ament_python --dependencies rclpy

//列出所有包
ros2 pkg executables

//列出指定包
ros2 pkg executables turtlesim 

//列出所有包
 ros2 pkg list

//输出某个包所在路径的前缀 
ros2 pkg prefix <package-name>

//比如小乌龟
ros2 pkg prefix turtlesim

//列出包的清单描述文件
每一个功能包都有一个标配的manifest.xml文件,用于记录这个包的名字,构建工具,编译信息,拥有者,干啥用的等信息。
通过这个信息,就可以自动为该功能包安装依赖,构建时确定编译顺序等
ros2 pkg xml turtlesim 

ros2 action

//查看动作列表
ros2 action list

//查看动作信息
ros2 action info /turtle1/rotate_absolute

colcon build

build

  • --packages-select ,仅生成单个包(或选定的包)。
  • --packages-up-to,构建选定的包,包括其依赖项(先编译所有依赖后再编译该包)。
  • --packages-above,整个工作区,然后对其中一个包进行了更改。此指令将重构此包以及(递归地)依赖于此包的所有包

TEB

安装编译

#在编译官方teb_local_planner时里要
sudo apt-get install ros-humble-libg2o         #需要安装指定版本的g2o,真恶心,否则一堆错误
  1. 还需要costmap_converter源码进行编译

teb参数解释

  • global_plan_viapoint_sep:设置为正值(考虑全局points) 含义是在global_planner轨迹上间隔多远会有一个viapoint插入。设置为1就是1m一个viapoint。
  • weight_viapoint:相关权重,提高和降低会明显改变输出轨迹的跟随力度
  • acc_lim_x:(double,默认值 :0.5) 机器人的最大向前移加速度,单位为米/秒
  • acc_lim_theta:(double,默认值:0.5) 机器人的最大角加速度,以弧度/秒为单位
  • max_vel_x:(double,默认值:0.4) 机器人的最大平移速度,单位米/秒
  • max_vel_x_backwards:(double,默认值:0.2) 向后行驶时机器人的最大绝对平移速度,米/秒

需要的ros库

sudo apt-get install ros-humble-behaviortree-cpp-v3  #需要behaviortree-cpp-v3库
sudo apt-get install ros-humble-cv-bridge           #需要cv-brideg库
sudo apt-get install ros-humble-ompl                #ompl库
sudo apt-get install ros-humble-gazebo-ros-pkgs

注意事项

  1. 需要yawml0.7.0以上并开启动态库编译

源码功能包拆解

#==============控制器及其实现相关功能包======================#
nav2_controller | 控制器
nav2_dwb_controller | DWB控制器,Nav2控制器的一个实现
nav2_regulated_pure_pursuit_controller | 纯追踪控制器,Nav2控制器的一个实现
nav2_constrained_smoother

#==============规划器及其实现相关功能包======================#
nav2_planner | Nav2规划器
nav2_navfn_planner | navfn规划器,Nav2规划器的一个实现
nav2_smac_planner | smac规划器,Nav2规划器的一个实现

#=====================恢复器==============================#
nav2_recoveries | Nav2恢复器

#=====================行为树节点及其定义====================#
nav2_bt_navigator | 导航行为树
nav2_behavior_tree | 行为树节点插件定义

#=====================地图和定位===========================#
nav2_map_server | 地图服务器
nav2_costmap_2d | 2D代价地图
nav2_voxel_grid | 体素栅格
nav2_amcl | 自适应蒙特卡洛定位。  状态估计,输入地图、激光、里程计数据,输出机器人map和odom之间的位资关系。

#=====================通用插件系统管理等====================#
nav2_bringup | 启动入口
nav2_common | 公共功能包
nav2_msgs | 通信相关消息定义
nav2_util | 常用工具
nav2_lifecycle_manager |节点生命周期管理器 
nav2_rviz_plugins | RVIZ插件

#=====================核心定义============================#
nav2_core | Nav2核心包
navigation2 | nav2导航汇总配置

#=====================应用================================#
nav2_waypoint_follower | 路点跟踪

#=====================测试=================================#
nav2_system_tests | 系统测试
编号 配置项 用途 对应模块与参数详解
1 amcl 机器人定位 nav2_amcl
2 bt_navigator 导航行为树(用于加载行为树节点并根据xml配置进行调度) nav2_bt_navigator,nav2_behavior_tree
3 controller_server 控制器服务器 nav2_controller,nav2_dwb_controller,
nav2_regulated_pure_pursuit_controller
4 planner_server 规划服务器 nav2_planner,nav2_navfn_planner,smac_planner
5 recoveries_server 恢复服务器 nav2_recoveries
6 local_costmap 局部代价地图 nav2_costmap_2d,static_layer,inflation_layer
7 global_costmap 全局代价地图 nav2_costmap_2d,nav2_map_server

TF2

坐标系

  • earth:
  • map:
  • odom:
  • base_link: "base_link"通常用于表示机器人的实际底盘或主体的坐标系。这个坐标系通常与机器人的物理结构直接相关,它可能位于机器人底盘的中心或者其他适当的位置。例如,对于一个移动机器人,"base_link"的原点可能位于机器人的几何中心或底盘的旋转中心,这取决于机器人的设计。
  • base_footprint:"base_footprint"则更多地被用作机器人在地面上的一个虚拟平面的参考点,通常是机器人底盘的投影点。这个坐标系通常位于机器人底盘底部,用于表示机器人与地面的接触点。它可以被认为是机器人底部的一个虚拟标记,用来执行路径规划、避障和定位等任务。

在许多情况下,"base_link"和"base_footprint"的坐标原点可能是相同的,但它们的用途和表示方式略有不同。例如,在路径规划中,可能更常用"base_footprint",因为它更接近机器人在地面上的实际位置,有助于避免碰撞。而在其他情况下,如控制机器人的运动,使用"base_link"可能更合适,因为它更直接地与机器人的物理结构相联系。

rviz2

gazebo

虚拟机打不开gazebo问题
VMware: vmw_ioctl_command error 无效的参数.-CSDN博客

rqt

安装rqt插件

sudo apt-get install ros-noetic-rqt-common-plugins

Mqtt

cartographer

install

使用网络源安装

sudo apt install ros-humble-cartographer     #安装cartographer
sudo apt install ros-humble-cartographer-ros    #安装cartographer for ros

ros2 pkg list | grep cartographer    #查看是否安装成功

sudo apt install ros-humble-nav2-map-server

cartographer参数配置

前端参数

文件:trajectory_builder_2d
src/cartographer/configuration_files/trajectory_builder_2d.lua

  -- 是否使用IMU数据
  use_imu_data = true, 
  -- 深度数据最小范围
  min_range = 0.,
  -- 深度数据最大范围
  max_range = 30.,
  -- 传感器数据超出有效范围最大值时,按此值来处理
  missing_data_ray_length = 5.,
  -- 是否使用实时回环检测来进行前端的扫描匹配
  use_online_correlative_scan_matching = true
  -- 运动过滤,检测运动变化,避免机器人静止时插入数据
  motion_filter.max_angle_radians

后端参数

文件:pose_graph.lua-后端参数配置项
路径src/cartographer/configuration_files/pose_graph.lua
该文件主要和地图构建

--Fast csm的最低分数,高于此分数才进行优化。
constraint_builder.min_score = 0.65
--全局定位最小分数,低于此分数则认为目前全局定位不准确
constraint_builder.global_localization_min_score = 0.7

cartographer_ros参数配置

该部分参数主要是用于和ROS2进行通信和数据收发的配置,比如配置从哪个话题读取里程记数据,从哪个话题来获取深度信息(雷达)。
文件:backpack_2d.lua

路径:src/cartographer_ros/cartographer_ros/configuration_files/backpack_2d.lua

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  -- 用来发布子地图的ROS坐标系ID,位姿的父坐标系,通常是map。
  map_frame = "map",
  -- SLAM算法跟随的坐标系ID
  tracking_frame = "base_link",
  -- 将发布map到published_frame之间的tf
  published_frame = "base_link",
  -- 位于“published_frame ”和“map_frame”之间,用来发布本地SLAM结果(非闭环),通常是“odom”
  odom_frame = "odom",
  -- 是否提供里程计
  provide_odom_frame = true,
  -- 只发布二维位姿态(不包含俯仰角)
  publish_frame_projected_to_2d = false,
  -- 是否使用里程计数据
  use_odometry = false,
  -- 是否使用GPS定位
  use_nav_sat = false,
  -- 是否使用路标
  use_landmarks = false,
  -- 订阅的laser scan topics的个数
  num_laser_scans = 0,
  -- 订阅多回波技术laser scan topics的个数
  num_multi_echo_laser_scans = 1,
  -- 分割雷达数据的个数
  num_subdivisions_per_laser_scan = 10,
  -- 订阅的点云topics的个数
  num_point_clouds = 0,
  -- 使用tf2查找变换的超时秒数
  lookup_transform_timeout_sec = 0.2,
  -- 发布submap的周期间隔
  submap_publish_period_sec = 0.3,
  -- 发布姿态的周期间隔
  pose_publish_period_sec = 5e-3,
  -- 轨迹发布周期间隔
  trajectory_publish_period_sec = 30e-3,
  -- 测距仪的采样率
  rangefinder_sampling_ratio = 1.,
  --里程记数据采样率
  odometry_sampling_ratio = 1.,
  -- 固定的frame位姿采样率
  fixed_frame_pose_sampling_ratio = 1.,
  -- IMU数据采样率
  imu_sampling_ratio = 1.,
  -- 路标采样率
  landmarks_sampling_ratio = 1.,
}

保存地图方法

ros2 run nav2_map_server map_saver_cli --help
# 先将地图保存到src/fishbot_cartographer/map目录下
cd src/fishbot_cartographer/ && mkdir map && cd map
ros2 run nav2_map_server map_saver_cli -t map -f fishbot_map

slam-toolbox

slam-toolbox也是一个建图工具

ros2 launch xxx slam-toolbox.launch.py
posted @   alvinlyb  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示