Ubuntu20.04同時安裝ROS1和ROS2共存
每版的Ubuntu系統(tǒng)版本都有與之對應(yīng)ROS版本的,每一版ROS都有其對應(yīng)版本的Ubuntu版本,不可隨便裝,ubuntu20.04對應(yīng)ROS1 noetic和ROS2 foxy ROS2 Galactic版本。當(dāng)然最方便的是使用魚香ROS一鍵安裝:
wget http://fishros.com/install -O fishros && . fishros
但我們接下來使用手動安裝。
一、換源
老規(guī)矩,先換源
1.1 通過軟件更新
打開軟件更新
選擇Download from->Other,找到China,選擇源。關(guān)閉界面等待自動更新源
1.2 通過修改源文件(建議)
(1)備份源文件:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
(2)打開文件:
sudo gedit /etc/apt/sources.list
(3)換源:推薦清華或者阿里云的源(根據(jù)自己的網(wǎng)去嘗試,選擇最快的一個):清華源地址,選擇Ubuntu版本(查看ubuntu版本命令:cat /etc/issue
)并復(fù)制源內(nèi)容,覆蓋sources.list
文件原來的內(nèi)容:
(4)換過源之后要更新:
sudo apt-get update
二、安裝ROS1(noetic)
參考 詳細(xì)介紹如何在ubuntu20.04中安裝ROS系統(tǒng),超快完成安裝(最新版教程) 講解的非常詳細(xì),安裝過程中很多錯誤都給出了解決方法,這里寫出大致流程
(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'
(2)添加密鑰
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
(3)更新軟件源
sudo apt update
以上有問題換用:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
(4)安裝ROS noetic
sudo apt install ros-noetic-desktop-full
(5)初始化rosdep
sudo rosdep init
- 如果找不到命令:
sudo apt install python-rosdep2
# 或者
sudo apt install python3-rosdep2
ERROR: cannot download default sources list from:https : //raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down.
國外的網(wǎng)站無法鏈接,有以下三種辦法(推薦第三種,我新發(fā)現(xiàn)的方法):
- 有條件就科學(xué)上網(wǎng)
- 修改hosts
sudo gedit /etc/hosts
打開的hosts文件中添加如下的內(nèi)容,然后保存退出
199.232.28.133 raw.githubusercontent.com
如果依然出現(xiàn)ERROR: cannot download default sources list from
,訪問 https://www.ipaddress.com/ 查詢 raw.githubusercontent.com 的ip地址
將199.232.28.133 raw.githubusercontent.com換為:
185.199.108.133 raw.githubusercontent.com
ERROR: default sources list file already exists: /etc/ros /rosdep/sources.list.d/20-default.listPlease delete if you wish to re-initialize
sudo rm /etc/ros/rosdep/sources.list.d/20-default.list
然后
rosdep update
- 采用鏡像文件,參考:https://mirrors.tuna.tsinghua.edu.cn/help/rosdistro/
手動模擬 rosdep init
sudo mkdir -p /etc/ros/rosdep/sources.list.d/
sudo curl -o /etc/ros/rosdep/sources.list.d/20-default.list https://mirrors.tuna.tsinghua.edu.cn/github-raw/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
為 rosdep update 換源
export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml
# 后面的參數(shù)是為了不跳過ROS版本
rosdep update --include-eol-distros
每次 rosdep update 之前,均需要增加該環(huán)境變量為了持久化該設(shè)定,可以將其寫入 .bashrc 中:
echo 'export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml' >> ~/.bashrc
(6)安裝rosinstall
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool
(7)配置環(huán)境
sudo gedit ~/.bashrc
# 末尾添加
source /opt/ros/noetic/setup.bash
# 保存退出
source ~/.bashrc
(8)驗(yàn)證
roscore
-
Command ‘roscore’ not found, but can be installed with:sudo apt install python3-roslaunch
,按照提示安裝:
sudo apt install python3-roslaunch
-
Resorce not found: roslaunch
說明之前的安裝沒有安裝全,繼續(xù)安裝
sudo apt install ros-noetic-desktop-full
(9)小烏龜測試ROS:
roecore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
三、安裝ROS2(foxy)
參考ubuntu20.04安裝ros2,并與ros1共存
(1)設(shè)置編碼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
(2)檢查是否啟用ubuntu Universe存儲庫
apt-cache policy | grep universe
## 輸出應(yīng)如下:
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換源已經(jīng)默認(rèn)啟用,但是界面上并沒有勾選,不用管,若沒有啟用不會有輸出,則:
sudo apt install software-properties-common
sudo add-apt-repository universe
(3)設(shè)置密鑰
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
- 如果報錯
ailed to connect to raw.githubusercontent.com port 443 after 13 ms: 拒絕連接
,參考上一節(jié)的方法在/etc/hosts
文件中添加raw.githubusercontent.com 的IP; - 如果沒有反應(yīng)就多等一會
(4)安裝
sudo apt update
# 推薦桌面版,注意安裝時間較長,耐心等待
sudo apt install ros-foxy-desktop
(5)配置環(huán)境
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source .bashrc
(6)官方demo測試
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_cpp listener
(7)小烏龜,不再需要master
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
四、安裝ROS2(Galactic)
為了調(diào)試Autoware.universe,必須要安裝Galactic,如果需要首先卸載foxy
sudo apt remove ros-foxy-* && sudo apt autoremove
(1)測試語言環(huán)境,上一章已經(jīng)處理;
(2)檢查是否啟用ubuntu Universe存儲庫,上一章已經(jīng)處理;
(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
(4)安裝
sudo apt update
sudo apt install ros-galactic-desktop
sudo apt install ros-galactic-ros-base
sudo apt install ros-dev-tools
(5)配置環(huán)境
echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
source .bashrc
(6)小烏龜驗(yàn)證
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
五、ROS1和ROS2混合配置環(huán)境
參考Ubuntu20.04 ROS1和ROS2同時安裝及使用
如果只安裝一個版本的ROS,這一節(jié)不需要再進(jìn)行,否則需要ROS1和ROS2混合配置
sudo gedit ~/.bashrc
打開.bashrc文件,刪除前面兩節(jié)的配置內(nèi)容:
source /opt/ros/noetic/setup.bash
source /opt/ros/foxy/setup.bash
source /opt/ros/galactic/setup.bash
后在末尾加上如下代碼,完成環(huán)境變量設(shè)置,在使用過程中可以根據(jù)需要切換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
六、ROS常用命令以及區(qū)別
6.1 常用命令
(1)編譯
# ROS1
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]...
# catkin_create_pkg test_pkg std_msgs rospy roscpp
catkin_make
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
# ROS2
colcon build
# 只編譯指定包
colcon build --packages-select PACKAGE_NAME
# 忽略指定包
colcon build --packages-ignore PACKAGE_NAME
# 遇到編譯錯誤繼續(xù)編譯其他模塊
colcon build --continue-on-error
(2)工作空間配置bashrc
source ~/catkin_ws/devel/setup.bash
source ~/colcon_ws/install/setup.bash
(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
6.2 其他命令(我的筆記)
(1)通過 topic_tools/throttle 改變話題的發(fā)布頻率、發(fā)布帶寬
# 參數(shù)解釋:intopic: 訂閱的輸入話題、msgs_per_sec: 每秒允許通過的最大messages數(shù)、outtopic: 發(fā)布的輸出話題 (default: intopic_throttle)
throttle messages <intopic> <msgs_per_sec> [outtopic]
# 舉例,將原來200Hz的IMU數(shù)據(jù)降低至100
rosrun topic_tools throttle messages /imu_raw 100 /imu_raw_low_freq
roslaunch寫法:
<node pkg="topic_tools" type="throttle" name="camera_throttle" args="messages /imu_raw 100 /imu_raw_low_freq" output="screen" respawn="true"/>
(2)bag的錄制和播放
# 1 錄制指定話題數(shù)據(jù)并保存,-O需要大寫
rosbag record -O <bagname> <topic_name1> <topic_name2> <topic_name3> ...
# 2 查看數(shù)據(jù)包中包含的話題名稱,話題數(shù)量,話題消息類型等信息
rosbag info <bagname>
# 3 bag播放
rosbag play <bagname> # 回放指定bag
rosbag play * # 回放當(dāng)前目錄下所有bag
rosbag play -s n <bagname> # 從指定時間(n = 指定時間s)開始回放bag
rosbag play -s n -u m <bagname> # 從指定時間(n = 開始時間s)開始播放指定時間(m = 指定播放時間s)的bag
rosbag play -r n <bagname> # 按指定倍率(n = 倍率)回放bag
rosbag play <topic_name1>:=<topic_name2> # 某個話題重命名播放
# 4 回放不成功,提示 reindex ,則:
rosbag reindex <bagname>
(3)rostopic echo --noarr查看激光雷達(dá)數(shù)據(jù)詳細(xì)信息(如frame_id)
用rostopic echo /激光雷達(dá)話題名查看激光雷達(dá)返回的數(shù)據(jù),除了數(shù)字什么也顯示不出來。想要查看激光雷達(dá)數(shù)據(jù)的frame_id等信息,加上–noarr參數(shù)即可,排除話題數(shù)據(jù)中的數(shù)組信息。文章來源:http://www.zghlxwxcb.cn/news/detail-709596.html
rostopic echo --noarr /velodyne_points
(4)通過rqt_bag命令將bag進(jìn)行可視化文章來源地址http://www.zghlxwxcb.cn/news/detail-709596.html
rqt_bag <bagname>
到了這里,關(guān)于Ubuntu20.04同時安裝ROS1和ROS2共存的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!