ubuntu版本
Ubuntu 16 xenial
Ubuntu 18 bionic
Ubuntu 20.04 LTS Focal 2020-04-23
Ubuntu 22.04 LTS Jammy 2022-04-22
Ubuntu 22.10 Kinetic 2022-10-21
Ubuntu 23.04 Lunar 2023-04-20
Ubuntu 24.04 LTS Noble 2024-04-25
ROS2版本
滚动分布(Rolling Distribution)
ROS 2 Rolling Ridley 是 ROS 2 的滚动开发分布。它首次于2020年6月引入
Rolling Ridley (rolling) Ubuntu 24.04 (Noble): amd64 and arm64
发行版(Release)
Humble Hawksbill May 23, 2022 May 2027 2022年5月23日发布,预计支持到2027年5月。 Ubuntu 22.04 (Jammy):
Jazzy Jalisco May 23, 2024 May 2029 Jazzy Jalisco:2024年5月23日发布,预计支持到2029年5
Kilted Kaiju,预计于2025年5月发布,支持到2026年11月
https://docs.ros.org/en/rolling/Releases.html
对应关系
Ubuntu ROS 1.0 ROS 2.0
16.04 LTS Kinetic LTS Ardent
18.04 LTS Melodic LTS Dashing LTS
20.04 LTS Noetic LTS Foxy LTS
22.04 LTS Noetic Ninjemys Humble Hawksbill
ROS2容器
docker pull osrf/ros:humble-desktop-full-jammy
在运行容器时加上–privileged 参数,它会赋予容器几乎与宿主机相同的权限:
1. ubuntu 设置时区 区域设置(locale)
timedatectl set-timezone Asia/Shanghai
不支持systemd的发行版。 在容器中运行systemctl:如Docker容器-有些容器不支持systemd
确认系统是否使用systemd ps -p 1 -o comm= systemctl命令依赖于systemd
zh_CN.utf8
apt-get install language-pack-zh-hans
2.设置语言
C.UTF-8
C.utf8 =POSIX标准兼容的默认语言环境。只有严格的ASCII字符才是有效的,扩展后允许基本使用UTF-8
en_US.utf8 =美式英语UTF-8语言环境。
3.初始化系统
主流的 systemd 初始化系统,
Docker容器默认使用init系统(PID1)来启动容器,而不是systemd
运行容器时,可以通过-e参数设置环境变量TZ -e TZ=Asia/Shanghai
4.docker run -it --name test \
--add-host example.com:10.10.10.10 \
--privileged \
-e TZ=Asia/Shanghai \
-v /data/test:/data/docker/ \
mydocker:latest
5.
功能 systemctl命令 等效service命令 特殊技巧
启动服务 systemctl start nginx service nginx start
开机自启 systemctl enable nginx chkconfig nginx on 查看依赖项:list-dependencies4
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Dockerfile
#在Dockerfile文件中添加类似以下语句来设置容器的时区:
RUN echo 'Asia/Shanghai' > /etc/timezone && \
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo "Asia/Shanghai" > /etc/timezone && \
apt-get update && \
apt-get install -q -y --no-install-recommends tzdata && \\
rm -rf /var/lib/apt/lists/*
ROS2 命令行
ros2 工具是用户管理、自省和与 ROS 系统交互的方式
环境变量
printenv | grep -i ROS
ROS_LOCALHOST_ONLY 环境变量允许您将 ROS 2 通信限制为仅本地主机: export ROS_LOCALHOST_ONLY=1
ROS_DOMAIN_ID 变量 export ROS_DOMAIN_ID=<your_domain_id>
ros2 run <package_name> <executable_name>
package_name
eg: ros2 run turtlesim turtlesim_node
包名称为 turtlesim,可执行文件名称为 turtlesim_node
ROS2 内部
ROS 2 中,单个可执行文件(C++ 程序、Python 程序等)可以包含一个或多个节点。node
interface
.msg / .srv / .action 文件
param
ros2 interface list
Goal Result Feedback 目标、结果和 反馈。
ROS2开发
colcon 工具 sudo apt install python3-colcon-common-extensions
ROS工作空间是具有特定结构的目录。工作空间中通常有一个src子目录。在该子目录中是ROS软件包源代码所在的位置
开发阶段 :colcon build --symlink-install 更加高效,因为它让你可以快速测试代码的修改。 symlink-install :使用符号链接而不是复制文件
生产或发布阶段:colcon build 更适合确保项目的稳定性。 构建的文件复制到安装目录中,确保安装后的文件是稳定的
*注:与catkin相比,用colcon构建不生成devel目录。
可以用ros2 pkg create工具来创建基于模板的新软件包。
*注:对于catkin用户来说,该工具相当于 catkin_create_package。
编译工具
colcon 是一个模块化的工具链,所有命令行参数都由相应的安装包提供
一般使用时只需安装 sudo apt install python3-colcon-common-extensions 即可,一些必要的包会作为依赖自动安装,
比如 python3-colcon-core 、python3-colcon-defaults 等。
colcon通过解析软件包中的 package.xml 文件来确定构建顺序和依赖项,
然后调用相应的构建系统(如 ament_cmake )来完成构建任务
ament_cmake 和 ament_python 是ament生态系统中的两个重要组件,
分别用于C/C++和Python软件包的构建
C++
my_package/
package.xml
CMakeLists.txt
include/my_package/
src/
python
my_package/
package.xml
setup.py
setup.cfg ## setup.cfg 是 setuptools 官方推荐的配置文件,它是一个 ini 文件,用于配置 setuptools 的行为。
resource/my_package
my_package/
底层:标准的构建工具,比如CMake、Python setuptools
基于标准版本
ros2 pkg create --build-type ament_cmake --node-name my_cpp_node my_cpp_package
ros2 pkg create --build-type ament_python --license Apache-2.0 --node-name my_py_node my_py_package
创建自定义的 msg 和 srv 文件
##ros2 pkg create --build-type ament_cmake custome_msgs
git clone ***custome_msgs
cd custome_msgs
colcon build --packages-select custome_msgs
source install/setup.bash
ros2 interface show custome_msgs/msg/GradeState
ros2 interface show custome_msgs/msg/GradeStateArray
代码示例
##数据存放位置 install/local/lib/python3.10/dist-packages/commom_msgs/msg
from rclpy.serialization import deserialize_message
from rosidl_runtime_py.utilities import get_message
import rosbag2_py
from custome_msgs.msg import GradeStateArray
####已有的数据类型
topic_types = reader.get_all_topics_and_types()
type_map = {topic.name: topic.type for topic in topic_types}
# 获取消息类型
msg_type = type_map[ self._img_topic_name]
msg_class = get_message(msg_type)
image_msg = deserialize_message(data, msg_class)
####自定义的数据类型
msg_class =GradeStateArray
image_msg = deserialize_message(data, msg_class)
https://github.com/Jieshoudaxue/ros2_code/blob/main/bag_operator/scripts/bag_echo.py
colcon
开发阶段 :colcon build --symlink-install 更加高效,因为它让你可以快速测试代码的修改。 symlink-install :使用符号链接而不是复制文件
生产或发布阶段 :colcon build 更适合确保项目的稳定性。 构建的文件复制到安装目录中,确保安装后的文件是稳定的
只编译一个包 colcon build --packages-select YOUR_PKG_NAME
编译一个单独的包和其依赖编译 colcon build --packages-up-to <name-of-pkg>
参考
ros2 bag 自定义消息(msg)读取 https://blog.csdn.net/scjdas/article/details/129426695
Reading and writing ROS 2 https://mcap.dev/guides/python/ros2
https://github.com/Jieshoudaxue/ros2_code/blob/main/bag_operator/scripts/bag_echo.py