• Ubuntu20.04同时安装ROS1和ROS2


    Ubuntu20.04同时安装ROS1和ROS2

    Excerpt

    每版的Ubuntu系统版本都有与之对应ROS版本的,每一版ROS都有其对应版本的Ubuntu版本,不可随便装,ubuntu20.04对应ROS1 noetic和ROS2 foxy版本。_ros1和ros2共存


    Ubuntu20.04同时安装ROS1和ROS2共存

    文章目录


    每版的Ubuntu系统版本都有与之对应ROS版本的,每一版ROS都有其对应版本的Ubuntu版本,不可随便装,ubuntu20.04对应ROS1 noetic和ROS2 foxy ROS2 Galactic版本。当然最方便的是使用鱼香ROS一键安装:

    wget http://fishros.com/install -O fishros && . fishros
    
    • 1

    但我们接下来使用手动安装。

    一、换源

    老规矩,先换源

    1.1 通过软件更新

    打开软件更新

    在这里插入图片描述

    选择Download from->Other,找到China,选择源。关闭界面等待自动更新源

    1.2 通过修改源文件(建议)

    (1)备份源文件:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

    (2)打开文件:

    sudo gedit /etc/apt/sources.list

    (3)换源:推荐清华、阿里云、华为云的源:清华源地址,选择Ubuntu版本(查看ubuntu版本命令:cat /etc/issue)并复制源内容,覆盖sources.list文件原来的内容:

    在这里插入图片描述

    (4)换过源之后要更新:

    sudo apt-get update

    二、安装ROS1(noetic)

    (1)添加ROS软件源

    sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
    
    • 1

    (2)添加密钥

    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
    
    • 1

    (3)更新软件源

    sudo apt update
    
    • 1

    以上有问题换用:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
    
    • 1

    (4)安装ROS noetic

    sudo apt install ros-noetic-desktop-full
    
    • 1

    (5)初始化rosdep

    sudo rosdep init
    
    • 1
    • 如果找不到命令:
    sudo apt install python-rosdep2
    # 或者
    sudo apt install python3-rosdep2
    
    • 1
    • 2
    • 3
    • ERROR: cannot download default sources list from:https : //raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down.
    sudo gedit /etc/hosts
    
    • 1

    打开的hosts文件中添加如下的内容,然后保存退出

    199.232.28.133 raw.githubusercontent.com

    如果出现ERROR: cannot download default sources list from:
    https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
    Website may be down.

    访问 https://www.ipaddress.com/ 查询 raw.githubusercontent.com 的ip地址

    在这里插入图片描述

    • sudo gedit /etc/hosts
      #####################
      127.0.0.1localhost
      127.0.1.1iron-virtual-machine
      ###增加下面的解析
      185.199.108.133  raw.githubusercontent.com
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    sudo apt update
    sudo apt upgrade
    
    • 1
    • 2

    然后

    rosdep update
    
    • 1

    (6)安装rosinstall

    sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool
    
    • 1

    (7)配置环境

    sudo gedit ~/.bashrc
    # 末尾添加
    source /opt/ros/noetic/setup.bash
    # 保存退出
    source ~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5

    (8)验证

    roscore
    
    • 1
    • Command ‘roscore’ not found, but can be installed with:sudo apt install python3-roslaunch,按照提示安装:
    sudo apt install python3-roslaunch
    
    • 1
    • Resorce not found: roslaunch说明之前的安装没有安装全,继续安装
    sudo apt install ros-noetic-desktop-full
    
    • 1

    (9)小乌龟测试ROS:

    roecore
    rosrun turtlesim turtlesim_node
    rosrun turtlesim turtle_teleop_key
    
    • 1
    • 2
    • 3

    三、安装ROS2(foxy)

    (1)设置编码UTF-8

    终端输入:locale检查是否支持 UTF-8

    在这里插入图片描述

    如果不支持:

    sudo locale-gen en_US en_US.UTF-8
    sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
    export LANG=en_US.UTF-8
    
    • 1
    • 2
    • 3

    (2)检查是否启用ubuntu Universe存储库

    apt-cache policy | grep universe
    ## 输出应如下:
     500 http://security.ubuntu.com/ubuntu focal-security/universe i386 Packages
         release v=20.04,o=Ubuntu,a=focal-security,n=focal,l=Ubuntu,c=universe,b=i386
     500 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages
         release v=20.04,o=Ubuntu,a=focal-security,n=focal,l=Ubuntu,c=universe,b=amd64
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意使用1.2换源已经默认启用,但是界面上并没有勾选,不用管,若没有启用不会有输出,则:

    sudo apt install software-properties-common
    sudo add-apt-repository universe
    
    • 1
    • 2

    (3)设置密钥

    sudo apt update && sudo apt install curl gnupg2 lsb-release
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    
    • 1
    • 2
    • 3
    • 如果报错ailed to connect to raw.githubusercontent.com port 443 after 13 ms: 拒绝连接,参考上一节的方法在/etc/hosts文件中添加raw.githubusercontent.com 的IP;
    • 如果没有反应就多等一会

    (4)安装

    sudo apt update
    # 推荐桌面版,注意安装时间较长,耐心等待
    sudo apt install ros-foxy-desktop
    
    • 1
    • 2
    • 3

    (5)配置环境

    echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
    source .bashrc
    
    • 1
    • 2

    (6)官方demo测试

    ros2 run demo_nodes_cpp talker
    ros2 run demo_nodes_cpp listener
    
    • 1
    • 2

    在这里插入图片描述
    (7)小乌龟,不再需要master

    ros2 run turtlesim turtlesim_node
    ros2 run turtlesim turtle_teleop_key
    
    • 1
    • 2

    在这里插入图片描述

    四、安装ROS2(Galactic)

    为了调试Autoware.universe,必须要安装Galactic,如果需要首先卸载foxy

    sudo apt remove ros-foxy-* && sudo apt autoremove
    
    • 1

    (1)测试语言环境,上一章已经处理;
    (2)检查是否启用ubuntu Universe存储库,上一章已经处理;
    (3)添加 ROS 2 apt 存储库

    sudo apt update && sudo apt install curl
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    
    • 1
    • 2
    • 3

    (4)安装

    sudo apt update
    sudo apt install ros-galactic-desktop
    sudo apt install ros-galactic-ros-base
    sudo apt install ros-dev-tools
    
    • 1
    • 2
    • 3
    • 4

    (5)配置环境

    echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
    source .bashrc
    
    • 1
    • 2

    (6)小乌龟验证

    ros2 run turtlesim turtlesim_node
    ros2 run turtlesim turtle_teleop_key
    
    • 1
    • 2

    五、ROS1和ROS2混合配置环境

    考Ubuntu20.04 ROS1和ROS2同时安装及使用
    如果只安装一个版本的ROS,这一节不需要再进行,否则需要ROS1和ROS2混合配置

    sudo gedit ~/.bashrc
    
    • 1

    打开.bashrc文件,删除前面两节的配置内容:

    source /opt/ros/noetic/setup.bash
    source /opt/ros/foxy/setup.bash
    source /opt/ros/galactic/setup.bash
    
    • 1
    • 2
    • 3

    后在末尾加上如下代码,完成环境变量设置,在使用过程中可以根据需要切换ros版本,记得每次打开一个新的终端都需要通过按键“1”或“2”来选择ros版本(galactic同理)

    在这里插入图片描述

    echo "ros noetic(1) or ros2 foxy(2)?"
    read edition
    if [ "$edition" -eq "1" ];then
      source /opt/ros/noetic/setup.bash
    else
      source /opt/ros/foxy/setup.bash
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    六、ROS常用命令以及区别

    6.1 常用命令

    (1)编译

    # ROS1
    catkin_make
    catkin_make -DCATKIN_WHITELIST_PACKAGES=""
    # ROS2
    colcon build
    # 只编译指定包
    colcon build --packages-select  PACKAGE_NAME
    # 忽略指定包
    colcon build --packages-ignore PACKAGE_NAME
    # 遇到编译错误继续编译其他模块
    colcon build --continue-on-error
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    (2)工作空间配置bashrc

    source ~/catkin_ws/devel/setup.bash
    source ~/colcon_ws/install/setup.bash
    
    • 1
    • 2

    (3)terminal 命令

    rosrun --> ros2 run
    rosnode --> ros2 node
    roslaunch --> ros2 launch
    rosparam --> ros2 param
    rospkg --> ros2 pkg
    rosservice --> ros2 service 
    rossrv --> ros2 srv
    rostopic --> ros2 topic
    rosaction --> ros2 action
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    6.2 其他命令(我的笔记)

    (1)通过 topic_tools/throttle 改变话题的发布频率、发布带宽

    # 参数解释:intopic: 订阅的输入话题、msgs_per_sec: 每秒允许通过的最大messages数、outtopic: 发布的输出话题 (default: intopic_throttle) 
    throttle messages   [outtopic]
    # 举例,将原来200Hz的IMU数据降低至100
    rosrun topic_tools throttle messages /imu_raw 100 /imu_raw_low_freq
    
    • 1
    • 2
    • 3
    • 4

    roslaunch写法:

        
    
    • 1

    (2)bag的录制和播放

    # 1 录制指定话题数据并保存,-O需要大写
    rosbag record -O     ...
    # 2 查看数据包中包含的话题名称,话题数量,话题消息类型等信息
    rosbag info 
    # 3 bag播放
    rosbag play   # 回放指定bag
    rosbag play * # 回放当前目录下所有bag
    rosbag play -s n  # 从指定时间(n = 指定时间s)开始回放bag
    rosbag play -s n -u m  # 从指定时间(n = 开始时间s)开始播放指定时间(m = 指定播放时间s)的bag
    rosbag play -r n  # 按指定倍率(n = 倍率)回放bag
    rosbag play := # 某个话题重命名播放
    # 4 回放不成功,提示 reindex ,则:
    rosbag reindex  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    (3)rostopic echo --noarr查看激光雷达数据详细信息(如frame_id)
    用rostopic echo /激光雷达话题名查看激光雷达返回的数据,除了数字什么也显示不出来。想要查看激光雷达数据的frame_id等信息,加上–noarr参数即可,排除话题数据中的数组信息。

    rostopic echo --noarr /velodyne_points
    
    • 1

    (4)通过rqt_bag命令将bag进行可视化

    rqt_bag 
    
    • 1
  • 相关阅读:
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java高校教师科研能力评定系统40n60
    【面试宝藏】Redis 常见面试题解析
    Java 序列化和反序列化为什么要实现 Serializable 接口?
    Nodejs -- Express的安装和定义get、post方法
    Java 包装类
    下载centOS,下载各种linux版本的镜像,来这里!
    快速学会HCIA基础
    el-table解决数据过少小于高度有留白的问题
    C++11之用户自定义字面量(ClassType operator““_C(param...))
    Spring之CGLIB和JDK动态代理底层实现
  • 原文地址:https://blog.csdn.net/feichangyanse/article/details/132687042