为了构建完善的基于OpenEuler的ROS2软件生态,需要将以ROS2为载体的部分激光导航算法迁移至OpenEuler。激光导航算法作为当前自动驾驶/AI领域关键的模块之一,能在OpenEuler的ROS2上运行起来有着重要意义。当前应用广泛的开源激光导航算法有很多,开源的Gmapping,move_base等均用C++实现,可以作为很好的入门软件进行学习。还可以作为一个入口,扩展更多的相关软件包进入基于OpenEuler的ROS2软件生态。
软件架构原理参考:https://github.com/Project-MANAS/slam_gmapping
其中核心软件结构如下,对于workspace目录完整展示,可以看到ros2和slam_gmapping的分布位置。
.
├── 3rdparty
├── build_tools
│ └── colcon
└── workspace
└── src
├── ament
│ ├── ament_cmake
│ ├── ament_index
│ ├── ament_lint
│ ├── ament_package
│ ├── google_benchmark_vendor
│ ├── googletest
│ └── uncrustify_vendor
├── eclipse-cyclonedds
│ └── cyclonedds
├── eProsima
│ ├── Fast-CDR
│ ├── Fast-DDS
│ └── foonathan_memory_vendor
├── osrf
│ ├── osrf_pycommon
│ └── osrf_testing_tools_cpp
├── ros
│ ├── class_loader
│ ├── pluginlib
│ ├── resource_retriever
│ ├── ros_environment
│ ├── ros_tutorials
│ ├── Stage
│ ├── stage_ros2
│ ├── urdfdom
│ └── urdfdom_headers
├── ros2
│ ├── ament_cmake_ros
│ ├── common_interfaces
│ ├── console_bridge_vendor
│ ├── demos
│ ├── eigen3_cmake_module
│ ├── example_interfaces
│ ├── examples
│ ├── geometry2
│ ├── launch
│ ├── launch_ros
│ ├── libyaml_vendor
│ ├── message_filters
│ ├── mimick_vendor
│ ├── orocos_kinematics_dynamics
│ ├── performance_test_fixture
│ ├── python_cmake_module
│ ├── rcl
│ ├── rclcpp
│ ├── rcl_interfaces
│ ├── rcl_logging
│ ├── rclpy
│ ├── rcpputils
│ ├── rcutils
│ ├── realtime_support
│ ├── rmw
│ ├── rmw_connext
│ ├── rmw_cyclonedds
│ ├── rmw_dds_common
│ ├── rmw_fastrtps
│ ├── rmw_implementation
│ ├── ros1_bridge
│ ├── ros2cli
│ ├── ros2cli_common_extensions
│ ├── rosidl
│ ├── rosidl_dds
│ ├── rosidl_defaults
│ ├── rosidl_python
│ ├── rosidl_runtime_py
│ ├── rosidl_typesupport
│ ├── rosidl_typesupport_connext
│ ├── rosidl_typesupport_fastrtps
│ ├── ros_testing
│ ├── rpyutils
│ ├── slam_gmapping
│ ├── spdlog_vendor
│ ├── sros2
│ ├── system_tests
│ ├── test_interface_files
│ ├── tinyxml2_vendor
│ ├── tinyxml_vendor
│ ├── tlsf
│ ├── unique_identifier_msgs
│ ├── urdf
│ └── yaml_cpp_vendor
├── ros-perception
│ └── laser_geometry
├── ros-planning
│ └── navigation_msgs
├── ros-tooling
│ └── libstatistics_collector
├── ros-tracing
│ └── ros2_tracing
├── ros-visualization
│ ├── interactive_markers
│ ├── python_qt_binding
│ ├── rqt_action
│ ├── rqt_console
│ ├── rqt_graph
│ ├── rqt_msg
│ ├── rqt_plot
│ ├── rqt_publisher
│ ├── rqt_top
│ ├── rqt_topic
│ └── tango_icons_vendor
└── temp_3rdparty
└── eigen-3.3.7
以X86环境,版本号1.0.0为例
sudo rpm -ivh slam_gmapping_ros2-1.0.0-1.oe2203.x86_64.rpm --nodeps --force
安装完成以后,rviz有如下输出,则表示安装成功
添加以下环境变量到HOME目录下的.bashrc尾部
export STAGEPATH=/opt/ros/foxy/share/stage
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
编辑完.bashrc后,执行以下命令使环境变量生效
source ~/.bashrc
启动 stage ros模拟器,用键盘控制里面的模型:
source /opt/ros/foxy/setup.sh
ros2 run stage_ros stageros /opt/ros/foxy/share/stage_ros/world/willow-erratic.world
ros2 run stage_ros teleop_twist_keyboard.py
相关运行效果汇总如下图:
打开slam_gmapping.launch.py,更新以下的配置, 手动修改launch文件中的scan话题为base_scan, use_sim_time为true,base_frame为base_link,参考如下
def generate_launch_description():
param_substitutions = {
'scan_topic': 'scan',
'base_frame': 'base_link',
'use_sim_time': True
}
修改过程如下,相关截图如下:
cd /opt/ros/foxy/share/slam_gmapping
vim /opt/ros/foxy/share/slam_gmapping/launch/slam_gmapping.launch.py
source /opt/ros/foxy/setup.bash
ros2 launch slam_gmapping slam_gmapping.launch.py
启动命令如上,启动后终端效果如下:
观察日志,是否时刻更新,如果没有请查看相关topic信息
启动命令是
rviz2
启动后中,要修改fixed frame为base_link,以及添加话题topic为/map
如果没有显示期望的地图,请注意检查相关的topic(base_scan,tf等)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。