ROS下樹莓派USBシリアル通信
3208 ワード
工事をするときは、ベリーパイでシリアル通信を行う必要があります.具体的には、あるROSのtopicデータを受信した後、シリアルポートにデータを送信する.コード作成には2つの方法があります.
方法1:serialライブラリの利用
1、運行環境はubuntuで、まずserialライブラリをインストールする:
2、構成書のpackage中のCMakeLists.txt
find_パッケージにserialを追加します.
3、デバイスへのUSBポート権限;
4、コードの例:
manipulator_ros_serial.cpp
5、USBポート番号とボーレートはlaunchファイルで構成できます.
manipulator_ros_serial.launch
方法2:boostを借りる
1、運行環境はraspbianであり、raspbianにはserialライブラリがない.
2、コード例
manipulator_ros.h
manipulator_serial.cpp
5、USBポート番号とボーレートはlaunchファイルで構成できます.
manipulator_serial.launch
方法1:serialライブラリの利用
1、運行環境はubuntuで、まずserialライブラリをインストールする:
sudo apt-get install serial
2、構成書のpackage中のCMakeLists.txt
find_パッケージにserialを追加します.
3、デバイスへのUSBポート権限;
4、コードの例:
manipulator_ros_serial.cpp
#include
#include
#include
#include
#define sBUFFERSIZE 7
unsigned char s_buffer[sBUFFERSIZE];
using namespace std;
serial::Serial ser;
//trans different serial cmds according to different action_cmd(joystick button)
void write_action_cmd(const std_msgs::Int64& action_cmd){
memset(s_buffer,0,sizeof(s_buffer));
if( 1 == action_cmd.data ){
s_buffer[0] = 0x55;
s_buffer[1] = 0x55;
s_buffer[2] = 0x05;
s_buffer[3] = 0x06;
s_buffer[4] = 0x01;
s_buffer[5] = 0x01;
s_buffer[6] = 0x00;
//std::cout<("serial_port", serial_port_, "/dev/ttyUSB0");
nh_private.param("baudrate", baudrate_, 9600);
std::cout<
5、USBポート番号とボーレートはlaunchファイルで構成できます.
manipulator_ros_serial.launch
方法2:boostを借りる
1、運行環境はraspbianであり、raspbianにはserialライブラリがない.
2、コード例
manipulator_ros.h
#ifndef MANIPULATOR_SERIAL_H_
#define MANIPULATOR_SERIAL_H_
#include
#include
#include
#include
#include
boost::asio::io_service io;
boost::asio::serial_port sp(io);
namespace manipulator_serial_namespace{
class ManipulatorSerial{
public:
ManipulatorSerial();
~ManipulatorSerial();
ros::Subscriber write_sub;
//boost::asio::io_service io;
void write_action_cmd(const std_msgs::Int64& action_cmd);
};
}
#endif
manipulator_serial.cpp
#include
#define sBUFFERSIZE 7
unsigned char s_buffer[sBUFFERSIZE];
using namespace std;
using namespace boost::asio;
namespace manipulator_serial_namespace{
ManipulatorSerial::ManipulatorSerial(){
ros::NodeHandle nh;
ros::NodeHandle nh_private("~");
std::string serial_port_;
int baudrate_;
nh_private.param<:string>("serial_port", serial_port_, "/dev/ttyUSB0");
nh_private.param("baudrate", baudrate_, 9600);
std::cout<
5、USBポート番号とボーレートはlaunchファイルで構成できます.
manipulator_serial.launch