ROS开发环境的建立
- 一、前言
- 二、操作系统环境
-
- 三、ROS运行环境
- 1. ROS
- 2. ROS周边设置
- 3. ROS开发包及帮助获取方式
- 四、ROS开发环境
- 1. 建立工作空间——workspace
- 2. Original开发环境
- a. 建立基本开发单元——package
- b. C/C++开发流程【HelloWorld】
-
- c. Python开发流程【HelloWorld】
-
- 3. IDE开发环境【非必须】
- a. VSCode及其插件
- 安装VSCode
- 安装插件
- 设置开发环境
- 建立基本开发单元——package
- C/C++开发流程【HelloWorld】
- Python开发流程【HelloWorld】
- b. Roboware Studio(已停止更新)
- 五、ROS学习资料
- 六、后语【应该没有彩蛋】
-
一、前言
写在最前面,虽然前前后后也折腾了好几回,检查了好几回,肯定不免疏忽会有弄错的地方,如果有请及时留言指出,博主虽然更新比较慢,但是稍微还是会看一下,这样也可以给后面看的人有个勘误意见供参考。
【正式开始】
其实建立开发环境挺麻烦的,但还好有各种各样的包和大量的资料作为支持,在这里总结一下如何建立一个看起来顺眼,用起来稍微有点顺手的开发环境。
按照本文描述步骤一一完成后即可获得可以正常开发软件的极简环境了。
特此说明:本文仅提供最基础的开发方式,开发环境中所有术语及结构说明解释不是本文应阐述的内容范围,如有不理解的地方请尽量搜索或者查找相关学习资料完善学习。
为之后尽量减少给读者造成理解上的偏差,这里将文章撰写时间写明:【文章成于二〇二〇年初冬】,请以此时间作为阅读本文的参考时间。
二、操作系统环境
本节仅讲述Linux开源环境Ubuntu下的环境设置。
1. Ubuntu
下表为最近的三个版本Ubuntu的简介及下载链接,博主建议选取最新的LTS版本,这样在系统维护服务会有保障。
系统版本 | 系统名称 | 发布时间 | 终止维护时间 | 推荐系统配置 |
---|
16.04.7(LTS) | Xenial Xerus | — | — | — |
18.04.5(LTS) | Bionic Beaver | — | — | — |
20.04.1(LTS) | Focal Fossa | — | April 2025 | CPU:2 GHz(双核);内存:4 GB;硬盘:25 GB |
注:上表中标明“—”的代表:“官网未标明,请自行搜索信息”
对于上表中博主仅完成了最新的环境建立,其余环境并并未完成建立,最后未使用上述两个环境并非是环境不好而是遇到了短时间难以解决的问题,问题叙述如下:
- 在尝试建立前两个环境时,ros建立过程中sudo rosdep init出现无法下载的错误,按网络资料(解决方案1,解决方案2,解决方案3,解决方案4)尝试多次后均未能解决,大约需要访问部分显示404网络链接才能正常使用,总的来说解决方法过于复杂,故并未能成功建立这两个环境,如确有需要的读者可试着尝试。
2. VMWare【可选】
官方免费版下载地址或自行搜索免费版,关键字:VMware Workstation Player,或从这里下载。
Ubuntu虚拟机硬件配置
- 推荐配置:可按Ubuntu对应版本中提供的官方推荐设置完成设置。
- 简易要求:最低配置即满足小型开发和学习的需要,要求如下:
开发环境选取 | 最低配置 |
---|
Original开发环境 | 单核≥2GHz、内存≥2GB、硬盘空间≥20GB |
IDE开发环境 | 双核≥2GHz,内存≥3GB,硬盘空间≥25GB |
- 其它要求:如有其它要求可自行尝试设置或自行搜索相关信息。
三、ROS运行环境
1. ROS
可点击获取官方下载安装教程,或在下表点击版本名称进入安装教程。
版本 | 简称 | 发布日期 | 终止维护日期 | Ubuntu版本 |
---|
ROS Kinetic Kame | kinetic | May, 2016 | April, 2021 | 16.04 |
ROS Melodic Morenia | melodic | May, 2018 | May, 2023 | 18.04 |
ROS Noetic Ninjemys | noetic | May, 2020 | May, 2025 | 20.04 |
博主个人建议选用最新版(原因还是有维护(LTS)),当然各位读者可根据自身情况选用合适版本安装。
下面仅列举noetic的安装步骤Terminal指令,如有异议可参照上方给出的官方安装教程链接。
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install ros-noetic-desktop-full
source /opt/ros/noetic/setup.bash
2. ROS周边设置
安装ros的辅助包,见以下Terminal指令。
sudo apt-get install ros-$ROS_DISTRO-teleop-twist-keyboard ros-$ROS_DISTRO-amcl ros-$ROS_DISTRO-move-base ros-$ROS_DISTRO-slam-gmapping ros-$ROS_DISTRO-slam-karto ros-$ROS_DISTRO-map-server ros-$ROS_DISTRO-dwa-local-planner ros-$ROS_DISTRO-teb-local-planner
sudo apt-get install vim
sudo apt-get install default-jdk
sudo apt-get install python
sudo apt-get install python3-pip
sudo apt-get install llvm
sudo apt-get install clang
sudo apt-get install clang-format
sudo apt-get install python3-argcomplete
activate-global-python-argcomplete3 --user
pip3 install update pip
pip3 install pylint
注:argcomplete其它设置,仅供参考。
3. ROS开发包及帮助获取方式
ROS包搜索获取及安装Terminal指令
apt search ros-noetic
sudo apt-get install ros-noetic-PACKAGE
如果要找支持包,可以去ROS包官网索引及git链接中查找。
ROS官网上有很多资源(包括学习资源),诸位可根据需要查看。
四、ROS开发环境
1. 建立工作空间——workspace
假设要建立的工作空间的名称为myworkspace,建立在用户路径下,建立的Terminal命令为
mkdir -p ~/myworkspace/src
cd ~/myworkspace/src &&catkin_init_workspace
cd ~/myworkspace/ &&catkin_make
echo source ~/myworkspace/devel/setup.bash >> ~/.bashrc
source ~/.bashrc
echo $ROS_PACKAGE_PATH
这样就建立好了一个工作空间,程序的开发就可以在myworkspace工作空间中进行。
有新建工作空间自动化工具可以方便的建立workspace(自动化工具不能检测输入是否合法,请大家尽量小心的输入正确地址和workspace的名称)。
另,乱码问题(仅作为一个参考性的资料):
此外,对于文件中文显示乱码问题可以参见该篇文章,查看系统支持字符集及设置字符集简要步骤可参见以下代码:
cat /usr/share/i18n/SUPPORTED
sudo vi /var/lib/locales/supported.d/zh
sudo locale-gen
但是博主尝试后发现,以上解决乱码的方法并对部分乱码问题几乎无用,如果有碰见该问题,可以尝试使用此方法。
2. Original开发环境
a. 建立基本开发单元——package
假设要建立的package的名称为helloworld,建立在myworkspace工作空间中,依赖包包括std_msgs、rospy、 roscpp。
cd ~/myworkspace/src
catkin_create_pkg helloworld std_msgs rospy roscpp
cd ~/myworkspace &&catkin_make
这样就建立好了一个基本开发单元,程序的开发就可以在helloworld的package中进行。
为方便建立基本开发单元,有新建package自动化工具可以方便的建立package(自动化工具无法检测地址和输入是否合法,请大家尽量在当前工作空间根目录下运行该文件,一定一定要谨慎输入,保证输入的所有地址和package名称正确)
对于package内,常用的文件夹有include(默认建立)、src(默认建立)、scripts、msg和srv,可按照使用需要自行添加。
b. C/C++开发流程【HelloWorld】
编写
使用语句新建helloworld.cpp文件
cd ~/myworkspace/src/helloworld/src/ &&touch helloworld.cpp
gedit helloworld.cpp
并在文件helloworld.cpp内键入以下代码(建议手动输入,尽量不要复制粘贴):
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char** argv)
{
ros::init(argc, argv, "helloworld");
ros::NodeHandle n;
ros::Publisher helloworld_publisher = n.advertise<std_msgs::String>("/letallknow", 10);
ros::Rate loop_rate(10);
unsigned int count = 0;
std_msgs::String msg;
msg.data = "hello world!";
while(ros::ok())
{
ROS_INFO("%s: %d", msg.data.c_str(), count);
helloworld_publisher.publish(msg);
count++;
loop_rate.sleep()
}
return 0;
}
然后使用语句打开helloworld/CMakeLists.txt文件
cd ~/myworkspace/src/helloworld/
gedit CMakeLists.txt
在helloworld/CMakeLists.txt文件下添加代码
add_excutable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})
即完成了程序的编写。
编译
使用语句
cd ~/myworkspace/
catkin_make
编译整个工作空间。
运行
使用语句roscore
打开roscore,并在另一个Terminal内输入语句
rosrun helloworld helloworld
完成后,程序开始运行。
c. Python开发流程【HelloWorld】
编写
使用语句新建scripts文件夹
mkdir ~/myworkspace/src/helloworld/scripts
新建helloworld.cpp文件
cd ~/myworkspace/src/helloworld/scripts/ &&touch helloworld.py
gedit helloworld.py
在文件helloworld.py内键入以下代码(建议手动输入,尽量不要复制粘贴):
import rospy
from std_msgs.msg import String
def helloworld():
rospy.init_node('helloworld')
helloworld_publisher = rospy.Publisher('/letallknow', String, queue_size=10)
rate = rospy.Rate(10)
mymsg = String("hello world!")
count = 0
while not rospy.is_shutdown():
rospy.loginfo('%s: %d', mymsg.data, count)
helloworld_publisher.publish(mymsg)
rate.sleep()
count += 1
if __name__ == '__main__':
helloworld()
运行
改变文件可执行属性:
或
chmod +x ~/myworkspace/src/helloworld/scripts/helloworld.py
打开新的Terminal,运行roscore
命令,并在另一个Terminal内输入语句
rosrun helloworld helloworld.py
完成后,程序开始运行。
3. IDE开发环境【非必须】
a. VSCode及其插件
安装VSCode
VSCode安装包.deb官方下载地址,如下载速度过慢可从这里下载。
下载完成双击.deb文件后自动安装,即得到VSCode开发环境。
安装插件
本节提供搜索的关键字,在VSCode的插件市场中自行搜索完成安装,VSCode插件安装简易教程,如果仍然有疑问,请自行搜索解决。
- 基本插件
ros
c/c++
python
- 语法检查及代码补全与其它需要插件
ESLint
Pylance
MagicPython
C++ Intellisense
Better C++ Syntax
Code Spell Checker
msg language support
Bracket Pair Colorizer 2
Visual Studio IntelliCode
c/c++ clang command adapter
- 格式插件
Clang-Format
xml tools
ROS snippets
- 注释插件
koroFileHeader
- 语言支持包
Chines(Simplified)Language Pack
可另搜索Language Pack来获取需要的语言包,
其它与显示主题相关的插件不为本文的阐述范围,有兴趣的读者可以自行寻找配置。
设置开发环境
开发环境设置步骤如下,假设已经建立了myworkspace这个工作空间:
如还有对环境设置有疑问,请参见这篇文章或这篇文章,或自行探索。
语言开发环境的插件的使用不属于本节叙述范围,如有特殊需要的读者可自行探索研究。
建立基本开发单元——package
右键点击myworkspace工作空间中的src文件选择Create Catkin Package 或 按下 Ctrl+Shift+P
后输入ROS:Creat Catkin Packge回车选中,然后根据提示依次输入
为了方便起见,将该package的名称定为helloworld,其中依赖包输入格式为每个包以空格隔开,常用包有【std_msgs rospy roscpp】,最后就成功建立了一个package。
对于package内,常用的文件夹有include(默认建立)、src(默认建立)、scripts、msg和srv,可按照使用需要自行添加。
C/C++开发流程【HelloWorld】
- 编写
在helloworld的src文件夹下新建helloworld.cpp文件,文件内键入以下代码(建议手动输入,尽量不要复制粘贴):
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char** argv)
{
ros::init(argc, argv, "helloworld");
ros::NodeHandle n;
ros::Publisher helloworld_publisher = n.advertise<std_msgs::String>("/letallknow", 10);
ros::Rate loop_rate(10);
unsigned int count = 0;
std_msgs::String msg;
msg.data = "hello world!";
while(ros::ok())
{
ROS_INFO("%s: %d", msg.data.c_str(), count);
helloworld_publisher.publish(msg);
count++;
loop_rate.sleep()
}
return 0;
}
在helloworld/CMakeLists.txt文件下添加以下代码
add_excutable(helloworld src/helloworld.cpp)
target_link_libraries(helloworld ${catkin_LIBRARIES})
即完成了程序的编写。
- 编译
按下Ctrl+Shift+B
,等待完成编译。 - 运行
打开新的Terminal,运行roscore
命令
然后回到VSCode空间中,按下Ctrl+Shift+P
,输入ROS:Run a ROS excutable (rosrun),回车后依次填入
完成上述步骤,程序即开始运行。
Python开发流程【HelloWorld】
- 编写
在helloworld下新建scripts文件夹,并在文件夹scripts下新建文件helloworld.py。
打开helloworld.py文件后,在文件内键入以下代码(建议手动输入,尽量不要复制粘贴):
import rospy
from std_msgs.msg import String
def helloworld():
rospy.init_node('helloworld')
helloworld_publisher = rospy.Publisher('/letallknow', String, queue_size=10)
rate = rospy.Rate(10)
mymsg = String("hello world!")
count = 0
while not rospy.is_shutdown():
rospy.loginfo('%s: %d', mymsg.data, count)
helloworld_publisher.publish(mymsg)
rate.sleep()
count += 1
if __name__ == '__main__':
helloworld()
或
chmod +x ~/myworkspace/src/helloworld/scripts/helloworld.py
打开新的Terminal,运行roscore
命令
然后回到VSCode空间中,按下Ctrl+Shift+P
,输入ROS:Run a ROS excutable (rosrun),回车后依次填入
完成上述步骤,程序即开始运行。
b. Roboware Studio(已停止更新)
由于已经停止更新,且最新版本仅支持Ubuntu-Melodic,所以该项目博主并未尝试,仅提供下载链接及开发资料链接供大家自行尝试安装包下载链接,开源源代码链接。
五、ROS学习资料
- ROS官网链接(资料最全)
- 古月ROS入门21讲(用时较短,上手快): bilibili链接、古月居链接
- 机器人操作系统入门(用时较长,内容多): 中国大学MOOC、中国大学MOOC
六、后语【应该没有彩蛋】
嗯。如果按照上面一步一步来还没有完成环境建立,请给博主留言问题后,并自行出门左转度娘谷哥,自行搜索查找解决建立环境问题。(博主【正常应该大概可能也许一定一时半会】不会帮你想如何解决的,但是你可以帮助到后面看的人)。
就到这里了~ 如果有帮助的话,欢迎点赞、收藏、转载本文链接,但千万别留言,留言板留给存在问题或想给出建议或指出错误的小盆友们~~
如果不喜欢本文请自行Alt+F4,嗯。。。That’s it!
彩蛋?
2020年11月23日:
- 为兼容python2,三、2.节增加
sudo apt-get install python
。 - 三、2.节原指令
sudo apt-get install python3-pipx
有误,修订为sudo apt-get install python3-pip
。 - pip指令会出现不存在的情况,修订
pip install update pip
和pip install pylint
为pip3 install update pip
和pip3 install pylint
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)