学习背景
今日在学长学习任务安排下,初识ROS操作系统,为以后项目打下基础,接下来我会复盘一下今天遇到的问题和bug
Step by step
推荐一个学习ROS操作系统的资料
http://www.autolabor.com.cn/book/ROSTutorials/chapter1.html
里面讲的步骤还是比较详细的,可以跟着一步一步来上手
第一步 安装虚拟机
首先需要下载安装虚拟机,可以选择VirtualBox或者VMWare,我选择了VirtualBox,之后安装ubuntu系统,由于我之前就安装好了,这边就不展示详细的过程了,网上也有很多详细的教程
第二步 安装ROS
这一步我昨天非常久,想起来真是悔恨啊,大把大把的时间就被浪费了,智商不够只能多花些时间了。
- 配置ubuntu的软件和更新
打开ubuntu中软件和更新对话框,勾选图中四个选项
接下来很重要的一步,也是接下来意义非凡的一步,需要更换下载源,不知道为啥我设置一开始为美国,怪不得后面下载速度慢的出奇,一个250MB左右的文件跟我说要下载十几个小时,下载速度在几十KB左右,所以最好更换下载源,你点击其他,系统会根据你的位置自动推荐下载源,一般都会选到中科大的下载源
- 设置安装源
这里也是小技巧比较多,一般推荐使用国内资源,下载速度会快很多
打开终端
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
- 设置key
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 安装
sudo apt update
sudo apt install ros-noetic-desktop-full
这一步可能需要等待一段时间,现在你可以摸会鱼休闲一下,哈哈哈,有可能会因为网络问题安装失败,重复几遍更新和安装指令即可
- 配置环境变量
echo "source /opt/ros/下载版本/setup.bash" >> ~/.bashrc
source ~/.bashrc
这里下载版本需要非常注意,昨天在这里也卡了很久,我下载的是kinetic版本,但是教程里面是melodic版本,原来是这里出错了,我检查了很久才检查出来,希望对大家有点参考价值,如果你之前不小心已经运行过了错误的echo指令,没有关系,依旧可以修改
gedit ~/.bashrc
定位到最后几行,删去错误的指令,类似于source /opt/ros/melodic/setup.bash ,有多少删多少,最后重新执行一边,成功
- 安装构建依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
初始化rosdep
sudo rosdep init
rosdep update
初始化这一步往往都会出错,莫慌,大概率是因为境外的资源被屏蔽,所以接下来的操作可能会稍微繁琐些,但只要跟着一步一步肯定也没问题
进入终端
cd /usr/lib/python3/dist-packages/
find . -type f | xargs grep "raw.githubusercontent"
接下来修改相关文件,分别对应相应的文件,并做修改
相关文件主要为
./rosdistro/__init__.py
./rosdep2/gbpdistro_support.py
./rosdep2/sources_list.py
./rosdep2/rep3.py
将这些文件里的url内容,大致长这样aw.githubusercontent.com/ros/rosdistro/master
将它修改为gitee.com/zhao-xuzuo/rosdistro/raw/master
一般一个文件里就一处
全部修改完毕后,再次执行指令
sudo rosdep init
rosdep update
完美实现
第三步 测试ROS
接下来看看ROS环境是否可以正常运行
- 启动三个命令行
- 命令行1键入
roscore
- 命令行2键入
rosrun turtlesim turtlesim_node
此时应该出现了图形化界面,并且有一只动弹不得的小乌龟
- 命令行3键入
rosrun turtlesim turtle_teleop_key
此时就可以通过上下左右控制2中乌龟的运动
第四步 实现HelloWorld
- 创建工作空间并初始化
mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make
- 进入 src 创建 ros 包并添加依赖
cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
C++版
做完了上面的基本步骤,接下来就是不同编程语言不同的地方
- 进入 ros 包的 src 目录编辑源文件
cd 自定义的包
C++源码
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//执行 ros 节点初始化
ros::init(argc,argv,"hello");
//创建 ros 节点句柄(非必须)
ros::NodeHandle n;
//控制台输出 hello world
ROS_INFO("hello world!");
return 0;
}
- 编辑 ros 包下的 CMakelists.txt文件
cmake_minimum_required(VERSION 3.0.2)
project(rosbag)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
catkin_package()
add_executable(源文件名 源文件名.cpp)
target_link_libraries(源文件名 ${catkin_LIBRARIES})
- 进入工作空间目录并编译
cd 自定义空间名称
catkin_make
- 执行
打开两个命令行
命令行1
roscore
命令行2
cd 工作空间
source ./devel/setup.bash
rosrun ros包名 C++节点
成功输出
python版
- 进入 ros 包添加 scripts 目录并编辑 python 文件
cd ros包
mkdir scripts
进入scripts文件夹 新建python文件
#! /usr/bin/env python
#coding=UTF-8
import rospy
if __name__ == "__main__":
rospy.init_node("Hello")
rospy.loginfo("Hello World!!!!")
#coding=UTF-8 这一句很关键,因为原本应当是ASCII码,需要修改,否则后面编译时出现中文会报错
- 为 python 文件添加可执行权限
chmod +x 自定义文件名.py
- 编辑 ros 包下的 CMakeLisst.txt 文件
定位到大约170行左右
取消原先的注释
catkin_install_python(PROGRAMS
scripts/python源文件名.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
- 进入工作空间目录并编译
cd 自定义空间名称
catkin_make
- 进入工作空间目录并执行
分别启动两个命令行
命令行1
roscore
命令行2
cd 工作空间
source ./devel/setup.bash
rosrun 包名 自定义文件名.py
来点心得
其实按理来说这点工作应该很快就可以搞定的,但是昨天硬是搞了大约四个小时,python那一块也没有完成,总结一下经验就是有时候需要先搞清楚,再去行动,不能刚看见某一步就冲冲冲,冷静下来,不然只会事倍功半
说到ROS操作系统,应该算是简单的安装好了,基本测试没问题,期待接下来用它干点大事情,哈哈哈哈