Ros从安装到入门


hlayout: post
title: UnitySir - ROS的安装与实践
date: 2020-12-30 13:32:10
categories: Ros
tag: Ros机器人


文章目录

一、Ubuntu 镜像下载

官方下载地址(不推荐)

中国官网(推荐)

中科大源

阿里云开源镜像站

兰州大学开源镜像站

浙江大学



Ubuntu 20.04 安装 ROS Noetic

Ubuntu18.04安装ROS Melodic

二、Ubuntu 20.04 安装 代码库

  1. 在外壳程序窗口中,运行以下命令:

    sudo apt-get update

  2. 更新完成后,请运行以下命令:

    sudo apt-get install build-essential tar curl zip unzip

  3. 从GitHub克隆vcpkg存储库:https : //github.com/Microsoft/vcpkg

    git clone https://github.com/microsoft/vcpkg

此命令在*vcpkg子目录中创建存储库的本地副本。此位置是此vcpkg克隆的vcpkg根目录*。

  1. 接下来,转到vcpkg根目录,然后运行vcpkg bootstrapper命令:

    ./bootstrap-vcpkg.sh

更新vcpkg

vcpkg软件包管理器会定期在GitHub上更新。要将vcpkg的克隆更新到最新版本,请从vcpkg根目录运行**git pull**。此命令将您的vcpkg副本与GitHub上的版本同步。下载完成后,再次运行引导程序。引导程序将重建vcpkg程序,但是将安装的库保留在原位。

卸载vcpkg

要卸载vcpkg,只需删除*vcpkg*目录。删除此目录将卸载vcpkg发行版以及vcpkg已安装的所有库。

但是,如果已执行**vcpkg integrate install,则应vcpkg integrate remove**在删除文件夹之前执行以确保清除了集成。有关更多信息,请参见整合vcpkg

三、Ubuntu各个版本安装Ros步骤

ROS 1 安装

  1. sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    

    或者(国内镜像)

    sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) 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
    
    • 然后,输入下面其中一条命令(每个版本不同) :
      • 16.04 sudo apt install ros-kinetic-desktop-full
      • 18.04 sudo apt install ros-melodic-desktop-full
      • 20.04 sudo apt install ros-noetic-desktop-full

  4. 执行 sudo rosdep init

    如果出现未找到 rosdep命令 执行 sudo apt install python3-rosdep2

    • 如果出现 ERROR: cannot download default sources list from:

      • 通过 sudo gedit /etc/hosts #打开hosts文件

      • #在文件末尾添加 151.101.84.133 raw.githubusercontent.com

    • 如果出现 ERROR: default sources list file already exists:

      • 执行 sudo rm /etc/ros/rosdep/sources.list.d/20-default.list

    最后执行 rosdep update

    ROS终端出现没有那个文件或目录,解决每次都要source问题

    ​ 执行 gedit ~/.bashrc

    在文件末尾添加 : source /opt/ros/noetic/setup.bash noetic 是我安装的版本

  5. 修改为对应的版本 – melodic – noetic – kinetic

    echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    

  6. 执行 Python2 sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential

    或者 Python3 sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential


  1. 测试

第一步,打开一个终端测试roscore是否能正常启动,使用ROS必须保证roscore运行:

roscore

第二步,新开启一个终端,执行以下命令:

rosrun turtlesim turtlesim_node

第三步,再开启一个终端,执行以下命令:(鼠标必须聚焦在这个终端,乌龟才会移动)

rosrun turtlesim turtle_teleop_key

通过上下左右键即可实现乌龟的移动


ROS 2 Foxy 安装 (MoveIt2必备)

(注意:ROS2中不再需要 roscore 命令)

在Ubuntu 20.04中安装ROS2最新版本Foxy Fitzroy

ROS2基本命令总结

原文地址 :ROS2入门教程——2. Ubuntu20.04安装ROS2 Foxy

  1. 设置编码
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. 设置软件源
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
  1. 安装ROS2
sudo apt update
sudo apt install ros-foxy-desktop
  1. 设置环境变量
source /opt/ros/foxy/setup.bash
  1. 安装自动补全工具
sudo apt install python3-argcomplete
  1. 添加环境变量。这样每次打开 Terminal 就可以自动加载 ROS 2 相关的环境变量,进而使用 ROS 2 相关的命令
echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
  1. 如果涉及到 ROS 节点与 ROS 2 节点通讯,还要安装 ros1_bridge
sudo apt install ros-dashing-ros1-bridge
  1. 安装colcon ,colcon 包含在了 ROS 2 的 repo 中,前边已经添加过了这个 repo,所以这里直接安装即可:
sudo apt install python3-colcon-common-extensions

跑几个例程测试一下:

  1. 先运行一个talker:
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker
  1. 再运行一个Listener
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_py listener
  1. ROS2的RWM默认使用的DDS是Fast RTPS,Cyclone DDS默认也安装好了,还可以这样安装RTI Connext:
sudo apt update
sudo apt install ros-foxy-rmw-connext-cpp # for RTI Connext (requires license agreement)
  1. 安装之后通过环境变量即可切换DDS:
RMW_IMPLEMENTATION=rmw_connext_cpp
  1. 如果哪一天不喜欢了,还可以这样删除:
sudo apt remove ros-foxy-* && sudo apt autoremove

ROS1 和 ROS2

ros1 和 ros2的区别

ROS和ROS2.0到底该用哪个呢?

ROS 2最新版Dashing,你尝鲜了么?

为什么 ROS 2.0?

什么是ROS 2.0


MoveIt 1 安装

安装MoveIt和创建一个工作空间沙盒来运行教程和robot

这个教程将会安装MoveIt和创建一个工作空间沙盒来运行教程和robot例子。
一.安装ROS和Catkin
一旦安装了ROS,确保有最新的包:

rosdep update
sudo apt-get update
sudo apt-get dist-upgrade

安装ROS编译系统catkin:

sudo apt-get install ros-kinetic-catkin python-catkin-tools

二.安装MoveIt
最简单的方式安装MoveIt是使用预编译二进制:

sudo apt install ros-kinetic-moveit

三.创建Catkin工作空间
创建一个catkin工作空间:

mkdir -p ~/ws_moveit/src

四.下载例子代码
在catkin工作空间中,下载这些代码:

cd ~/ws_moveit/src
git clone -b kinetic-devel https://github.com/ros-planning/moveit_tutorials.git

需要一个panda_moveit_config包来运行这些教程:

git clone -b kinetic-devel https://github.com/ros-planning/panda_moveit_config.git

说明:现在使用预生成的panda_moveit_config包,但是后面在MoveIt Setup Assistant tutorial章节,将会学习如何制作自己的包。

五.编译Catkin工作空间
接下来安装依赖包:

cd ~/ws_moveit/src
rosdep install -y --from-paths . --ignore-src --rosdistro noetic

配置catkin工作空间:

cd ~/ws_moveit
catkin config --extend /opt/ros/noetic
catkin build

source catkin工作空间:

source ~/ws_moveit/devel/setup.bash

增加上条命令到.bashrc文件中:

echo 'source ~/ws_moveit/devel/setup.bash' >> ~/.bashrc

六.Next Step
通过RViz的交互式运动规划插件可视化一个robot。

七.相关问题
由于自己使用的开发环境为Ubuntu 16.04、ROS2 Dashing和MoveIt2,本来想使用colcon进行工作空间的编译,结果报错,最终还是安装ROS Kinetic和MoveIt,使用的catkin编译系统。如下所示:
[1]pkg_resources.DistributionNotFound: The ‘catkin-tools==0.4.5’ distribution was not found and is requ
解析:pip install catkin-tools
[2]Could not find a package configuration file provided by “moveit_visual_tools” with any of the following names
解析:sudo apt-get install ros-kinetic-moveit-visual-tools
说明:若非必要,尽量不要折腾环境,多写代码,多学原理。
[3]Could not find a package configuration file provided by… Could not find the required
解析:sudo apt-get install ros-kinetic-***
还有两个小问题没有解决掉
[1]Exception ignored in: <bound method BaseEventLoop.__del__ of <_UnixSelectorEventLoop running=False closed=True debug=False>>
[2]TypeError: signal handler must be signal.SIG_IGN, signal.SIG_DFL, or a callable object


MoveIt 2 安装


四、Ros 核心概念

image-20210104102549770 image-20210104102600347 image-20210104102628989 image-20210104102718799 image-20210104102758673 image-20210104102813843 image-20210104102831937

动态参数配置 – Ros高级功能

image-20210104102843381

五、Ros常用命令

image-20210104102926581
Ros中 默认以 弧度 为单位

rostopic pub -h 即可获取对应指令的说明信息

  1. roscore 启动节点管理器

  2. rosrun turtlesim turtlesim_node { 命令 包名称 节点名称 } ,启动一个仿真节点

  3. rosrun turtlesim turtle_teleop_key 启动一个键盘控制节点

可视化节点视图 命令 :rqt_graph

命令行所有节点信息 命令 :rosnode –> rosnode listrosnode info 节点名称

topic 信息 命令 rostopic

显示 ros 消息类型 rosmsg show geometry_msgs/Twist

创建一个海龟 rosservice call /spawn

保存数据 rosbag record -a -O cmd_record -a 保存所有数据 -O 保存为压缩包 cmd_record 压缩包名称

让海龟根据保存的数据移动 :rosbag play cmd_record.bag


六、工作空间与功能包

概览

image-20210104103036214
创建工作空间
image-20210104103100620
编译工作空间
image-20210104103121885
设置环境变量
image-20210104103148262 image-20201230160205037
检查环境变量
image-20210104103207070
创建功能包
image-20210104103232175 image-20201230163244836
代码地址

https://gitee.com/unitysir/ros_21_tutorials


6.1 创建工作空间

  1. 在当前目录创建一个ROS工程文件夹 mkdir catkin_ws

  2. catkin_ws 目录下创建子目录 src

    1. src目录初始化ROS工程 : catkin_init_workspace
    2. catkin_ws 中 编译整个项目 :catkin_make
      • 编译后,产生了 builddevel 目录
    3. catkin_ws 中执行 catkin_make install
      • 产生 install 目录

6.2 创建功能包

  1. src 目录中创建功能包 - 执行 catkin_create_pkg us_pkg roscpp rospy std_msgs 创建一个名为 us_pkg 依赖为 roscpp rospy std_msgs

  2. catkin_ws 中编译 功能包- 执行 catkin_make

  3. 设置工作空间的环境变量 source devel/setup.bash

  4. 查看环境变量 echo $ROS_PACKAGE_PATH


6.3 发布者的编程实现

  1. catkin_ws/src 目录创建功能包 catkin_create_pkg learing_topic roscpp rospy std_msgs geomtry_msgs turtlesim

    • 步骤:
      • 初始化ROS节点
      • 向 ROS Master注册节点信息(话题名和消息类型)
      • 创建消息数据
      • 按照一定频率发布消息

    (配置编译规则)将以下代码复制到 catkin_ws/src/learing_topic 中 CMakeList.txt中

    add_executable(velocity_publisher src/velocity_publisher.cpp)
    target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
    

    实现代码: velocity_publisher.cpp

/**

该例程将发布 turtle1/cmd_vel 话题 , 消息类型为 geometry_msgs::Twist

**/

#include<ros/ros.h>
#include<geometry_msgs/Twist.h>

int main(int argc,char **args){
   
	
	//ROS节点初始化
	ros::init(argc,args,"velocity_publisher");
	
	//创建节点句柄
	ros::NodeHandle n;

	//创建一个Publisher 发布名为 turtle1/cmd_vel , 消息类型为 geometry_msgs::Twist
	ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);

	//设置循环频率
	ros::Rate loop_rate(10);

	int count = 0;
	while(ros::ok()){
   
		//初始化geometry_msgs::Twist类型的消息
		geometry_msgs::Twist vel_msg;
		vel_msg.linear.x = 0.5;
		vel_msg.angular.z = 0.2;
		

		//发布消息
		turtle_vel_pub.publish(vel_msg);
		ROS_INFO("command[%0.2f m/s , %0.2f rad/s]",vel_msg.linear.x,vel_msg.angular.z);

		//按照循环频率延时
		loop_rate.sleep();
	}

	return 0;
}

  1. catkin_ws目录中编译 catkin_make

  2. 启动

    1. roscore 启动节点管理器
    2. rosrun turtlesim turtlesim_node { 命令 包名称 节点名称 } ,启动一个仿真节点
    3. rosrun turtlesim turtle_teleop_key 启动一个键盘控制节点
    4. rosrun learing_topic velocity_publisher 启动发布者

6.4 订阅者编程实现

(配置编译规则)将以下代码复制到 catkin_ws/src/learing_topic 中 CMakeList.txt中

add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})

实现代码:pose_subscriber.cpp

#include<ros/ros.h>
#include"turtlesim/Pose.h"

void poseCallback(const turtlesim::Pose::ConstPtr& msg){
   
	
	ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f",msg->x,msg->y);
}

int main(int argc,char **argv){
   
	//初始化节点
	ros::init(argc,argv,"pose_subscriber");

	//创建节点句柄
	ros::NodeHandle n;

	// 创建一个Subscriber,订阅名为 /turtle1/pose的topic , 注册回调函数poseCallback
	ros::Subscriber pose_sub = n.subscribe("/turtle1/pose",10,poseCallback);

	//循环等待回调函数
	ros::spin();

	return 0;
}
  1. catkin_ws目录中编译 catkin_make

  2. 启动

    1. roscore 启动节点管理器

    2. rosrun turtlesim turtlesim_node { 命令 包名称 节点名称 } ,启动一个仿真节点

    3. rosrun turtlesim turtle_teleop_key 启动一个键盘控制节点

    4. rosrun learing_topic pose_subscriber 启动订阅者


6.5 自定义话题消息(.msg文件)

  1. 创建 Person.msg 文件
string name
uint8 age
uint8 sex

uint8 unkonw=0
uint8 male=1
uint8 female=2
  1. 添加 编译依赖执行依赖 , 在 learning_topic中的 package.xml中添加
  <build_export_depend>message_generation</build_export_depend>
  <exec_depend>message_runtime</exec_depend>
  1. learning_topic中的 CMakeLists.txt中的find_package()添加
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
  1. learning_topic中的 CMakeLists.txt中的catkin_package()添加
CATKIN_DEPENDS geomtry_msgs roscpp rospy std_msgs turtlesim message_runtime
  1. 至此,配置完成
发布者 person_publisher
/**
 * 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
 */
 
#include <ros/ros.h>
#include "learing_topic/Person.h"

int main(int argc, char **argv)
{
   
    // ROS节点初始化
    ros::init(argc, argv, "person_publisher");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
    ros::Publisher person_info_pub = n.advertise<learing_topic::Person>("/person_info", 10);

    // 设置循环的频率
    ros::Rate loop_rate(1);

    int count = 0;
    while (ros::
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值