Docker && Microros && PlatformIO 配置经验留存

1. 背景:

无意中看到了小鱼(鱼香ROS)的文章

硬件环境:Ubuntu22.04  && ESP32-WROOM-32

想在ESP32 WROOM 32 上实现microros的功能:

实现上位机(跑ROS2)通过topic直接控制CAN报文的功能;

目前进度:实现了环境的配置(PlatformIO && docker && Microros);初步跑通了Microros的订阅与发送(24.08.08);

2. 踩坑道路:

(1)安装PlatformIO

安装该软件(IDE)的时候大部分情况下用的是鱼香ROS的一键安装

wget http://fishros.com/install -O fishros && . fishros

一键安装更新-安装STM32&ESP32开发终极IDE_microros stm32 platformio-CSDN博客

确实很强 !!! 但是遇到了问题:安装完成之后在VScode中还是打不开PlatformIO

一直是waiting的。。。。。。。

解决方式(大概是这样):

1. 在ubuntu home目录下会有一个.platformio的隐藏文件 将其卸载之后 通过VScode重新安装一下(或者就是小鱼的一键安装)有点忘记了。。。

2. 还有其他的方式就是:挂梯子 连手机wifi等 CSDN上很多

(2)microros的安装

这一步不是太确定:我记得之前在ubuntu20.04上的时候直接安装就可以使用了 具体就是:

First micro-ROS Application on Linux | micro-ROS

然后跟着教程走就好了

但是到了ubuntu22.04之后使用官网的步骤进行配置就一直会报错DDS。。。

执行:

ros2 run micro_ros_setup build_agent.sh

报错:

确实是没搞明白。。。(希望有大佬指点)

(3)docker的安装与使用

由于上一步骤microros安装的失败以及无法解决--只能使用docker来跑microros了

大致教程还是小鱼的一键安装

wget http://fishros.com/install -O fishros && . fishros

但是还有一个问题。。。我连不上docker... 困扰了一周多

解决方式:

首先通过一键安装安装上docker (PS:好像有这一步也失败的 但是我用了梯子所以成功了)

安装完成之后在 etc/docker/daemon.json 添加docker镜像代理

分享两个好用点的:

{"registry-mirrors": ["https://dhub.kubesre.xyz"]}
{"registry-mirrors": ["https://dhub.kubesre.xyz"]}

还有阿里云镜像的:但是我用起来不行(可以试下;每个人网络不一样)

还是不行的话。。。咸鱼搜docker

到这一步为止我们应该成功安装了docker 此时 我们就要用到:

sudo docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:$ROS_DISTRO serial --dev /dev/ttyUSB0 -v6

具体可以看下这个:

【ROS2机器人入门到实战】Micro-ROS介绍与服务安装_microros-CSDN博客

受到你的docker镜像源的影响:这边的拉取可能会很慢!!

但是只要没有显示重试 就挂着 我记得我挂了半小时。。。

到这一步为止 应该安装完成了 docker microros platformio

那么我们就可以开始代码的开发了:

首先新建工程:添加microros库的链接(用小鱼的):

[env:featheresp32]
platform = espressif32
board = featheresp32
framework = arduino
lib_deps = 
	https://gitee.com/ohhuo/micro_ros_platformio.git
    miwagner/ESP32CAN @ ^0.0.1

示例代码:(自己写的比较差就引用了)

#include <Arduino.h>
#include <micro_ros_platformio.h>

#include <rcl/rcl.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
// 添加头文件
#include <std_msgs/msg/float32.h>

rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
rcl_timer_t timer;

// 声明话题发布者
rcl_publisher_t publisher;
// 声明消息文件
std_msgs__msg__Float32 pub_msg;

// 定义定时器接收回调函数
void timer_callback(rcl_timer_t *timer, int64_t last_call_time)
{
  RCLC_UNUSED(last_call_time);
  if (timer != NULL)
  {
    rcl_publish(&publisher, &pub_msg, NULL);
  }
}

void setup()
{
  Serial.begin(115200);
  // 设置通过串口进行MicroROS通信
  set_microros_serial_transports(Serial);
  // 延时时一段时间,等待设置完成
  delay(2000);
  // 初始化内存分配器
  allocator = rcl_get_default_allocator();
  // 创建初始化选项
  rclc_support_init(&support, 0, NULL, &allocator);
  // 创建节点 topic_sub_test
  rclc_node_init_default(&node, "topic_pub_test", "", &support);
  // 订阅者初始化
  rclc_publisher_init_default(
      &publisher,
      &node,
      ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Float32),
      "battery_voltage");

  // 创建定时器,200ms发一次
  const unsigned int timer_timeout = 200;
  rclc_timer_init_default(
      &timer,
      &support,
      RCL_MS_TO_NS(timer_timeout),
      timer_callback);

  // 创建执行器
  rclc_executor_init(&executor, &support.context, 1, &allocator);
  // 给执行器添加定时器
  rclc_executor_add_timer(&executor, &timer);
  // 初始化ADC
  pinMode(34, INPUT);
  analogSetAttenuation(ADC_11db);
}

void loop()
{
  delay(100);
  // 循环处理数据
  rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100));
  // 通过ADC获取电压值
  int analogValue = analogRead(34);                     // 读取原始值0-4096
  int analogVolts = analogReadMilliVolts(34);           // 读取模拟电压,单位毫伏
  float realVolts = 5.02 * ((float)analogVolts * 1e-3); // 计算实际电压值
  pub_msg.data = realVolts;
}

需要注意的是:

大部分的逻辑与ROS2类似

但是在执行器这部分有些不一样(困扰了一会儿。。。)

  // 创建执行器
  rclc_executor_init(&executor, &support.context, 1, &allocator);
  // 给执行器添加定时器
  rclc_executor_add_timer(&executor, &timer);

这里的执行器有一个参数“1”--具体含义是指执行器只会执行下面的1条命令 这部分需要按需修改一下

然后就是连接开发板 下载

终端启动:

接下来ros2 topic list 应该就可以看到topic 了

microros docker镜像包:

https://download.csdn.net/download/qq_44936797/89625272

  • 37
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值