ros_canopen使用心得

2023-05-16

近期开始准备上位机与机器人底盘进行CAN通讯,花了很长时间在网上整理学习资料,现将自己的心得和参考的链接整理如下。

首先,机器人操作系统中有ros_canopen可以去调用,其中socketcan-bridg功能包帮我们省却了很多底层工作,其socketcan_to_topicnode,topic_to_socketcannode这两个节点,可以将上位机发布的can消息转为话题发布,反之可以将底盘发送的信息转为话题进行订阅。

 具体可以参考下面链接:

ROS中CANopen的使用(1)_zyf_to_utopia的博客-CSDN博客

一、安装canopen

1.1开始准备工作(下载):

$ mkdir -p /xxx_ws/src

$ cd /xxx_ws

$ git clone git https://github.com/ros-industrial/ros_canopen.git

最后一行代码可以改为git clone git://github.com/ros-industrial/ros_canopen.git

就是新建工作空间,在工作空间中下载ros_canopen

1.2 开始安装ros_canopen

$ sudo apt-get install libmuparser-dev

上述链接中提到上一步安装出现问题的话,执行下面这一步:

$ sudo apt-get install  libmuparser libmuparser2v5     libmuparser-doc    libmuparserx-dev   libmuparser-dev    libmuparserx4.0.7 

1.3 开始编译

cd xxx_ws 进入工作空间

开始运行 catkin_make

个人习惯一次一敲 source ./devel/setup.bash 所以跳过了后续

笔者当时参考的链接:

ubuntu ros melodic 安装 canopen - xyyh - 博客园 (cnblogs.com)

二、创建虚拟can口进行调试

本文主要针对笔记本电脑等设备,因为该设备通常没有can卡,所以需要创建并调用虚拟can口,步骤如下:

下面创建虚拟CAN。只做粗体部分即可。

1.sudo modprobe vcan //加载虚拟can模块

2.sudo ip link add dev can0 type vcan //添加can0网卡

3.ifconfig -a  //查看can0

4.sudo ip link set dev can0 up //开启can0

5.sudo ip link set dev can0 down //关闭can0

6. sudo ip link del dev can0 //删除can0

roscore //启动roscore

rosrun socketcan_bridge socketcan_to_topic_node//启动节点

rostopic echo /received_messages   (这里的数据是ROS MSG格式)---打印通道内容

candump can0            (原样的数据显示)接受CAN数据

cansend can0 7ff#123456 //发送CAN数据测试

执行到第四步开启can口就好了,因为后续可以自己写程序和launch文件进行集成运行。

笔者当时参考的链接:

ROS中使用CAN通信的调查记录_学习笔记-CSDN博客

三、笔者写的简单调试代码

canopen_test.cpp:

#include <ros/ros.h>

#include <ros/spinner.h>

#include <std_msgs/String.h>

#include<tf/transform_broadcaster.h>

#include<nav_msgs/Odometry.h>

#include<geometry_msgs/Twist.h>

#include <std_msgs/String.h>

#include <socketcan_bridge/topic_to_socketcan.h>

#include <socketcan_bridge/socketcan_to_topic.h>

#include <can_msgs/Frame.h>

#include <socketcan_interface/socketcan.h>


void send_can_message(int motor_1,int motor_2,int motor_3,int motor_4)

{

while(ros::ok())

{

ROS_INFO("start send can_message");

setlocale(LC_ALL,"");

uint8_t transition[8];//中间传递转速变量数组

can_msgs::Frame can_frame;

memset(&transition,0,sizeof(transition));//初始化数组元素为0


transition[0]=motor_1 >> 8;

transition[1]=motor_1 & 0xFF;

transition[2]=motor_2 >> 8;

transition[3]=motor_2 & 0xFF;

transition[4]=motor_3 >> 8;

transition[5]=motor_3 & 0xFF;

transition[6]=motor_4 >> 8;

transition[7]=motor_4 & 0xFF8;


can_frame.id=0x07ff1234;//需要修改

can_frame.is_extended = true;

can_frame.is_rtr = false;

can_frame.is_error = false;

can_frame.dlc = 8;//有效数据长度

for(uint8_t i =0; i<can_frame.dlc; i++)

{

can_frame.data[i] = transition[i];

}

ros::NodeHandle roscan("~");

ros::Publisher roscan_send_message;

roscan_send_message = roscan.advertise<can_msgs::Frame>("sent_messages",100);

roscan_send_message.publish(can_frame);

ROS_INFO("has sent messages to motor 1-4");

ros::Duration(0.5).sleep();

ros::spinOnce();

}

}


int main(int argc, char**argv)

{

ros::init(argc, argv, "robotx4");

ros::NodeHandle n("~");

send_can_message(100,200,300,400);

}

.launch文件:

<launch>

    <node pkg="socketcan_bridge" name="topic_to_socketcan_node" type="topic_to_socketcan_node" output="screen">
    </node>

    <node pkg="socketcan_bridge" name="socketcan_to_topic_node" type="socketcan_to_topic_node" output="screen">
    </node>
    
    <node pkg="robotx4_bringup" name="canopen_test" type="canopen_test" output="screen">
    </node>

</launch>

四、实验验证

1、执行第二部分前4步,打开虚拟can口

2、启动launch文件

3、观察话题发布信息

 4、额外测试(直接can口写和收,和ros 接口应该是独立的):

补充:个人理解的---ros接口的话题发布,其消息需要rostopic echo 话题名 打印出来,candump是无法显示的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ros_canopen使用心得 的相关文章

  • ros 样例代码和教程

    中国大学MOOC 机器人操作系统入门 课程代码示例 代码 https github com DroidAITech ROS Academy for Beginners 书 https legacy gitbook com book sych
  • 【硬核】 ROS Navigation 局部路径规划常见算法

    简介 最近 作者参加了关于RMUS 高校 SimReal挑战赛 首次接触到了机器人导航领域 这里记录一下这段时间的收货 sim2real的全称是simulation to reality 是强化学习的一个分支 同时也属于transfer l
  • ROS与navigation教程——ACML参数配置

  • Webots小车与Gampping建图仿真与ORB3算法实践

    此篇博客转自本作者在古月居的博客 https www guyuehome com 34537 前言 在研一的时候 由于XXX项目的需要 其中一项就是需要测试Gmapping建图 自然也要求使用ROS系统 由于之前经常在webots中进行仿真
  • rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题

    rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题 rospack Warning error while crawling home sun boost filesystem status Permission de
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 解决ros安装 使用roscore命令测试问题

    本人安装教程完成ROS的安装后 在进行测试如图1命令 出现 解决办法输入完命令1后要输入命令2才行 即可测试成功 测试成功的界面如下
  • rosprofiler 安装和使用

    rosprofiler wiki 页面 http wiki ros org rosprofiler rosprofiler package 下载rosprofiler和ros statistics msgs 放到工程目录下编译 https
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 可视化点云

    我在找到的视差图像上有来自 gpu reprojectImageTo3D 的 3D 点 我现在想显示这个点云 如何将找到的点云转换为OpenCV to sensor msgs PointCloud2 我不需要发布点云 这仅用于调试可视化 是
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • 使用 CMake 链接 .s 文件

    我有一个我想使用的 c 函数 但它是用Intel编译器而不是gnu C编译器 我在用着cmake构建程序 我实际上正在使用ROS因此rosmake但基础是cmake所以我认为这更多是一个 cmake 问题而不是ROS问题 假设使用构建的文件

随机推荐

  • linux系统的进程占用cpu信息监控C++

    linux系统下的进程以及cpu信息都实时存储在 proc stat文件里 xff0c 只需要提取对应的时间信息就可以获取cpu的信息 xff0c 进程的信息则存储在 proc pid stat proc stat文件包含了所有CPU活动的
  • 用java套接字socket实现两台电脑间的通信

    实现效果 xff1a 一方发送简单的文字消息 发送 接收复杂的图片 音频 文档等 相互之间实现自由通信 java对网络编程的支持 前提条件 xff1a 两台电脑在一个局域网内 xff0c 比如连接了同一个路由器 将一台电脑作为服务端 xff
  • 【STM32标准库】【自制库】硬件串口通信和标准输入输出函数的重定向

    文章目录 硬件串口通信电气连接初始化思路1 初始化GPIO2 GPIO复用选择3 开启时钟4 初始化结构体USART BaudRateUSART WordLengthUSART StopBitsUSART ParityUSART ModeU
  • 什么是A*(Astar)算法?(简单叙述)

    目录 简介 A 算法的原理与思想 A 算法处理与搜索 实例 xff08 引用见文末 xff09 简介 A 算法 xff08 启发式搜索 xff09 的首要条件是在静态路网中 xff0c 相对于广度优先遍历 xff08 BFS xff09 求
  • Qt的安装和配置

    1 Windows安装Qt5及VisualStudio配置 安装 VS nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 安装Visual Studio过程忽略 但是需要注意 切记勾选 Visual C 选项
  • 基于STM32F103系列芯片使用IIC协议来写oled(硬件IIC)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 协议是什么IIC xff1f 二 相关代码 1 main c2 oled c总结 前言 提示 xff1a 这里可以添加本
  • linux里 read函数用法

    Read 函数 从打开的 fd 设备或文件中读取 count 个字节到 buf 中 ssize tread int fd void buf size tcount fd 文件描述符 buf 读入数据的首地址 count 读入数据的个数 返回
  • linux读写锁

    这里写目录标题 读写锁的认识读写锁的相关函数练习 读写锁的认识 xff08 1 xff09 读写锁是一把锁 xff08 2 xff09 读写锁的类型 xff1a pthread rwlock t lock 又分 读锁 xff08 对内存进行
  • stm32智能家居+微信小程序接收控制

    这里写目录标题 项目介绍mqtt服务器相关知识 在这里插入图片描述 https img blog csdnimg cn 9ad065fb8fac48b1b975fc3a48b99763 png 下位机代码项目需要的一些开发工具 项目介绍 本
  • PWM互补输出,以及死区时间计算

    本文基于野火例程进行解说 实验内容 本次实验输出一对互补的pwm波 xff0c 且进行死区时间的计算说明 代码 互补输出对应的定时器初始化代码 xff1a bsp advance tim c span class token comment
  • 正点原直流有刷驱动板的硬件解说

    这里写目录标题 H桥电流采集电路电源电压采集电路温度采集电路过流检测电路过流保护电路 请添加图片描述 https img blog csdnimg cn fa130e17e23b471e8e27ae942e1ff125 png H桥 因为光
  • stm32103ZET6使用编码器(磁电增量式)

    这里写目录标题 磁电增量式编码器介绍TIM定时器 xff08 编码器接口模式 xff09 一些用到的算法均值滤波冒泡排序 xff08 从小到大 xff09 一阶低通滤波 编码器测数代码编码器接口HAL库函数 正点原子的电机例程 原例程用的是
  • PID算法(位置式pid算法和增量式pid算法)

    这里写目录标题 PID算法介绍比例环节比例 43 积分环节比例 43 积分 43 微分环节 位置式PID增量式PIDPID参数整定采样周期选择PID参数整定方法 请添加图片描述 https img blog csdnimg cn 849bf
  • C++ 关于编译出现“undefined reference to `std::cout‘“的问题

    1 问题概述 在使用gcc编译c 43 43 代码时会出现undefined reference to 96 std cout 39 xff0c 如编译如下代码 xff1a include lt iostream gt using name
  • 在ubuntu20.4下安装ROS-noetic

    换源方法 xff1a 打开software amp updates 在里面找到china 然后选择对应的源 1 添加ROS软件源 将以下命令复制到ubuntu的终端执行 sudo sh c 39 echo 34 deb http packa
  • ubuntu安装pip,setuptools

    https pypi python org pypi pip 解压下载后的文件 xff1a azheng 64 ubuntu16 tar zxvf pip 10 0 0 tar gz 进入目录后安装 xff1a 提示setuptools模块
  • 用putty连接ubuntu

    1 软件更新 sudo apt get update 2 下载openssh server sudo apt get install openssh server 3 查看当前tcp监听端口 netstat tl 4 查看是否安装成功 ps
  • ROS2话题入门

    1 订阅发布模式 一个节点发布数据到某个话题上 xff0c 另外一个节点就可以通过订阅话题拿到数据 除了上述这种一个节点发布 xff0c 一个节点接受的形式外 xff0c ROS2话题通信其实还可以是1对n xff0c n对1 xff0c
  • 比较程序查询方式、程序中断方式、DMA方式对CPU工作效率的影响

    xff08 1 xff09 程序查询方式是由CPU通过程序不断查询I O设备是否已经做好准备 xff0c 从而控制I O设备与主机交换信息 xff0c 只要一启动I O设备 xff0c CPU便不断查询I O设备的准备情况 xff0c 从而
  • ros_canopen使用心得

    近期开始准备上位机与机器人底盘进行CAN通讯 xff0c 花了很长时间在网上整理学习资料 xff0c 现将自己的心得和参考的链接整理如下 首先 xff0c 机器人操作系统中有ros canopen可以去调用 xff0c 其中socketca