ROS 树莓派小车制作(一) ——ROS “点灯”
1.树莓派开发板(本人使用的版本为树莓派3b+)。
2.LED灯(没有的话,可以使用万用表测下IO的电平)。
3.显示屏(没有的话,可以使用vnc或者远程桌面)。
1.安装树莓派系统Raspbian
这个在网上有许多教程,这这里不详细赘述。
2.在树莓派上安装ROS环境
这个需要注意的是树莓派原生系统Raspbian安装ROS和Ubuntu mate安装ROS有一点区别,我刚开始按照Ubuntu mate的步骤去安装出现了一大堆无法解决的错误,最后在CSDN下面这篇博文的引导下,才正确完成了ROS的安装(我安装的时common版本的,没有多余的可视化的包)附上链接:
https://blog.csdn.net/qq_30267617/article/details/108252600
需要注意的是在这篇博文的第十步:
在编译roscpp时树莓派可能会死机,在网上查资料后,发现可能roscpp太大,四核一起运行编译会卡死,所以在这句命令后面加入-j2 采用双核编译,给cpu预留空间才能完成,即采用以下代码:
sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/melodic -j2
3.创建ROS工作空间
(1)在shell终端依次运行以下命令,创建工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
(2)创建完成后,回到工作目录根空间使用catkin_make命令编译整个空间:
cd ~/catkin_ws/
catkin_make
(3)编译完成后,设置环境变量
echo “source /home/pi/catkin_ws/devel/setup.bash">>~/.bashrc
4.创建ROS功能包
进入工作空间,使用catkin_create_pkg命令创建功能包:`
cd ~/catkin_ws/src
catkin_create_pkg ROS_testPi std_msgs rospy roscpp
然后回到工作空间根目录进行编译,
cd ~/catkin_ws
catkin_make
5.编写cpp程序来点亮LED灯
进入我们刚刚创建的功能包ROS_testPi文件的src目录下,编写cpp程序:
cd ~/catkin_ws/src/ROS_testPi/src
vi blink.cpp
这里我们使用vim编辑器来写cpp代码,没有安装vim编辑器的话可以执行以下代码来安装vim:
sudo apt-get install vim
进入vi编辑器后,编写cpp代码如下:
include "ros/ros.h"
#include "std_msgs/Bool.h"
#include
#include"wiringPi.h"
#define LED 1
void blink_callback(const std_msgs::Bool::ConstPtr& msg)
{
if(msg->data==1){
digitalWrite(LED,HIGH);
ROS_INFO("LED ON");
}
if(msg->data==0){
digitalWrite(LED,LOW);
ROS_INFO("LED OFF");
}
}
int main(int argc,char** argv){
ros::init(argc,argv,"blink_led");
ROS_INFO("Started Blink Node");
wiringPiSetup();
pinMode(LED,OUTPUT);
ros::NodeHandle n;
ros::Subscriber sub=
n.subscribe("led_blink",10,blink_callback);
ros::spin();
}
6.修改用于编译代码的CMakeList.txt文件如下:
## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
)
## System dependencies are found with CMake's conventions
find_package(Boost REQUIRED COMPONENTS system)
set(wiringPi_include "/usr/include")
## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
# include
${catkin_INCLUDE_DIRS}
${wiringpi_include}
LINK_DIRECTORIES("usr/lib")
add_executable(blink_led src/blink.cpp)
target_link_libraries(blink_led
${catkin_LIBRARIES} wiringPi
)
)
修改完CMakeLists.txt后,回到工作空间编译ROS节点:
cd ~/catkin_ws
catkin_make
7.运行代码
首先在打开一个终端运行roscore:
roscore
再打开一个终端,运行我们的刚刚写的点灯的ROS节点:
cd ~/catkin_ws
rosrun ROS_testPi blink_led
随后运行rostopic命令发布我们的话题:
cd ~/catkin_ws
rostopic pub /led_blink std_msgs/Bool 1
rostopic pub /led_blink std_msgs/Bool 0
如果树莓派板子上的12脚接了个LED灯的话,这时便可以看到LED亮起和熄灭了。没有的话,可以用万用表测一下12脚的电平来验证代码的正确性。