本文只为自己学习记录用,记录踩到的坑以及解决方法等等。持续更新
之前购置了一个树莓派4b,一直闲置,后来想学学ros开始折腾之路,
ros使用记要
首先在运行ros前一定要运行roscore,其为ros的核心。
运行roscore后能够看到版本信息等等,我所使用的为noetic
在安装好ros环境后我们编译需要工作空间,使用工作空间时有一些操作出问题是可以看看是否是忘记了环境配置。运行source devel/setup.bash
source devel/setup.bash
即可设置好。关于功能包可用roscd直接跳到package内。
下面是一些记录的linux常用命令,仅为个人使用记录。
rostopic echo xxxxx(为消息)显示消息
rosrun rqt_graph rqt_graph //显示当前逻辑图标
rostopic list -v //显示当前有的话题和目前所监听的
rostopic pub -1 消息 geometry_msgs/Twist “或者直接tab补全了
rostopic type 消息 显示消息
紧跟rosmsg show 上述返回值 //即可看到详细
在使用工作空间前要先source devel/setup.bash设置环境变量
在使用esp32时我个人喜欢无线连接的方式,这里需要在ros上下载rosserial功能包,
在安装前记得提高权限输入su 后输入密码提高权限再安装,不然可能安装失败。
sudo apt-get install ros-indigo-rosserial
安装好后可以试试运行
rosrun rosserial_python serial_node.py tcp
在以上操作后如果成功则会看到等待连接等等
下一步是处理esp32 的程序。
我们在arduino上开发,首先要安装好对应的库,在此次开发中使用ros_serial这个库名称可能输错了再arduino库管理中能够搜到,可以找找试试。
之后我们编译下载到esp32中对应程序如下:
#include <WiFi.h>
#include <ros.h>
#include <std_msgs/String.h>
const char* ssid = "wifi名称";
const char* password = "密码";
// Set the rosserial socket server IP address
IPAddress server(192,168,43,4);//该端口号如果不清楚可以在树莓派的wifi处查看链接信息获取到ipv4的ip地址
// Set the rosserial socket server port
const uint16_t serverPort = 11411;
ros::NodeHandle nh;
// Make a chatter publisher
std_msgs::String str_msg;
ros::Publisher chatter("esp32dev", &str_msg);
// Be polite and say hello
char hello[13] = "hello world!";
void setup()
{
// Use ESP8266 serial to monitor the process
Serial.begin(115200);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
// Connect the ESP8266 the the wifi AP
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Set the connection to rosserial socket server
nh.getHardware()->setConnection(server, serverPort);
nh.initNode();
// Another way to get IP
Serial.print("IP = ");
Serial.println(nh.getHardware()->getLocalIP());
// Start to be polite
nh.advertise(chatter);
}
void loop()
{
if (nh.connected()) {
Serial.println("Connected");
// Say hello
str_msg.data = hello;
chatter.publish( &str_msg );
} else {
Serial.println("Not Connected");
}
nh.spinOnce();
// Loop exproximativly at 1Hz
delay(1000);
}
在成功下载并且连接到wifi后应该能够在ros主机处看到变化,如果要查看esp32 想ros发送的消息可以使用echo的命令查看chatter即可,