Hero Image
使用Cartographer进行建图

ubuntu22.04安装cartograph 源码安装 在我们的项目中,需要在ubuntu22.04下源码安装cartograph.可以按照以下步骤进行. git clone git@github.com:ros2/cartographer.git git clone git@github.com:ros2/cartographer_ros.git # 安装依赖项 absl c++扩展库,参考下install_abseil.sh里使用的absl版本 git clone git@github.com:abseil/abseil-cpp.git cd abseil-cpp git checkout 215105818dfde3174fe799600bb0f3cae233d0bf cd build cmake -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_POSITION_INDEPENDENT_CODE=ON \ -DCMAKE_INSTALL_PREFIX=/usr/local/stow/absl \ .. ninja sudo ninja install cd /usr/local/stow sudo stow absl # 安装 ceres 非线性优化库 sudo apt install libceres-dev # 安装lua 脚本语言库,提供配置文件解析 sudo apt install liblua5.3-dev # 安装protobuf 数据序列化开发库 sudo apt install protobuf-compiler libprotobuf-dev # 安装地图可视化库,支持轨迹绘制以及地图可视化 sudo apt install libcairo2-dev # 安装boost C++ 库集合 sudo apt install libboost-all-dev # 安装 Eigen3 线性代数库 sudo apt install libeigen3-dev # 编译cartographer_ros colcon build --packages-up-to cartographer_ros # rviz插件我们直接使用apt安装 sudo apt install ros-humble-nav2-rviz-plugins sudo apt install ros-humble-cartographer-rviz 保存地图 使用Cartographer进行建图时,可以将建图结果保存下来,我们这里可以采用ROS2自带的保存地图工具nav2_map_server.

Hero Image
rviz可视化Marker

ROS2 visualization_msgs::msg::Marker 使用指南 1. Marker 简介 visualization_msgs::msg::Marker 是 ROS2 中用于在 RViz 可视化各种图形(如点、线、面、模型等)的消息类型,用来表示一个单独的可视化对象(比如一个点、一条线、一个球体等)。通过发布 Marker 消息,可以在 RViz 中动态显示调试信息、地图、轨迹等。 2. 常用 Marker 类型 POINTS:显示一组点 LINE_STRIP:显示一条折线 LINE_LIST:显示多条线段 SPHERE、CUBE、CYLINDER:显示几何体,分别为3D球体,立方体和圆柱体 TRIANGLE_LIST:显示三角面片 SPHERE_LIST:显示一组球体 CUBE_LIST:显示一组立方体 CYLINDER_LIST:显示一组圆柱体 3. 代码示例 以下代码展示了如何在 ROS2 中发布点云(POINTS 类型)的 Marker: // 1. 包含必要的头文件 #include <rclcpp/rclcpp.hpp> #include <visualization_msgs/msg/marker.hpp> #include <visualization_msgs/msg/marker_array.hpp> #include <geometry_msgs/msg/point.hpp> // 2. 创建 Marker 消息 visualization_msgs::msg::Marker marker; marker.header.frame_id = "map"; // 坐标系名称,需与 RViz 保持一致 marker.header.stamp = node->now(); // 时间戳 marker.ns = "example_points"; // 命名空间,可用于分组 marker.id = 0; // Marker 的唯一ID,同一ns下不能重复 marker.type = visualization_msgs::msg::Marker::POINTS; // Marker 类型:点云 marker.action = visualization_msgs::msg::Marker::ADD; // 动作:添加 // 3. 设置点的大小(宽和高,单位:米) marker.scale.x = 0.2; // 点的宽度 marker.scale.y = 0.2; // 点的高度 marker.scale.z = 0.2; // 点的深度 // 对 POINTS 类型,marker.scale.z 无效 // 4. 设置点的颜色(RGBA,范围0~1) marker.color.r = 1.0f; // 红色分量 marker.color.g = 0.0f; // 绿色分量 marker.color.b = 0.0f; // 蓝色分量 marker.color.a = 1.0f; // 透明度(1为不透明) // 5. 添加点数据 geometry_msgs::msg::Point p1, p2; p1.x = 1.0; p1.y = 2.0; p1.z = 0.0; p2.x = 2.0; p2.y = 3.0; p2.z = 0.0; marker.points.push_back(p1); marker.points.push_back(p2); // 6. 发布 Marker visualization_msgs::msg::MarkerArray marker_array; marker_array.markers.push_back(marker); marker_pub->publish(marker_array); 详细注释说明 header.frame_id:指定 Marker 所在的坐标系,RViz 必须有该坐标系。 header.stamp:时间戳,建议用 node->now()。 ns 和 id:用于唯一标识一个 Marker,更新/删除时需一致。 type:Marker 的类型,决定显示方式。 scale.x/y:点的宽高,必须都大于 0。 color:点的颜色和透明度。 points:点的坐标列表。 action:常用为 ADD,也可用 DELETE 删除。 4. 面色 有时需要将地图某一部分区域绘制出来,此时可以采用三角形“扇形剖分”的方式填充出来,将Marker类型设置为TRIANGLE_LIST,然后设置颜色进行显示。