目录
Ubuntu20.04上安装:
cn/noetic/Installation/Ubuntu - ROS Wiki
学习资料:
【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili
《ROS入门21讲》教程补充资料|学习ROS出现问题?点这里解开你的疑惑~ - 哔哩哔哩
命令行使用
roscore //启动ROS Master
rosrun turtlesim turtlesim_node //启动小海龟仿真器
rosrun turtlesim turtle_teleop_key //启动海龟控制节点
rqt_graph //
rosnode list //
rosnode info /turtlesim //
rostopic
rostopic list //查看话题列表
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear: //发布话题消息
x: 1.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0"
rostopic pu-r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
x: 0.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 1.0"
rosmsg show geometry_msgs/Twist
rosservice list
rosservice call /spawn "x: 2.0 //发布服务请求
y: 2.0
theta: 0.0
name: 'turtle2'"
rosbag record -a -O cmd_record //话题记录
resbag play cmd_record.bag //话题复现
工作空间和功能包
工作空间(workspace):一个存放工程开发相关的文件夹
- src:代码空间(Source Space)
- build:编译空间(Build Space)
- devel:开发空间(Development Space)
- install:安装空间(Install Space)
//创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
//编译工作空间
cd ~/catkin_ws/
catkin_make
source devel/setup.bash //设置环境变量
echo $ROS_PACKAGE_PATH //检查环境变量
catkin_create_pkg <package_name>[depend1] [depend2] [depend3]
//创建功能包
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp
//编译功能包
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
话题模型
//创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
如何实现一个发布者
- 初始化ROS节点;
- 向ROS Master注册节点信息,
- 包括发布的话题名和话题中的消息类型;
- 创建消息数据;
- 按照—定频率循环发布消息。
复制文件到src
/***********************************************************************
Copyright 2020 GuYueHome (www.guyuehome.com).
***********************************************************************/
/**
* 该例程将发布/person_info话题,自定义消息类型learning_topic::Person
*/
#include <ros/ros.h>
#include "learning_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<learning_topic::Person>("/person_info", 10);
// 设置循环的频率
ros::Rate loop_rate(1);
int count = 0;
while (ros::ok())
{
// 初始化learning_topic::Person类型的消息
learning_topic::Person person_msg;
person_msg.name = "Tom";
person_msg.age = 18;
person_msg.sex = learning_topic::Person::male;
// 发布消息
person_info_pub.publish(person_msg);
ROS_INFO("Publish Person Info: name:%s age:%d sex:%d",
person_msg.name.c_str(), person_msg.age, person_msg.sex);
// 按照循环频率延时
loop_rate.sleep();
}
return 0;
}
加入以下指令到CMakeLists.txt
add_executable(velocity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})
终端下:
echo "source /home/joyer/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
//编译并运行发布者
cd ~/catkin_ws
catkin_make
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher