hlayout: post
title: UnitySir - ROS的安装与实践
date: 2020-12-30 13:32:10
categories: Ros
tag: Ros机器人
文章目录
一、Ubuntu 镜像下载
二、Ubuntu 20.04 安装 代码库
-
在外壳程序窗口中,运行以下命令:
sudo apt-get update
-
更新完成后,请运行以下命令:
sudo apt-get install build-essential tar curl zip unzip
-
从GitHub克隆vcpkg存储库:https : //github.com/Microsoft/vcpkg。
git clone https://github.com/microsoft/vcpkg
此命令在*vcpkg
子目录中创建存储库的本地副本。此位置是此vcpkg克隆的vcpkg根目录*。
-
接下来,转到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 安装
-
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'
-
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
-
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
- 16.04
- 然后,输入下面其中一条命令(每个版本不同) :
-
执行
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 是我安装的版本 -
-
修改为对应的版本 – melodic – noetic – kinetic
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
-
执行 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
- 测试:
第一步,打开一个终端测试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入门教程——2. Ubuntu20.04安装ROS2 Foxy
- 设置编码
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
- 设置软件源
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'
- 安装ROS2
sudo apt update
sudo apt install ros-foxy-desktop
- 设置环境变量
source /opt/ros/foxy/setup.bash
- 安装自动补全工具
sudo apt install python3-argcomplete
- 添加环境变量。这样每次打开 Terminal 就可以自动加载 ROS 2 相关的环境变量,进而使用 ROS 2 相关的命令
echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
- 如果涉及到 ROS 节点与 ROS 2 节点通讯,还要安装 ros1_bridge
sudo apt install ros-dashing-ros1-bridge
- 安装colcon ,colcon 包含在了 ROS 2 的 repo 中,前边已经添加过了这个 repo,所以这里直接安装即可:
sudo apt install python3-colcon-common-extensions
跑几个例程测试一下:
- 先运行一个talker:
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker
- 再运行一个Listener
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_py listener
- 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)
- 安装之后通过环境变量即可切换DDS:
RMW_IMPLEMENTATION=rmw_connext_cpp
- 如果哪一天不喜欢了,还可以这样删除:
sudo apt remove ros-foxy-* && sudo apt autoremove
ROS1 和 ROS2
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 核心概念







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

五、Ros常用命令

Ros中 默认以 米 和 弧度 为单位
rostopic pub -h
即可获取对应指令的说明信息
-
roscore
启动节点管理器 -
rosrun turtlesim turtlesim_node
{ 命令 包名称 节点名称 } ,启动一个仿真节点 -
rosrun turtlesim turtle_teleop_key
启动一个键盘控制节点
可视化节点视图 命令 :rqt_graph
命令行所有节点信息 命令 :rosnode
–> rosnode list
–rosnode 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
六、工作空间与功能包
概览

创建工作空间

编译工作空间

设置环境变量


检查环境变量

创建功能包


代码地址
https://gitee.com/unitysir/ros_21_tutorials
6.1 创建工作空间
-
在当前目录创建一个ROS工程文件夹
mkdir catkin_ws
-
在
catkin_ws
目录下创建子目录 src- 在
src
目录初始化ROS工程 :catkin_init_workspace
- 在
catkin_ws
中 编译整个项目 :catkin_make
- 编译后,产生了
build
和devel
目录
- 编译后,产生了
- 在
catkin_ws
中执行catkin_make install
- 产生
install
目录
- 产生
- 在
6.2 创建功能包
-
在
src
目录中创建功能包 - 执行catkin_create_pkg us_pkg roscpp rospy std_msgs
创建一个名为us_pkg
依赖为roscpp
rospy
std_msgs
-
在
catkin_ws
中编译 功能包- 执行catkin_make
-
设置工作空间的环境变量
source devel/setup.bash
-
查看环境变量
echo $ROS_PACKAGE_PATH
6.3 发布者的编程实现
-
在
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;
}
-
在
catkin_ws
目录中编译catkin_make
-
启动
roscore
启动节点管理器rosrun turtlesim turtlesim_node
{ 命令 包名称 节点名称 } ,启动一个仿真节点rosrun turtlesim turtle_teleop_key
启动一个键盘控制节点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;
}
-
在
catkin_ws
目录中编译catkin_make
-
启动
-
roscore
启动节点管理器 -
rosrun turtlesim turtlesim_node
{ 命令 包名称 节点名称 } ,启动一个仿真节点 -
rosrun turtlesim turtle_teleop_key
启动一个键盘控制节点 -
rosrun learing_topic pose_subscriber
启动订阅者
-
6.5 自定义话题消息(.msg文件)
- 创建
Person.msg
文件
string name
uint8 age
uint8 sex
uint8 unkonw=0
uint8 male=1
uint8 female=2
- 添加
编译依赖
和执行依赖
, 在learning_topic
中的package.xml
中添加
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>
- 在
learning_topic
中的CMakeLists.txt
中的find_package()
添加
add_message_files(FILES Person.msg)
generate_messages(DEPENDENCIES std_msgs)
- 在
learning_topic
中的CMakeLists.txt
中的catkin_package()
添加
CATKIN_DEPENDS geomtry_msgs roscpp rospy std_msgs turtlesim message_runtime
- 至此,配置完成
发布者 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::