ROS入门-ROS的安装及编写简单的节点talker和listener

废话不多说,我们开始吧!!!
我使用的Ubuntu 18.04的系统,所以安装的是最新的ROS版本。
以下是ROS版本和Ubuntu系统版本的对照。

enter description here

  1. 安装ROS

  2. 1 配置Ubuntu软件库
    先配置Ubuntu存储库以允许 “restricted,” “universe,” and “multiverse.”
    1.2设置sources.list
    先将电脑设置为接受来自packages.ros.org的软件,然后执行命令:

    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    1.3设置密钥
    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
    这里如果遇到连接到密钥服务器的问题,可以尝试在前面的命令中替换hkp://pgp.mit.edu:80 或 hkp://keyserver.ubuntu.com:80。
    ②执行安装命令
    先更新软件包:

    apt-get update```
    1
    2
    3
    4
    5
    6
    7
    8
    9
      桌面完整版安装:`sudo apt-get install ros-melodic-desktop-full`
    2. 编写程序
    2.1创建工作环境
    创建工作目录:mkdir -p catkin_ws/src
    2.2创建第一个软件包
    在工作目录下的src文件夹下创建一个名为beginner_tutorials的程序包:
    这个程序包依赖于std_msgs、rospy、roscpp.
    ``` javascript
    catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

    enter description here

  3. 3编写cpp文件
    在程序包的src目录创建一个talker.cpp文件以及listener.cpp文件。
    //talker.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc, char **argv)
{
//初始化ROS,名称重映射(唯一),必须为base name,不含/
ros::init(argc, argv, "talker");
// 为进程的节点创建一个句柄,第一个创建的NodeHandle初始化节点
ros::NodeHandle n;
// 告诉主机要在chatter topic上发布一个std_msgs消息
// 主机会订阅所有chatter topic节点,参数表示发布队列的大小(先进先出)
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10); // 自循环频率
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
// 输出,用来替代prinf/cout
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);

ros::spinOnce();
// 休眠,来使发布频率为10Hz
loop_rate.sleep();
++count;
}
return 0;
}

//listener.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "ros/ros.h"
#include "std_msgs/String.h"
// 回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{

ros::init(argc, argv, "listener");
ros::NodeHandle n;
// 告诉master需要订阅chatter topic消息
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin(); // 自循环
return 0;
}

2.4修改Cmakelist配置
在该文件加入各项依赖关系:

1
2
3
4
5
6
7
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
add_dependencies(listener beginner_tutorials_generate_messages_cpp)

enter description here

  1. 编译并运行程序
    依次执行下面的操作:
    Cd ~/catkin_ws
    Catkin_make (编译完成后,生成的可执行文件会放在
    /home/demons/catkin_ws/devel/lib/beginner_tutorials下)
    ③ 执行roscore 这个命令是你在运行所有ROS程序前首先要运行的命令
    enter description here
    ④ 打开一个新的Terminal cd ~/catkin_ws并执行:source ./devel/setup.bash (这个地方执行这句话是让ROS能够找到你想要执行的可执行文件,因为第二步执行完成后,生成的可执行文件并不在/home/demons/catkin_ws/src/beginner_tutorials/src/下,这个时候执行第五步就会报错: [rosrun]Couldn’t find executable named talker below /home//catkin_ws/src/beginner_tutorials.
    每次运行程序前先执行一次这句话)
    rosrun beginner_tutorials talk (命令格式是 rosrun [package_name] [node_name])
    enter description here
    ⑥ 再打开一个terminal cd ~/catkin_ws 再执行
    rosrun beginner_tutorials listener
    enter description here