ROS 树莓派小车制作(一) ——ROS “点灯”
一、硬件准备
1.树莓派开发板(本人使用的版本为树莓派3b+)。
2.LED灯(没有的话,可以使用万用表测下IO的电平)。
3.显示屏(没有的话,可以使用vnc或者远程桌面)。
二、详细步骤
1.安装树莓派系统Raspbian
这个在网上有许多教程,这这里不详细赘述。
2.在树莓派上安装ROS环境
这个需要注意的是树莓派原生系统Raspbian安装ROS和Ubuntu mate安装ROS有一点区别,我刚开始按照Ubuntu mate的步骤去安装出现了一大堆无法解决的错误,最后在CSDN下面这篇博文的引导下,才正确完成了ROS的安装(我安装的时common版本的,没有多余的可视化的包)附上链接:
/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/srccd ~/catkin_ws/srccatkin_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/srccatkin_create_pkg ROS_testPi std_msgs rospy roscpp
然后回到工作空间根目录进行编译,
cd ~/catkin_wscatkin_make
5.编写cpp程序来点亮LED灯
进入我们刚刚创建的功能包ROS_testPi文件的src目录下,编写cpp程序:
cd ~/catkin_ws/src/ROS_testPi/srcvi blink.cpp
这里我们使用vim编辑器来写cpp代码,没有安装vim编辑器的话可以执行以下代码来安装vim:
sudo apt-get install vim
进入vi编辑器后,编写cpp代码如下:
include "ros/ros.h"#include "std_msgs/Bool.h"#include<iostream>#include"wiringPi.h"#define LED 1void 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 packagesfind_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs)## System dependencies are found with CMake's conventionsfind_package(Boost REQUIRED COMPONENTS system)set(wiringPi_include "/usr/include")## Specify additional locations of header files## Your package locations should be listed before other locationsinclude_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_wscatkin_make
7.运行代码
首先在打开一个终端运行roscore:
roscore
再打开一个终端,运行我们的刚刚写的点灯的ROS节点:
cd ~/catkin_wsrosrun ROS_testPi blink_led
随后运行rostopic命令发布我们的话题:
cd ~/catkin_wsrostopic pub /led_blink std_msgs/Bool 1rostopic pub /led_blink std_msgs/Bool 0
如果树莓派板子上的12脚接了个LED灯的话,这时便可以看到LED亮起和熄灭了。没有的话,可以用万用表测一下12脚的电平来验证代码的正确性。