感谢b站up 机器人工匠阿杰
文章仅供个人学习使用
文章目录
Ubuntu使用
终端快捷键
打开终端:ctrl+alt+T
超级终端窗口:
ctrl+shift+E 左右分割
ctrl+shift+O 上下分割
ctrl+shift+W 关闭焦点窗口
alt+方向键 切换焦点
终端中复制粘贴:ctrl+shift+C、ctrl+shift+V
终止程序:ctrl+C
上一条指令:上方向键
文件操作
mkdir 文件夹名 #建立文件夹
cd 目录 #进入目录
cd ~ #回到根目录
roscd 软件包 #直接进入软件包地址:
ls #展示文件
code 文件 #用vscode打开
ATP源、ros软件包应用商店
找资源
寻找ros 软件包、源码库、依赖项等资源:
index.ros.org
闪电表示是否已发布(可以用APT下载)
点进去website详细信息
安装git
可以使用git下载源码
sudo apt install git
安装指定的包:
sudo apt install ros-ROS版本名称-Name
例:
sudo apt install ros-noetic-rqt-robot-steering
安装的包在/opt/ros/noetic/share中。
与工作空间catkin_ws下的包的区别:
通过apt下载的包都是现成的可执行文件,而工作空间中的文件是源码文件,需要编译后运行
运行节点:
roscore
#以下新终端运行:
rosrun 包名 节点名
常用节点
仿真小乌龟
turtlesim turtlesim_node
订阅话题:/turtle1/cmd_vel
键盘控制
rosteleop_twist_keyboard teleop_twist_keyboard.py
话题重映射到小乌龟:cmd_vel:=/turtle1/cmd_vel
拖动控制
rqt_robot_steering rqt_robot_steering
界面可设置话题
创建工作空间
工作空间环境
建立
midir catkin_ws/
cd catkin_ws/
midir src
cd src
git clone 粘贴wpr_simulation软件包地址
wpr_simulation包下,scripts目录用于放置脚本文件和python程序,一般只编译一次。
此目录下右键终端打开:
./install_for_noetic.sh
回到工作空间入口,对所有源代码进行编译:
cd ~/catkin_ws/
catkin_make
wpr_simulation源码包可以进行更新
cd ~/catkin_ws/src/wpr_simulation/
git pull
测试
使用source 将工作空间中的环境参数加载到终端程序中
使用roslaunch 运行编译好的ros程序——Gazabo
source ~/catkin_ws/devel/setup.bash
roslaunch wpr_simulation wpb_simple.launch
将source指令添加到终端程序初始化脚本
gedit ~/.bashrc
文件末尾新增加
source ~/catkin_ws/devel/setup.bash
用git方式下载软件包源代码
cd catkin_ws/src/
git clone https://....
vscode
下载.deb,在终端打开目录,安装
sudo dpkg -i code......deb (tab键补全)
任意位置终端输入code,打开。
导入工作空间
file -> Add Folder to Workspace -> 选择src子目录
安装扩展: CMake Tools、ROS
利用ros插件添加头文件
设置编译快捷键 :ctrl+shift+B 等效于:
cd catkin_ws
catkin_make
新建 Package包、Node节点
新建包
cd catkin_ws/sr
catkin_create_pkg 包名 依赖项列表
#例:
catkin_create_pkg ssr_pkg roscpp std_msgs
编写节点文件
在创建的包中的src文件夹中,新建.app文件作为节点源码
例:创建 first_node.cpp
编译
编译前一定先保存!
在CMakeLists.txt中添加编译规则
1.注释中找到build章节,下划到Declear a C++executable项:声明一个C++可执行文件:
add_executable(${PROJECT_NAME}_node src/ssr_pkg_node.cpp)
2.同样build章节下,找到Specify Librarise项,链接ros库:
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)
例:
add_executable(first_node src/first_node.cpp)
target_link_libraries(first_node
${catkin_LIBRARIES}
)
ctrl+shift+B编译
运行
运行节点:
roscore
#以下新终端运行
rosrun ssr_pkg first_node
发布和订阅话题
发布话题
#include <ros/ros.h>
#include <std_msgs/String.h>
int main(int argc, char *argv[])//注意删除const
{
ros::init(argc,argv,"first_node");//第三个参数是节点名称
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<std_msgs::String>("topic1",10);//<消息包::消息类型>("话题名称",消息缓存数)
ros::Rate loop_rate(10);//生成频率对象,名随便写,参数是每秒钟执行的次数
while(ros::ok())
{
std_msgs::String msg;
msg.data = "hello everybody 大家好";//话题的消息
pub.publish(msg);
loop_rate.sleep();
}
return 0;
}
订阅话题
例:同时订阅两个话题
#include <ros/ros.h>
#include <std_msgs/String.h>
void first_callback(std_msgs::String msg)//参数就是接收的消息包类型
{
ROS_INFO(msg.data.c_str());
}
void second_callback(std_msgs::String msg)
{
ROS_WARN(msg.data.c_str());
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"zh_CN.UTF-8");
ros::init(argc,argv,"motor_node");
ros::NodeHandle nh;
ros::Subscriber sub =nh.subscribe("topic1",10,first_callback);//(话题,缓存数量,接收消息包的回调函数名)
ros::Subscriber sub_2 =nh.subscribe("topic2",10,second_callback);
while(ros::ok())
{
ros::spinOnce(); //查看是否有消息
}
return 0;
}
查看话题
rostopic list #查看活跃话题:
rostopic echo /topic1 #查看消息内容
rostopic hz /topic1 #查看每秒消息发送的个数
rqt_graph #图形化显示话题通讯关系
不只是发布者产生话题,订阅者也可以产生话题
- 一个ROS节点网络中,可以同时存在多个话题。
- 一个话题可以有多个发布者,也可以有多个订阅者。
- 一个节点可以对多个话题进行订阅,也可以发布多个话题。
- 不同的传感器消息通常会拥有各自独立活题名称,每个话题只有一个发布者。
- 机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发言人。
launch同时启动多个节点
新建launch文件
将其放在随便某个软件包里都可以
test.launch:
<launch>
<node pkg="ssr_pkg" type="first_node" name="first_node" />
<node pkg="ssr_pkg" type="second_node" name="second_node" />
<node pkg="atr_pkg" type="motor_node" name="motor_node" output="sscreen" />
</launch>
其中的output="screen"意思是将输出指定为屏幕,只对ROS_INFO()产生影响,而ROS_WARN不用指定也能输出。
若希望某个节点在独立的终端输出,可添加属性 launch-prefix=“gnome-terminal -e”
不需要描述roscore,因为launch文件的机制是只要包含节点的描述就会自动启动roscore
启动launch:
roslaunch atr_pkg test.launch
其他
cmake和catkin
CMake是一个跨平台的编译工具,可以用来生成Makefile或Visual Studio等构建工具的配置文件,以实现源代码到可执行文件的编译过程。在ROS中,CMake被广泛应用于构建ROS软件包(packages)。
Catkin是ROS中的一种构建系统,旨在简化ROS软件包的构建、安装和依赖管理过程。它通过封装CMake构建系统,并提供了一些ROS专有的工具和命令,使得ROS软件包的开发和管理变得更加高效和方便。
二者之间的联系在于,Catkin是基于CMake的,它扩展了CMake并添加了一些ROS特有的功能。Catkin使用CMake来生成ROS软件包的构建系统,其中包括C++/Python源代码编译、依赖管理、安装等。与传统的CMake项目不同,Catkin还为ROS提供了一些特殊的目录结构,并且约定了一些命名规则和依赖项,以最大程度地减少ROS软件包之间的冲突和兼容性问题。
在ROS系统中,CMake和Catkin常用于以下场景:
构建ROS软件包:你可以使用CMake和Catkin来构建ROS软件包,包括C++和Python的代码编译、库依赖管理和安装等。
管理ROS依赖项:ROS软件包通常有许多依赖项,这些依赖项可以由Catkin来管理,并且可以通过CMake文件进行配置和控制。
定义ROS节点、服务和消息:你可以使用ROS中的catkin工具生成ROS节点、服务和消息的框架代码模板,然后使用C++或Python编写ROS节点等功能。