ROS2_开发-基本内容_以及解析包

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	 
posted @ 2025-06-17 18:08  辰令  阅读(87)  评论(0)    收藏  举报