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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章